You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

修复执行步骤

  1. 删除现有冲突资源:
kubectl delete pv localpv
kubectl delete pvc pvclocal
  1. 应用修改后的资源配置文件(二选一:修复Local PV配置,或切换到NFS PV配置)
  2. 重新部署Deployment:
kubectl apply -f deployment.yaml

内容的提问来源于stack exchange,提问作者Romeo Kienzler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:43:07