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

PersistentVolumeClaim无法匹配可用PersistentVolume问题求助

PV 无法与 PVC 绑定问题排查

已创建的持久化卷(PV)配置

$ kubectl get pv example-pv -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"example-pv"},"spec":{"accessModes":["ReadWriteOnce"],"capacity":{"storage":"10Gi"},"local":{"path":"/var/k8s-volumes/first"},"nodeAffinity":{"required":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"kubernetes.io/hostname","operator":"In","values":["rke2-server-node-1"]}]}]}},"persistentVolumeReclaimPolicy":"Delete","storageClassName":"local-storage","volumeMode":"Filesystem"}}
  creationTimestamp: "2023-04-26T02:14:22Z"
  finalizers:
  - kubernetes.io/pv-protection
  name: example-pv
  resourceVersion: "4740152"
  uid: 0874cd56-76be-4743-b24f-6ee7dce5604a
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  local:
    path: /var/k8s-volumes/first
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - rke2-server-node-1
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  volumeMode: Filesystem
status:
  phase: Available

无法绑定的持久化卷声明(PVC)配置

$ kubectl get pvc -n manager -o yaml
apiVersion: v1
items:
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    annotations:
      meta.helm.sh/release-name: manager
      meta.helm.sh/release-namespace: manager
    creationTimestamp: "2023-04-26T02:38:02Z"
    finalizers:
    - kubernetes.io/pvc-protection
    labels:
      app.kubernetes.io/instance: manager
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: manager
      app.kubernetes.io/version: 0.1.3
      helm.sh/chart: manager-0.1.0
    name: manager-pvc-pg
    namespace: manager
    resourceVersion: "4740252"
    uid: efa5460f-7aef-4a0d-a4a1-f902868cc38b
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 10Gi
    volumeMode: Filesystem
  status:
    phase: Pending
kind: List
metadata:
  resourceVersion: ""

关联的 Pod 状态

$ kubectl describe pod -n manager manager-pg-674df946fd-nqplc
Name:             manager-pg-674df946fd-nqplc
Namespace:        manager
Priority:         0
Service Account:  default
Node:             <none>
Labels:           app.kubernetes.io/component=postgres
                  app.kubernetes.io/instance=manager
                  app.kubernetes.io/name=manager
                  pod-template-hash=674df946fd
Annotations:      kubernetes.io/psp: global-unrestricted-psp
Status:           Pending
IP:
IPs:              <none>
Controlled By:    ReplicaSet/manager-pg-674df946fd
Containers:
  manager-pg:
    Image:      registry:5000/postgresql12:12.13
    Port:       5432/TCP
    Host Port:  0/TCP
    Environment:
      PGDATA:             /var/lib/postgresql/data/pgdata
      POSTGRES_USER:      user
      PGUSER:             user
      POSTGRES_PASSWORD:  <set to the key 'databasePassword' in secret 'shared-secret'>  Optional: false
      POSTGRES_DB:        dbname
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-w6wsl (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  postgres-data:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  manager-pvc-pg
    ReadOnly:   false
  kube-api-access-w6wsl:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  2m4s (x4 over 17m)  default-scheduler  0/4 nodes are available: 4 pod has unbound immediate PersistentVolumeClaims. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.

集群补充信息

存储类情况

$ kubectl get storageclass
NAME         PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  11d

PVC 已显式设置 storageClass 为空字符串,意图使用静态存储卷绑定,集群未启用 CSI 驱动:

$ kubectl get csidriver
No resources found

问题分析与解决方案

核心原因

PV 的 storageClassName 设置为 local-storage,但 PVC 未指定该存储类名称。Kubernetes 静态绑定要求 PV 和 PVC 的存储类名称完全匹配,若 PVC 未指定存储类,仅会匹配未设置存储类的 PV。

解决步骤

方案一:修改 PVC 匹配 PV 的存储类

编辑 PVC,添加与 PV 一致的存储类名称:

kubectl edit pvc manager-pvc-pg -n manager

修改后的 spec 片段:

spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: local-storage
  volumeMode: Filesystem

方案二:修改 PV 移除存储类配置

若不想使用存储类,可将 PV 的 storageClassName 设为空字符串,与 PVC 保持一致:

kubectl edit pv example-pv

修改后的 spec 片段:

spec:
  storageClassName: ""
  # 其余配置保持不变

验证绑定结果

执行以下命令确认绑定状态:

kubectl get pv example-pv
kubectl get pvc manager-pvc-pg -n manager

若 PV 和 PVC 状态均变为 Bound,则绑定成功,关联 Pod 会自动调度至 rke2-server-node-1 节点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:37:08