Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 是 Kubernetes 中管理存储的核心抽象概念,二者的关系可以类比为 存储资源提供方 和 存储资源消费方。以下是详细解释:
核心关系
| 对象 | 角色 | 生命周期 | 使用者 | 
|---|---|---|---|
| Persistent Volume (PV) | 存储资源的实体(如 NFS、云磁盘、本地磁盘等) | 独立于 Pod 和 PVC,需手动或动态创建 | 由集群管理员配置 | 
| Persistent Volume Claim (PVC) | 用户对存储资源的请求(声明需要的存储特性) | 与 Pod 绑定,由用户创建和销毁 | 开发者或应用运维人员 | 
交互流程
-  管理员创建 PV -  定义存储资源的容量、访问模式(如 ReadWriteOnce)、存储类型等。
-  示例 PV 配置(静态供应): apiVersion: v1 kind: PersistentVolume metadata:name: my-pv spec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain # 回收策略(Retain/Delete/Recycle)storageClassName: manual # 关联的 StorageClasshostPath:path: /data # 使用本地存储(仅示例) 
 
-  
-  用户创建 PVC -  声明需要的存储容量、访问模式、存储类(StorageClass)。 
-  示例 PVC 配置: apiVersion: v1 kind: PersistentVolumeClaim metadata:name: my-pvc spec:storageClassName: manualaccessModes:- ReadWriteOnceresources:requests:storage: 5Gi 
 
-  
-  Kubernetes 绑定 PV 和 PVC -  系统根据 PVC 的请求(容量、访问模式、StorageClass)匹配可用 PV。 
-  若匹配成功,PVC 进入 Bound状态,与 PV 建立一对一绑定。
-  若没有可用 PV,且启用了动态供应(通过 StorageClass),则会自动创建新 PV。 
 
-  
-  Pod 挂载 PVC -  在 Pod 中通过 volumes字段引用 PVC:apiVersion: v1 kind: Pod metadata:name: my-pod spec:containers:- name: appimage: nginxvolumeMounts:- name: datamountPath: /var/www/htmlvolumes:- name: datapersistentVolumeClaim:claimName: my-pvc # 使用已绑定的 PVC 
 
-  
关键特性对比
| 特性 | PV | PVC | 
|---|---|---|
| 定义者 | 集群管理员 | 应用开发者 | 
| 创建方式 | 手动创建或动态供应(通过 StorageClass) | 用户手动创建 | 
| 绑定关系 | 一个 PV 只能绑定到一个 PVC | 一个 PVC 只能绑定到一个 PV | 
| 回收策略 | 支持 Retain、Delete、Recycle | 无,随 PV 的回收策略处理 | 
| 动态供应 | 依赖 StorageClass 和 Provisioner | 通过指定 StorageClass 触发动态创建 PV | 
生命周期与回收策略
-  PV 的回收策略( persistentVolumeReclaimPolicy)-  Retain(默认):删除 PVC 后,PV 保留数据,需手动清理。 
-  Delete:删除 PVC 后,自动删除 PV 及底层存储(如云磁盘)。 
-  Recycle(已废弃):删除数据并标记 PV 为可用(仅适用于部分存储类型)。 
 
-  
-  PVC 删除后的行为 -  若 PV 的回收策略为 Retain,则 PV 进入Released状态,需管理员手动清理后重新绑定。
-  若为 Delete,则 PV 和底层存储资源会被自动删除。
 
-  
动态供应(Dynamic Provisioning)
当使用 StorageClass 时,PVC 可以直接触发 PV 的自动创建,无需管理员预先配置 PV。
-  示例 StorageClass(AWS EBS): apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: aws-gp2 provisioner: kubernetes.io/aws-ebs # 指定存储驱动 parameters:type: gp2 reclaimPolicy: Delete # 动态创建的 PV 默认回收策略 
-  用户创建 PVC 时指定 StorageClass: spec:storageClassName: aws-gp2 # 动态创建符合要求的 PVaccessModes: [ReadWriteOnce]resources:requests:storage: 20Gi 
总结
-  PV 是实际的存储资源,PVC 是用户对存储需求的抽象。 
-  PVC 通过匹配 PV 的规格(容量、访问模式、StorageClass)来绑定存储资源。 
-  动态供应 通过 StorageClass 实现按需自动创建 PV,大幅简化存储管理。 
-  二者的分离使得存储资源的提供方(管理员)和使用方(开发者)职责清晰,提升灵活性和可维护性。 
