在应用上云与容器化的大潮中,Kubernetes 已成为事实上的标准平台。而在所有核心能力中,存储体系往往是最易被忽视、却最需要理解清楚的一环。因为 Pod 会销毁,但数据不能丢。
1、为什么容器需要持久化存储?
Kubernetes 中的 Pod 是短暂的、易变的:
- 重建 → 目录重置
- 调度到新节点 → 本地文件丢失
- 版本升级 → 数据不保证存在
这意味着:
⛔ 写入容器本地 /data 目录的文件无法在 Pod 重启后保留。
✔ 必须使用 Kubernetes Volume 或 PV/PVC/SC 来实现真正的持久化。
2、Volume:最基础的存储单元
Volume 是挂载到 Pod 里的目录,生命周期跟随 Pod。它是容器访问外部存储的接口,但并不解决存储资源的全生命周期管理。
常用 Volume 类型包括 hostPath、emptyDir、NFS、云存储插件(如 AWS EBS, Google Persistent Disk)以及后来更为主流的 PersistentVolumeClaim。

3、PV(PersistentVolume):集群级资源
PV 是集群管理员提供的“存储池”,代表了集群中的一块真实、独立的网络存储资源,类似于云盘、NAS或分布式存储卷。
PV 有两种提供方式:
- 静态供应(Static Provisioning):管理员手动创建 PV。
- 动态供应(Dynamic Provisioning):依赖 StorageClass 自动创建(推荐)。
以下是一个 NFS 类型 PV 的示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /data
server: 10.0.0.10
4、PVC(PersistentVolumeClaim):用户对存储的需求声明
PVC 是用户(开发者)提交的“存储申请单”,它不关心底层存储的具体细节,只声明所需存储的容量、访问模式等规格。系统会自动寻找符合要求的 PV 与之绑定。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
当 PVC 与 PV 成功绑定后,Pod 即可挂载该 PVC 来使用持久化存储。
5、StorageClass:动态供应的关键
如果你不想每次都让管理员手动创建 PV,那么 StorageClass 就是实现自动化供应的“工厂模板”。它定义了提供存储的驱动(Provisioner)和参数,当用户创建 PVC 并指定对应的 StorageClass 时,Kubernetes 会自动按需创建 PV。
常见的 Provisioner 包括 ebs.csi.aws.com、diskplugin.csi.alibabacloud.com 等,其强大的动态供应能力是云原生架构中存储管理的核心。
典型 StorageClass 示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_ssd
reclaimPolicy: Retain
当 PVC 指定 storageClassName: fast-ssd 时,系统将自动完成 PV 创建、绑定到 PVC 的全过程。
6、三者关系图解
用户(开发者)
│ 申请
▼
PVC(需求声明:我要多大?什么模式?)
│ 匹配/动态创建
▼
PV(实际卷:NFS、云盘、Ceph、NAS)
│ 与 Pod 挂载
▼
Pod(业务容器读取/写入数据)
如果启用了 StorageClass,流程简化为:PVC → 触发 StorageClass 自动创建 PV → 挂载到 Pod,实现存储的按需、自动化分配。
一句话概括:Pod 通过 PVC 申请存储,PVC 绑定到 PV,而 PV 可由 StorageClass 动态创建。
7、实战示例:Pod 挂载持久化卷
以下示例展示了如何在 Pod 中挂载一个已存在的 PVC:
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- name: web
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: html-volume
volumes:
- name: html-volume
persistentVolumeClaim:
claimName: data-claim
Pod 被删除后,数据依然安全地保留在底层的 PV 中。
8、关键参数与最佳实践
AccessModes(访问模式)
- ReadWriteOnce (RWO):可被单个节点读写挂载。
- ReadOnlyMany (ROX):可被多个节点只读挂载。
- ReadWriteMany (RWX):可被多个节点读写挂载。通常由 NFS、CephFS 等文件系统提供。
ReclaimPolicy(回收策略)
- Retain:保留数据,管理员手动清理。最安全。
- Delete:PVC 删除后自动删除后端存储(如云盘)。需谨慎。
- Recycle:已废弃。
最佳实践建议
✔ 生产环境优先使用 CSI (Container Storage Interface) 插件,功能更强大、标准化。
✔ 建议 RWX 访问模式使用 NAS / CephFS 等文件存储,RWO 使用块存储(如云盘)。
✔ 利用 StorageClass 实现存储资源的自动化供应与管理。
✔ 严禁在生产环境使用 hostPath,存在安全与数据可靠性风险。
9、总结
Kubernetes 持久化存储是 Stateful(有状态)应用落地的关键基石。Volume、PV、PVC、StorageClass 四者协同工作,构建了一套灵活、自动化的存储管理体系。
- Volume:是 Pod 内的挂载点。
- PV:是集群中的实际存储资源。
- PVC:是用户对存储资源的需求声明。
- StorageClass:是按需、自动创建 PV 的工厂模板。
理解并掌握这套机制,是你在 Kubernetes 上成功部署数据库、消息队列、文件服务等有状态服务的基础。对于构建健壮的云原生应用架构至关重要。