Kubespray集群PV与PVC绑定失败,Pod处于Pending状态求助
问题:Pod与PVC处于Pending状态,PV却显示Available
环境背景
- 多台Ubuntu裸金属节点,通过Kubespray部署Kubernetes集群
- 所有节点已挂载NFS共享至
/data/xyz路径 - 已创建StorageClass、PersistentVolume(PV)、PersistentVolumeClaim(PVC)及Deployment资源
当前异常状态
- Pod与PVC状态持续为
Pending - PV状态显示为
Available - 执行
kubectl describe po得到调度错误:x node(s) didn't find available persistent volumes to bind. preemption: 0/x nodes are available: x Preemption is not helpful for scheduling
集群节点信息
k get nodes NAME STATUS ROLES AGE VERSION node1 Ready control-plane,worker 19d v1.26.3 node2 Ready worker 19d v1.26.3 node3 Ready worker 19d v1.26.3 node4 Ready worker 19d v1.26.3
相关资源配置文件
sc.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: localpv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage local: path: /data/xyz nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node1 node2 node3 node4
pvc.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvclocal spec: storageClassName: local-storage accessModes: - ReadWriteMany resources: requests: storage: 5Gi
deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx name: nginx-deployment template: metadata: labels: app: nginx name: nginx-deployment spec: containers: - name: nginx-deployment image: nginx ports: - containerPort: 80 volumeMounts: - mountPath: "/data/xyz" name: storage volumes: - name: storage persistentVolumeClaim: claimName: pvclocal
问题诊断与修复方案
1. AccessMode不匹配(核心问题)
PV配置的accessModes为ReadWriteOnce,但PVC请求的是ReadWriteMany,两者权限模式无法匹配,导致绑定失败。
修复: 修改PVC的accessModes与PV保持一致:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvclocal spec: storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
2. PV节点亲和性YAML格式错误
PV的nodeAffinity.values列表中,node2、node3、node4未添加-前缀,导致YAML解析错误,节点亲和性规则无法生效。
修复: 修正PV的节点亲和性配置:
nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node1 - node2 - node3 - node4
3. Local PV与NFS存储的场景冲突
你提到所有节点挂载了NFS共享,但当前使用的是Local PV类型。Local PV指向节点本地存储路径,而NFS是网络共享存储,二者设计场景矛盾。如果要使用NFS的多节点共享能力,建议直接创建NFS类型的PV:
NFS PV示例配置:
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs-storage nfs: server: <你的NFS服务器IP> path: /data/xyz
对应NFS StorageClass示例:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: Immediate
修复执行步骤
- 删除现有冲突资源:
kubectl delete pv localpv kubectl delete pvc pvclocal
- 应用修改后的资源配置文件(二选一:修复Local PV配置,或切换到NFS PV配置)
- 重新部署Deployment:
kubectl apply -f deployment.yaml
内容的提问来源于stack exchange,提问作者Romeo Kienzler
相关产品推荐
相关产品推荐

