首页/云/Kubernetes 速查/PV 回收策略 Delete/Retain
配置与存储54 条

PV 回收策略 Delete/Retain

PV 释放后的处置方式:Delete 连底层存储一起删;Retain 保留数据但 PV 变为 Released,需要人工清理后重建或恢复可用。

Kubernetes 速查云更新于 2026-10-13

回收策略是什么

persistentVolumeReclaimPolicy 决定 PV 与 PVC 的绑定关系解除后,底层存储怎么处理。Delete 会连同底层卷一起删除,适合随手可重建的数据;Retain 只把 PV 状态变为 Released,底层数据与卷都保留下来,等管理员核对后再决定恢复或清理。动态供应时该字段默认继承 StorageClass,也可以单独修改某个 PV 的 spec 来调整。

两种策略对比

策略行为典型场景
DeletePVC 删除后自动删除 PV 与底层卷云盘、缓存、可重新生成的中间数据
Retain保留 PV 与数据,状态变 Released数据库、需要人工核对后再清理的数据
Recycle已废弃,不再推荐旧集群遗留配置,迁移时应改掉

典型使用场景

  • 数据库持久卷:用 Retain 保证误删 PVC 后数据仍在,争取恢复窗口
  • 临时构建缓存:用 Delete 让资源随 PVC 自动回收,避免长期占用与计费
  • 存储类统一治理:在 StorageClass 上设定默认策略,避免逐个 PV 手工调整
  • 事故复盘:确认误删后数据是否还在,取决于当时生效的回收策略
  • 存量盘点:找出长期处于 Released 的卷,评估是恢复还是清理

查看与修改

查看与修改
kubectl get pv                                                    # 先看 STATUS 与 RECLAIMPOLICY 两列
kubectl get pv pvc-8f3d -o jsonpath='{.spec.persistentVolumeReclaimPolicy}'
kubectl patch pv pvc-8f3d -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'   # 改单个 PV
kubectl get sc fast-ssd -o jsonpath='{.reclaimPolicy}'            # 动态供应时的默认来源
kubectl get pv | awk '$5=="Released"'                            # 盘点处于 Released 的卷

PV 列表读法

列含义关注点
STATUSAvailable / Bound / Released / FailedReleased 表示已解绑但未回收
RECLAIMPOLICYDelete 或 Retain与数据重要性是否匹配
CLAIM绑定的命名空间与 PVC 名Released 时仍显示旧 claim 引用
STORAGECLASS来源存储类决定该卷的一些默认行为
Retain 的 PV 变成 Released 后仍带着旧的 claimRef 指向已删除的 PVC,因此不能被新 PVC 自动绑定。要复用通常需要备份数据后重建卷,或用新 PVC 按卷名显式绑定,且必须确认旧数据是否需要保留。
生产数据库卷使用 Delete 策略时,删除 PVC 就等于删除数据本身。操作前先确认 spec.persistentVolumeReclaimPolicy 的实际值,并核对是否有可用备份,这类操作没有撤销路径。

易错点

  • 默认策略不设心防:动态供应的卷默认继承存储类设置,未确认就删 PVC 可能直接销毁数据
  • Retain 卷长期无人清理:底层存储持续占用与计费,账单一堆卷而业务早已下线
  • 把 Released 的 PV 直接改 claimRef 复用:旧数据会被新业务覆盖,属于不可逆的数据污染
  • 只看 StorageClass 回收策略不看单个 PV:个别 PV 被单独改过,策略与预期不一致

数据来源与参考

  • Kubernetes 官方文档 · Persistent Volumes(回收策略)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌