一:什么是PV
- 基本概念:PV(PersistentVolume)是 K8s 中独立于 Pod、可被多 Pod 共享的存储资源,由管理员创建;容器通过 PVC(PersistentVolumeClaim)申请其使用权限。
- 存储后端:可对接 NFS、iSCSI、AWS EBS 等多种持久化存储。
- 匹配机制 :PV 定义存储类别、访问模式、容量等参数;PVC 声明所需容量、访问模式等条件**,满足条件的 PV 会与 PVC 绑定,供 Pod 访问。**
- 核心价值 :
- 实现数据持久化,Pod 迁移 / 升级时数据不丢失。
- 支持多 Pod 间数据共享。
- 为 K8s 集群提供持久化存储的抽象层次与访问接口。
二:什么是PVC
- 基本定义:PVC(PersistentVolumeClaim)是 K8s 中用于申请 PV(PersistentVolume)存储资源的对象,代表 Pod 容器所需的持久化存储逻辑卷,声明存储需求与访问模式,由集群自动匹配可用 PV。
- 角色定位:充当 Pod 容器与实际存储之间的 "中介",让应用可声明所需存储空间与访问模式,解耦 Pod 与具体存储细节。
- 关键约束 :
- PVC不能跨命名空间使用,仅能匹配同一命名空间下的 PV。
- 若要绑定特定 PV,PVC 规格需与该 PV 规格完全匹配;若 PV 的容量或访问模式不满足 PVC 需求,则无法绑定。
- 使用流程:Pod 容器需持久化存储时,通过 PVC 申请 PV;集群为 PVC 匹配合适 PV 并分配;Pod 启动时将 PVC 挂载到指定目录,即可使用 PV 的持久化存储服务。
- 核心价值:为 K8s 内 Pod 提供声明式存储管理方式,隔离存储资源请求,避免 Pod 定义与具体存储参数耦合,优化资源的灵活使用与管理。
三:PV和PVC的关系
- 协同关系:在 Kubernetes 中,PVC 与 PV 协同工作,PVC 用于请求持久性存储资源,PV 负责提供这些资源的实际物理实现。
- 工作原理 :
- PV 定义:PV 是集群中的可用存储资源,是持久化存储的实际物理实现(如 NFS、iSCSI),由管理员在控制台定义,可指定存储类型、访问模式、存储容量等信息。
- PVC 定义:在 PVC 的 YAML 文件中声明所需的存储容量和访问模式,Kubernetes 会根据 PVC 规范查找并匹配合适的 PV。
1:PVC 和 PV 的绑定
2:Pod 与 PVC 的挂载
- 用户创建 PVC 时需指定所需资源与访问模式,在匹配到可用 PV 前,PVC 保持未绑定状态。
- 绑定通过 PVC 规范中的
spec.selector实现,会选择与 PVC 要求最接近的 PV。 - PVC 与 PV 是一一对应关系:一个 PV 被某 PVC 绑定后,无法再被其他 PVC 使用。
- 若创建 PVC 时无合适 PV 可匹配,PVC 会处于 pending 状态。
- PVC 与 PV 绑定后,PV 会向集群中的 Pod 暴露。
- Pod 中指定 PVC 名称,Kubernetes 会根据绑定关系将对应 PV 加入 Pod 文件系统。
- 最终 Pod 在容器内挂载该 PV,使容器可访问持久化存储。
3:PV 回收策略
当 Pod 使用 PVC 作为存储卷时,会与 PV 绑定;删除 Pod 后,PVC 与 PV 的绑定解除,此时 PV 内数据的处理由回收策略决定,主要有三种:
- Retain (默认策略):删除 PVC 时,PV 仍存在并进入
released状态,无法被其他 PVC 绑定,但数据会完整保留,后续可重复使用。 - Recycle(已废弃,1.15 版本后不再推荐):早期用于回收数据的策略,现已被弃用。
- Delete:删除 PVC 时,会同时从 Kubernetes 集群中移除 PV,并删除关联的外部存储资产(如云盘、共享存储等)。