第四部分:PV/PVC 资源介绍

📝 前言

在 Kubernetes 中,Pod 跟与 Docker 容器一样是短暂、可随时被调度和销毁的,因此持久化存储成为保障应用数据安全与稳定的关键。

本篇将介绍 Kubernetes 中与持久化存储相关的两个核心资源对象:PersistentVolume (PV) 与 PersistentVolumeClaim (PVC),并通过 NFS 作为后端示例,帮助你快速上手。

🧭 背景介绍

在容器编排环境下,Pod 重建或迁移到其他节点时,临时存储(emptyDir)的数据会丢失。
实际生产场景中常见需求:

  • 数据库(MySQL、PostgreSQL)需要可靠的磁盘存储。
  • 文件存储服务(图床、日志归档、数据分析)需要共享卷。
  • 状态服务需要与节点解耦的持久卷。

Kubernetes 使用 PV/PVC 模型,将存储资源与应用解耦,实现存储的声明式管理与动态或静态分配。

🧠 本章知识卡片

🚀 本章小节

1️⃣ 什么是 PersistentVolume (PV)?

  • 定义:集群级别的存储资源,代表一块真实存在的存储(NFS、Ceph、EBS、iSCSI 等)。
  • 生命周期:独立于 Pod,由管理员或动态供应器创建。
  • 关键字段:
    • capacity: 容量,如 storage: 10Gi
    • accessModes: 访问模式(ReadWriteOnce/ReadOnlyMany/ReadWriteMany
    • persistentVolumeReclaimPolicy: 回收策略(Retain、Recycle、Delete

2️⃣ 什么是 PersistentVolumeClaim (PVC)?

  • 定义:用户对存储资源的“申请”,描述期望的容量和访问模式。
  • 绑定过程:Kubernetes 控制器会寻找符合条件的 PV,并自动绑定。
  • 动态供应:若无匹配 PV 且定义了 StorageClass,可自动创建 PV。

3️⃣ 工作流程

大致工作流程图如下所示:

4️⃣ 实战示例:NFS 静态绑定

以下示例演示如何在已有 NFS 服务器(如 192.168.10.1:/data/share)上,手动创建 PV 与 PVC,并挂载到 Pod。

创建 NFS PV

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/share
server: 192.168.10.1

关键点:

  • ReadWriteMany 允许多个 Pod 同时读写,非常适合共享文件场景。
  • Retain 表示删除 PVC 时数据仍保留。

创建 PVC

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
volumeName: nfs-pv # 显式指定要绑定的 PV,也可以不指定 k8s 会自动匹配。

在 Pod 中挂载 PVC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: nfs-test-pod
spec:
containers:
- name: app
image: nginx:latest
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nfs-volume
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvc

以上示例为静态绑定,但是在实际的生产环境中使用地更多的可能是 StorageClass 动态绑定方式。

限于篇幅,这个等到后续再进行介绍。

5️⃣ 常用命令速览

命令 说明
kubectl get pv 查看所有 PV 状态
kubectl get pvc 查看所有 PVC 状态
kubectl describe pv <pv-name> 详细查看 PV 信息
kubectl describe pvc <pvc-name> 详细查看 PVC 信息

✅ 总结

PV 提供真实存储的抽象,PVC 是用户的资源申请。

通过 PV/PVC 模型,Kubernetes 将存储从应用与节点中彻底解耦。

NFS 是最简单的共享存储示例,便于演示 ReadWriteMany 场景。

生产环境常结合 StorageClass 与动态供应,简化管理。