Keycloak部署后PVC持续Pending及Pod异常问题求助
问题:Keycloak Pod 间歇性CrashLoopBackOff,PostgreSQL及PVC持续Pending
在集群部署Keycloak Helm Chart后,出现Pod间歇性处于CrashLoopBackOff状态、无法就绪(0/1)的问题。排查发现PostgreSQL Pod处于Pending状态,由于Keycloak依赖PostgreSQL的可用性,因此无法正常启动。
Pod状态信息:
NAME READY STATUS RESTARTS AGE keycloak-0 0/1 CrashLoopBackOff 472 (2m30s ago) 2d11h keycloak-lab-0 0/1 Init:0/1 0 27m keycloak-lab-postgresql-0 0/1 Pending 0 27m
进一步检查发现集群中无可用的存储类(Storage Class),于是尝试配置动态卷,创建了Storage Class和PersistentVolumeClaim(PVC),但PVC始终处于Pending状态。
已创建的资源清单
storageclass.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: kubernetes.io/nfs parameters: type: pd-ssd reclaimPolicy: Retain allowVolumeExpansion: true mountOptions: - debug volumeBindingMode: Immediate
persistentvolumeclaims.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim1 spec: accessModes: - ReadWriteOnce storageClassName: standard resources: requests: storage: 60Gi
当前PVC状态
kube-user@dev-m01:~$ kubectl get pvc -n keycloak NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE claim1 Pending standard 18m data-keycloak-lab-postgresql-0 Pending standard 172m data-keycloak-postgresql-0 Pending standard 2d12h data-ovh-keycloak-lab-postgresql-0 Pending standard 3d17h
PVC Describe输出
kube-user@dev-m01:~$ kubectl describe pvc claim1 -n keycloak Name: claim1 Namespace: keycloak StorageClass: standard Status: Pending Volume: Labels: <none> Annotations: <none> Finalizers: [kubernetes.io/pvc-protection] Capacity: Access Modes: VolumeMode: Filesystem Used By: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 3m21s (x62 over 18m) persistentvolume-controller no provisional volume plugin matched
提问:是否遗漏了基础配置?有什么解决建议?
解决建议
- 确认NFS动态供应器部署状态:
kubernetes.io/nfs是Kubernetes内置的存储供应器,但它不支持动态创建PV,只能绑定已存在的NFS类型PV。要实现NFS动态卷配置,需要部署第三方NFS供应器(如nfs-subdir-external-provisioner),并将StorageClass的provisioner字段改为对应供应器的名称(例如cluster.local/nfs-client-provisioner)。 - 清理不兼容的StorageClass参数:
type: pd-ssd是GCP持久磁盘的专属参数,和NFS存储类完全不兼容,需要删除该参数。如果使用第三方NFS供应器,需按照其文档配置对应的参数(如NFS服务器地址、共享路径等)。 - 安装NFS客户端工具:集群所有节点必须安装NFS客户端(如
nfs-common),否则无法挂载NFS存储。 - 临时方案:手动创建PV:如果暂时无法部署动态供应器,可以手动创建NFS类型的PersistentVolume,绑定到Pending的PVC上。示例PV清单:
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv-keycloak spec: capacity: storage: 60Gi accessModes: - ReadWriteOnce nfs: server: <你的NFS服务器IP> path: /nfs/shared/keycloak-storage storageClassName: standard
内容的提问来源于stack exchange,提问作者Tisighe Livinstone
相关产品推荐
相关产品推荐

