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,并删除关联的外部存储资产(如云盘、共享存储等)。
相关推荐
SPC的存折7 分钟前
22、K8S-Helm
云原生·容器·kubernetes
nix.gnehc13 分钟前
Langfuse v3 Docker 部署
运维·人工智能·docker·容器·langfuse
行者-全栈开发14 分钟前
【前端安全】CVE-2026-44578:Next.js SSRF 漏洞深度解析与修复实战指南
websocket·云原生·next.js·安全防护·vercel·cve-2026-44578·中间件绕过
Elastic 中国社区官方博客17 分钟前
在 Kubernetes 上的 Elastic Cloud:简化的可用区感知、重启和 mTLS
大数据·数据库·搜索引擎·云原生·容器·kubernetes·全文检索
蜀道山老天师20 分钟前
Prometheus监控Hadoop集群(实操完整版,含避坑指南)
大数据·linux·运维·hadoop·云原生·prometheus
sbjdhjd27 分钟前
01| 裸机部署 K8S:从零搭建生产可用集群
运维·经验分享·云原生·kubernetes·开源·kubelet·kubeless
jran-34 分钟前
Docker 容器化技术&docker安装
运维·docker·容器
不会写DN37 分钟前
基于 Docker + Watchtower 自动化部署后端服务
docker·容器·自动化
Elastic 中国社区官方博客41 分钟前
通过项目标签和路由,在 Elasticsearch Serverless 中实现更快的跨项目搜索
大数据·elasticsearch·搜索引擎·云原生·serverless·全文检索
逆境不可逃2 小时前
一篇速通互联网架构的不断升级过程:从单机到云原生
java·elasticsearch·搜索引擎·云原生·架构