本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

Kubernetes 中的 PersistentVolume Last Phase Transition Time

在最近的 Kubernetes v1.28 版本中,我们(SIG Storage)引入了一个新的 Alpha 特性,旨在改进 PersistentVolume (PV) 存储管理,并帮助集群管理员更好地了解 PV 的生命周期。通过在 PV 的状态中添加 lastPhaseTransitionTime 字段,集群管理员现在能够跟踪 PV 最后一次转换到不同阶段(phase)的时间,从而实现更高效、更明智的资源管理。

我们为什么需要新的 PV 字段?

Kubernetes 中的 PersistentVolume 在为集群中运行的工作负载提供存储资源方面扮演着至关重要的角色。然而,有效地管理这些 PV 可能具有挑战性,尤其是在确定 PV 最后一次在不同阶段之间转换的时间,例如 PendingBoundReleased。管理员通常需要知道 PV 上次被使用或转换到某个阶段的时间;例如,为了实施保留策略、执行清理或监控存储健康状况。

过去,Kubernetes 用户在使用 Delete 回收策略时曾遇到数据丢失问题,不得不求助于更安全的 Retain 策略。当我们计划引入新的 lastPhaseTransitionTime 字段时,我们希望提供一个更通用的解决方案,可以用于各种用例,包括根据卷上次使用的时间进行手动清理,或根据阶段转换时间生成警报。

lastPhaseTransitionTime 如何提供帮助

只要你启用了该特性门控(参见如何使用),每当 PersistentVolume (PV) 从一个阶段转换到另一个阶段时,其新的 .status.lastPhaseTransitionTime 字段都会更新。无论是从 Pending 转换到 Bound,从 Bound 转换到 Released,还是任何其他阶段转换,lastPhaseTransitionTime 都会被记录下来。对于新创建的 PV,其阶段将被设置为 Pending,并且 lastPhaseTransitionTime 也会被记录下来。

此功能允许集群管理员

  1. 实施保留策略

    通过 lastPhaseTransitionTime,管理员现在可以跟踪 PV 上次被使用或转换到 Released 阶段的时间。这些信息对于实施保留策略至关重要,以便清理在 Released 阶段停留了特定时间的资源。例如,现在编写一个脚本或策略来删除所有在 Released 阶段超过一周的 PV 变得非常简单。

  2. 监控存储健康状况

    通过分析 PV 的阶段转换时间,管理员可以更有效地监控存储健康状况。例如,他们可以识别出在 Pending 阶段停留时间异常长的 PV,这可能表明存储供应程序存在潜在问题。

如何使用它

从 Kubernetes v1.28 开始,lastPhaseTransitionTime 字段处于 Alpha 阶段,因此需要启用 PersistentVolumeLastPhaseTransitionTime 特性门控。

如果你想在 Alpha 阶段测试该功能,你需要在 kube-controller-managerkube-apiserver 上启用此特性门控。

使用 --feature-gates 命令行参数

--feature-gates="...,PersistentVolumeLastPhaseTransitionTime=true"

请记住,启用该特性不会立即生效;每当 PV 更新并在阶段之间转换时,这个新字段才会被填充。然后,管理员可以通过 PV 状态访问该新字段,这可以通过标准的 Kubernetes API 调用或 Kubernetes 客户端库来检索。

以下是使用 kubectl 命令行工具检索特定 PV 的 lastPhaseTransitionTime 的示例

kubectl get pv <pv-name> -o jsonpath='{.status.lastPhaseTransitionTime}'

未来展望

此功能最初作为 Alpha 特性引入,受默认禁用的特性门控保护。在 Alpha 阶段,我们(Kubernetes SIG Storage)将收集最终用户社区的反馈,并解决任何已发现的问题或改进点。

一旦收到足够的反馈,或者没有收到任何投诉,该功能就可以进入 Beta 阶段。Beta 阶段将使我们能够进一步验证实现并确保其稳定性。

在该字段升级到 Beta 的版本和该字段升级到正式发布(GA)的版本之间,至少会间隔两个 Kubernetes 版本。这意味着该字段最早可能在 Kubernetes 1.32 版本中正式可用,该版本可能安排在 2025 年初。

参与进来

我们始终欢迎新的贡献者,所以如果你想参与进来,可以加入我们的Kubernetes 存储特别兴趣小组(SIG)。

如果你想分享反馈,可以在我们的公共 Slack 频道上进行。如果你还不是该 Slack 工作区的成员,可以访问 https://slack.k8s.io/ 获取邀请。

特别感谢所有提供出色审查、分享宝贵见解并帮助实现此功能的贡献者(按字母顺序排列):