Kubernetes 在 9 月 21 日的文章中介绍了 PersistentVolumeClaimUnusedSinceTime 功能门控,它在 1.37 中成为默认启用的 Beta。PVC(PersistentVolumeClaim)是 Pod 申请存储所用的对象。

PVC 保护控制器会给每个 PVC 添加 Unused 条件。Unused=True 表示没有非终止 Pod 引用该 PVC。

即使是无法调度的 Pending Pod 也算作使用。处于 Succeeded 或 Failed 状态的 Pod 不算。

文章给出了以下命令来检查条件状态。

kubectl get pvc my-data -o jsonpath='{.status.conditions[?(@.type=="Unused")].status}'

注意事项:观察时间与关闭功能后的过期条件

根据 KEP-5541,lastTransitionTime 是控制器观察到没有 Pod 引用该 PVC 的时间。它不是卷在基础设施层面实际卸载的时间;报告的未使用时长可能比实际短,但不会更长。

关闭功能后,现有 Unused 条件会留在 etcd 中,但不再更新。升级后不久,在观察到状态转换之前,PVC 上可能没有该条件。

自动删除未使用的 PVC 被明确列为非目标。这里描述的行为是资料中的定义,而不是在测试集群上观察到的结果。

回收策略决定实际删除范围

清理操作的后果由回收策略(reclaim policy)决定。在受支持的插件上,Delete 策略会同时删除 PersistentVolume 和底层存储。

动态创建的卷遵循 StorageClass 的回收策略,其默认值为 Delete。仅凭没有引用这一信号,无法判断数据能否删除。

从只读审查清单开始

先把 Unused=True 的 PVC 收集成只读清单。清理之前,确认所有者、复用计划、备份和实际回收策略。

如果条件缺失,或功能曾被关闭一段时间,仅凭该值证据不足。

Unused 条件不是删除许可,而是一份需要有人核实的 PVC 清单。