首页/云/Kubernetes 速查/PV 与 PVC 绑定机制
配置与存储54 条

PV 与 PVC 绑定机制

PVC 是使用者的申请(容量、访问模式、StorageClass),PV 是实际的存储对象;控制器按条件把两者绑定,Pod 只通过 PVC 名引用卷。

Kubernetes 速查云更新于 2026-10-13

对象定位

PV 是集群中一块实际存储的抽象(容量、访问模式、回收策略、后端驱动),PVC 是使用者提出的申请(要多大、什么访问模式、用哪个存储类)。适用平台是 Kubernetes。绑定就是控制器按条件把两者配成一对:绑定完成后 Pod 只通过 PVC 名字引用卷,不需要知道底层是云盘、NFS 还是本地盘。动态制备时 PV 由 StorageClass 指定的驱动自动创建,静态时由管理员提前建好等待匹配。

基本信息

适用平台Kubernetes,PV 为集群级对象,PVC 为命名空间级对象
绑定关系一对一绑定,绑定后 PVC 的 spec.volumeName 指向具体 PV
回收策略PV 的 persistentVolumeReclaimPolicy 可取 Delete、Retain 等
扩容前提StorageClass 开启 allowVolumeExpansion 且底层驱动支持

典型使用场景

  • 数据库持久化:为 MySQL、PostgreSQL 挂载独立卷,避免 Pod 重建丢数据
  • 多环境同构部署:不同云上集群各自定义同名 StorageClass,清单保持一致
  • 容量盘点:核对 PVC 申请量与实际使用,识别长期空占的卷
  • 迁移与回收:删除前确认回收策略,避免 Delete 策略连带删除底层数据
  • 故障恢复:Pod 漂移后重新挂载同一 PVC,验证数据是否完整

PVC 引用

PVC 引用
spec:
  containers:
    - name: db
      image: registry.example.com/db:8.0
      volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: mysql-data

查看绑定

查看绑定
kubectl get pvc -n prod                        # STATUS 应为 Bound
kubectl get pv                                 # 集群级视图,看 Claim 列指向哪个 PVC
kubectl get pvc mysql-data -o jsonpath='{.spec.volumeName}'   # PVC 绑到哪个 PV
kubectl describe pvc mysql-data | grep -A5 Events             # 绑定失败的原因
kubectl get pv <pv-name> -o jsonpath='{.spec.persistentVolumeReclaimPolicy}'

绑定匹配条件

条件说明常见坑
容量PV 容量不小于 PVC 申请量静态 PV 容量偏小会一直 Pending
accessModesPV 支持的模式需覆盖 PVC 要求RWO 与 RWX 不通用,由驱动能力决定
storageClassName两边需一致(PVC 留空走默认类)类名拼错或旧类已删导致不绑定
selectorPVC 指定标签筛选时按标签匹配 PV标签写错时匹配不到候选卷
静态供应时 PV 与 PVC 的容量、访问模式、存储类需要逐项兼容;只要一项不满足,PVC 就会停在 Pending 并给出事件。
回收策略决定删除行为:Delete 会连带删除后端存储,Retain 会保留数据但卷转成 Released 状态且不会自动复用,需要手工处理。

易错点

  • 静态 PV 不写 storageClassName 或与 PVC 不一致时可能匹配不到,检查两边字段是否逐项一致
  • 已 Bound 的 PVC 不能再改容量以外的大多数字段,重建前先确认数据去向与备份,避免误删底层卷
  • 把 Retain 的 PV 当可复用:Released 状态的卷不会自动回到 Available,需要清理旧 claimRef 或重建卷
  • 忽略访问模式差异:云盘多为 RWO,多节点同时挂载会失败或数据不一致,跨节点共享要选支持 RWX 的存储

数据来源与参考

  • Kubernetes 官方文档 · Persistent Volumes(绑定)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌