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,并删除关联的外部存储资产(如云盘、共享存储等)。
相关推荐
returnthem2 小时前
Docker数据卷
运维·docker·容器
mengchanmian2 小时前
docker 国内云服务器开源镜像
运维·docker·容器
糟糕喔2 小时前
k8s运维-configmap和secret(4)
运维·容器·kubernetes
数据知道2 小时前
云原生MongoDB:容器化部署与Kubernetes集成详细步骤
mongodb·云原生·kubernetes
无级程序员2 小时前
k8s v1.35配置gateway, istio通过metalb vip访问
kubernetes·gateway·istio
ai产品老杨3 小时前
跨越指令集鸿沟:基于K8s编排与Docker多架构镜像的GB28181/RTSP异构AI视频底座构建
docker·架构·kubernetes
文静小土豆3 小时前
Docker 网络配置指南:Bridge、Host、None、Container 全攻略
网络·docker·容器
青木96012 小时前
封装成开箱即用的docker
docker·容器
还在忙碌的吴小二12 小时前
k8s是啥?
云原生·容器·kubernetes