kubenetes从入门到上天系列第十五篇:Kubernetes的持久化存储PC和PVC

一:什么是PV

  • 基本概念:PV(PersistentVolume)是 K8s 中独立于 Pod、可被多 Pod 共享的存储资源,由管理员创建;容器通过 PVC(PersistentVolumeClaim)申请其使用权限。
  • 存储后端:可对接 NFS、iSCSI、AWS EBS 等多种持久化存储。
  • 匹配机制 :PV 定义存储类别、访问模式、容量等参数;PVC 声明所需容量、访问模式等条件**,满足条件的 PV 会与 PVC 绑定,供 Pod 访问。**
  • 核心价值
    1. 实现数据持久化,Pod 迁移 / 升级时数据不丢失。
    2. 支持多 Pod 间数据共享。
    3. 为 K8s 集群提供持久化存储的抽象层次与访问接口。

二:什么是PVC

  • 基本定义:PVC(PersistentVolumeClaim)是 K8s 中用于申请 PV(PersistentVolume)存储资源的对象,代表 Pod 容器所需的持久化存储逻辑卷,声明存储需求与访问模式,由集群自动匹配可用 PV。
  • 角色定位:充当 Pod 容器与实际存储之间的 "中介",让应用可声明所需存储空间与访问模式,解耦 Pod 与具体存储细节。
  • 关键约束
    1. PVC不能跨命名空间使用,仅能匹配同一命名空间下的 PV。
    2. 若要绑定特定 PV,PVC 规格需与该 PV 规格完全匹配;若 PV 的容量或访问模式不满足 PVC 需求,则无法绑定。
  • 使用流程:Pod 容器需持久化存储时,通过 PVC 申请 PV;集群为 PVC 匹配合适 PV 并分配;Pod 启动时将 PVC 挂载到指定目录,即可使用 PV 的持久化存储服务。
  • 核心价值:为 K8s 内 Pod 提供声明式存储管理方式,隔离存储资源请求,避免 Pod 定义与具体存储参数耦合,优化资源的灵活使用与管理。

三:PV和PVC的关系

  • 协同关系:在 Kubernetes 中,PVC 与 PV 协同工作,PVC 用于请求持久性存储资源,PV 负责提供这些资源的实际物理实现。
  • 工作原理
    1. PV 定义:PV 是集群中的可用存储资源,是持久化存储的实际物理实现(如 NFS、iSCSI),由管理员在控制台定义,可指定存储类型、访问模式、存储容量等信息。
    2. 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,并删除关联的外部存储资产(如云盘、共享存储等)。
相关推荐
雨奔1 天前
Kubernetes StatefulSet 详解:有状态服务的部署与管理实战
云原生·容器·kubernetes
成为你的宁宁1 天前
【K8s ConfigMap 配置管理创建、挂载与热更新实践】
云原生·容器·kubernetes
Dillon Dong1 天前
【系统运维】Docker版本冲突问题详解:从错误到解决方案
docker·容器
Dillon Dong1 天前
【系列主题】从 Docker 构建失败看依赖隔离:多阶段构建的“隐形陷阱”
运维·docker·容器
如果'\'真能转义说1 天前
《数据不丢失!本地挂载的 Docker 一键启动PS1脚本》
运维·docker·容器
郝开1 天前
Docker Compose 本地环境搭建:mysql
mysql·docker·容器
人工智能培训1 天前
AI模型部署进阶:Docker容器化部署AI项目
人工智能·深度学习·机器学习·docker·容器·transformer·知识图谱
胡小禾1 天前
K8S Helm
docker·容器·kubernetes
SPC的存折1 天前
1、K8S-单Master集群部署-OpenEuler24.03
云原生·容器·kubernetes
Cat_Rocky1 天前
k8s-单Master集群部署(简练理解)
java·容器·kubernetes