Kubernetes 中,Pod 可以重建或迁移,因此不能把重要数据只放在容器文件系统里。
四个对象的关系
Pod → PVC(存储申请)→ PV(存储资源)→ 实际存储- Volume 描述 Pod 怎样挂载存储;
- PersistentVolume 是集群中的存储资源;
- PersistentVolumeClaim 是应用提出的容量和访问模式需求;
- StorageClass 可以按 PVC 动态创建 PV。
PVC 解耦了应用与具体磁盘,但不会自动解决备份、复制、故障切换和数据一致性。
为什么数据库常用 StatefulSet
Deployment 适合可互换的无状态副本;StatefulSet 为每个副本提供稳定序号、稳定网络身份和独立 PVC:
db-0 → data-db-0
db-1 → data-db-1
db-2 → data-db-2Pod 重建后 IP 和 UID 仍可能变化,但同一序号会继续使用对应的名字与 PVC。volumeClaimTemplates 用来为每个副本生成独立 PVC,避免多个数据库进程误写同一个数据目录。
StatefulSet 通常配合 Headless Service,让客户端通过类似 db-0.db 的稳定 DNS 访问特定副本。
删除时要更谨慎
默认情况下,缩容或删除 StatefulSet 时,PVC 会保留,以防误删数据;persistentVolumeClaimRetentionPolicy 可以改变这一行为。这是保护机制,也意味着需要明确的数据回收流程。删除 PVC 前应先确认备份、StatefulSet 的 PVC 保留策略、PV reclaim policy 和底层卷状态。