PV 与 PVC
本教程共 65 篇 · 第 35 篇 · 更新于 2026-08-14 · 约 10 分钟阅读
本节目标:理解 PV 和 PVC 为什么要把”存储供给”和”存储消费”拆开,知道它们怎么绑定、有哪些访问模式和回收策略,以及 Pod 怎么用 PVC 挂上持久存储。
emptyDir 之类用完就丢,显然存不了数据库。Kubernetes 用两个对象解决持久存储:PV(持久卷)和 PVC(持久卷声明)。
一句话区分:PV 是集群里的存储资源,像节点一样归集群管;PVC 是用户发出的”我要一块这样的存储”的请求,像 Pod 请求节点资源一样。
35-1 为什么分两个对象
这其实是职责分离。集群管理员关心”后端用 NFS 还是云盘、怎么接”,普通用户只关心”我要 10G、能读写”。
如果让用户直接写存储细节,就得把 NFS 服务器地址、云厂商参数全暴露出去。PVC 把用户和底层实现隔开:用户只说要什么,系统去找匹配的 PV 绑上。
NotePVC 和 PV 的绑定是一对一的。一个 PVC 只能绑一个 PV,一个 PV 同一时刻也只服务一个 PVC。绑上之后是排他关系。
35-2 制备:静态与动态
PV 有两种来法。静态制备是管理员手动创建一批 PV 对象,写明真实存储细节,等着用户来认领。
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"
动态制备更省心。用户创建 PVC 时若没有现成 PV 匹配,系统会按 StorageClass 自动造一个 PV。这一套下一章细讲,这里先记住:动态制备是现在的主流。
PVC 长这样,用户只声明大小和访问模式:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
35-3 访问模式
访问模式决定卷能怎么被挂。四种要记:
ReadWriteOnce(RWO):只能被一个节点以读写方式挂载。最常见。ReadOnlyMany(ROX):可被多个节点同时只读挂载。ReadWriteMany(RWX):可被多个节点同时读写。需要后端存储支持,比如 NFS。ReadWriteOncePod(RWOP):v1.22 后加入,只能被同一个节点上的单个 Pod 读写,比 RWO 更严格。
Tip选错访问模式是最常见的挂载失败原因。单实例数据库用 RWO 就够了;多副本都要写同一份文件,后端又不是 NFS/CephFS,那 RWX 会直接不满足。
35-4 回收策略
PV 被释放后怎么处理,由回收策略决定:
Retain(保留):PVC 删了,PV 还在,状态变”已释放”。数据留着,等管理员手动回收。最安全,生产常用。Delete(删除):PV 和后端存储一起删掉。动态制备默认就是它。Recycle(回收):已废弃,别用了,改用动态制备。
Warning动态制备的 PV 默认继承 StorageClass 的回收策略,多半是
Delete。数据库数据删 PVC 就没了,重要数据记得把策略设成Retain,或单独建 StorageClass。
35-5 Pod 怎么用 PVC
Pod 自己不直连 PV,而是把 PVC 当卷用。系统顺着 PVC 找到绑定的 PV,再挂给容器。
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
spec:
containers:
- name: task-pv-container
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pvc
Pod 跑起来后,/usr/share/nginx/html 指向的就是那块持久存储。Pod 重启、乃至被调度到别的节点,只要 PVC 还在,数据就还在。
NoteKubernetes 有”保护使用中的存储对象”机制。Pod 正在用的 PVC、PVC 已绑的 PV,即使你下删除命令,也会被推迟删除,避免误删丢数据。状态会停在
Terminating并带对应 finalizer。