StatefulSet 缩容后 PVC 仍然 Bound:PV 的 Delete 不是缩容清理开关
StatefulSet 缩容后 PVC 默认可能保留。区分 whenScaled、声明删除与 PV 回收链,核对实际对象和数据保留要求,再选择受控清理。
StatefulSet 从四个副本缩到一个,Pod 数量减少了,四张 PVC 却仍是 Bound。即使 PV 的回收策略是 Delete,这也可能是正常保留行为:PV 回收策略决定声明释放后怎样处理存储,不负责在 Pod 缩容时删除 PVC。
先确认数据是否应当保留,再选择手工处置闲置声明或配置 StatefulSet 的 PVC 保留策略。直接删除仍绑定的 PV,可能让对象停在 Terminating,也会打乱后续恢复判断。
对齐 StatefulSet、PVC 与 PV 三层对象
以下名称是示例,先在正确集群和命名空间查看:
kubectl -n team-app get statefulset db -o yaml
kubectl -n team-app get pods
kubectl -n team-app get pvc
kubectl get pv
从实际 Pod 的卷引用和 StatefulSet 的 volumeClaimTemplates 找到对应 PVC,再从 PVC 的 volumeName 找到 PV。PVC 属于命名空间,PV 属于集群范围,不能只按相近名称猜绑定关系。
确认剩余 Pod 的身份、已缩掉的副本、模板生成的声明,以及 PV 的实际回收策略。数据盘在云平台还存在,不一定表示 Kubernetes 缩容失败;需要先看 PVC 是否本来就没有被删除。
默认 Retain 会保留模板生成的 PVC,使同一身份后续重新启动时可以使用原数据。缩容只减少 Pod,不意味着这些数据已经无用。数据库副本、队列分区或其他有状态程序,应先按应用自己的流程完成退出与数据处理。
需要自动清理时,配置的是 whenScaled
StatefulSet 的 persistentVolumeClaimRetentionPolicy 分别控制删除整个 StatefulSet 与缩减副本的行为。该能力在 Kubernetes 1.23 首次作为 Alpha 提供,1.27 成为默认启用的 Beta,1.32 起稳定;旧集群必须核对版本和 API server、controller manager 的实际支持条件。
在支持该能力、且已确认缩掉副本的数据允许删除时,可以通过原管理清单配置以下片段:
spec:
persistentVolumeClaimRetentionPolicy:
whenDeleted: Retain
whenScaled: Delete
这表示缩容时删除受影响的模板 PVC,删除整个 StatefulSet 时保留它们。片段不是完整部署清单,其余字段按原对象保留;由 Operator 或其他控制器管理的 StatefulSet,应先核对其正式管理入口,避免控制器覆写本次配置。
两项默认都是 Retain。该策略仅针对 StatefulSet 删除或缩容,不把节点故障导致的 Pod 替换当作删除数据的机会。它也不适用于所有手工引用的外部 PVC,不能用此字段清理整个命名空间。
控制器通过 ownerReferences 和垃圾回收在相应 Pod 终止后处理声明,给正常卸载留出顺序。对象还在协调中时,不要强删 Pod 或清除 finalizers 来加速;控制器异常、保护引用与存储供应器错误要沿实际状态检查。
PVC 删除以后,才继续看 PV 回收
PVC 已被正确删除后,PV 采用 Delete 时,支持该策略的存储实现会清理 PV 与后端存储;采用 Retain 时,需要管理员按保留卷流程处置。应核对现有 PV 的字段,不只看后来改过的 StorageClass 默认值。
删除不是瞬时保证。PVC 正被 Pod 使用时有保护机制,存储供应器也可能通过 finalizer 等待后端删除完成。声明或 PV 长期卡住时,保存事件、引用关系和供应器状态继续排查,不能把强行去掉保护标记作为常规收尾。
若此前已经手工删了 PV 并进入 Terminating,先记录当前对象、绑定与后端状态,停止继续删除。不能通过把回收策略文本改回 Retain,就保证已经启动的后端删除可以取消。
手工清理与自动策略都需要数据恢复前提
选择手工处理时,逐张确认目标声明属于已退出的副本,没有其他 Pod 使用,应用不再需要其中的数据,并准备可验证的备份。只删除审定的闲置 PVC,不用全空间批量删除命令。Delete 策略可能让后端盘随之消失,恢复应来自预先保留的备份,而不是期待重新建一个同名 PVC 找回数据。
自动策略配置前也要保存对象、数据备份和副本恢复方案。更改策略可能影响现有声明的所有权及后续清理,不应在有闲置数据尚未核对时直接开启。自动伸缩会反复缩容的应用,尤其需要明确每次减少副本是否允许销毁其数据。
验收分层进行:剩余副本和业务正常,只有允许删除的模板 PVC 被清理,PV 与后端存储按各自策略进入预期状态。保留的数据也应能按原应用流程重新使用。将 whenScaled 改回 Retain 可调整后续行为,但不会找回已删除的 PVC 数据或磁盘。


