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,并删除关联的外部存储资产(如云盘、共享存储等)。
相关推荐
无巧不成书02187 分钟前
基于WSL 2的Docker远程开发全栈实战指南
运维·docker·容器·docker desktop·wsl 2·vs code远程开发·容器化开发
Renhao-Wan9 分钟前
Docker 核心原理详解:镜像、容器、Namespace、Cgroups 与 UnionFS
java·后端·docker·容器
Eloudy13 分钟前
docker pull ubuntu:22.04 失败的解决记录
运维·docker·容器
taWSw5OjU2 小时前
Docker] Docker中`overlay2`磁盘占用爆满的清理方案
docker·容器·eureka
Ashmcracker2 小时前
Azure Key Vault 证书如何在 AKS 中同步为 Kubernetes Secret?附权限配置与 YAML 示例
kubernetes·flask·azure
掘根16 小时前
【微服务即时通讯项目】系统联调
微服务·云原生·架构
DONG99917 小时前
配置docker代理
docker·容器
怎么就重名了17 小时前
docker可以动态修改端口映射吗
运维·docker·容器
JEECG低代码平台18 小时前
敲敲云零代码平台一键部署实战:命令安装 vs Docker 安装
运维·docker·容器
p***769820 小时前
NAS飞牛Docker 部署OmniBox影视资源聚合平台:网盘秒播、影视聚合、自定义直播,超神的一条龙服务
运维·docker·容器