Kubernetes v1.34: 面向 Kubernetes 的 PSI 指标进阶至 Beta

随着 Kubernetes 集群的规模和复杂性不断增长,了解单个节点的健康状况和性能变得越来越重要。我们很高兴地宣布,自 Kubernetes v1.34 起,压力失速信息(Pressure Stall Information,PSI)指标已晋升为 Beta 版。

什么是压力失速信息(PSI)?

压力失速信息(PSI)是 Linux 内核(4.20 及更高版本)的一项功能,它提供了一种规范化的方法来量化基础设施资源的压力,即判断对某一资源的需求是否超过了当前的供应。它超越了简单的资源利用率指标,转而衡量任务因资源争用而停滞的时间。这是一种识别和诊断可能影响应用程序性能的资源瓶颈的强大方法。

PSI 为 CPU、内存和 I/O 暴露了指标,分为 some(部分)或 full(完全)压力。

some(部分)
至少一个任务因资源而停滞的时间百分比。这表明存在一定程度的资源争用。
full(完全)
所有非空闲任务同时因某资源而停滞的时间百分比。这表明存在更严重的资源瓶颈。
Diagram illustrating the difference between 'some' and 'full' PSI pressure.

PSI:“部分”压力与“完全”压力

这些指标在 10 秒、1 分钟和 5 分钟的滚动窗口内进行聚合,提供了资源压力随时间变化的全面视图。

Kubernetes 中的 PSI 指标

启用 KubeletPSI 特性门控后,kubelet 现在可以从 Linux 内核收集 PSI 指标,并通过两个渠道将其暴露出来:Summary API/metrics/cadvisor Prometheus 端点。这使你能够在节点、Pod 和容器级别监控和告警资源压力。

通过 /metrics/cadvisor 可以获取以下新的 Prometheus 暴露格式的指标:

  • container_pressure_cpu_stalled_seconds_total
  • container_pressure_cpu_waiting_seconds_total
  • container_pressure_memory_stalled_seconds_total
  • container_pressure_memory_waiting_seconds_total
  • container_pressure_io_stalled_seconds_total
  • container_pressure_io_waiting_seconds_total

这些指标,连同来自 Summary API 的数据,提供了资源压力的细粒度视图,使你能够精确定位性能问题的根源并采取纠正措施。例如,你可以使用这些指标来:

  • 识别内存泄漏: 内存的 some 压力持续增加可能表明应用程序存在内存泄漏。
  • 优化资源请求和限制: 通过了解工作负载的资源压力,你可以更准确地调整其资源请求和限制。
  • 自动扩缩工作负载: 你可以使用 PSI 指标来触发自动扩缩事件,确保你的工作负载拥有实现最佳性能所需的资源。

如何启用 PSI 指标

要在你的 Kubernetes 集群中启用 PSI 指标,你需要:

  1. 确保你的节点运行 Linux 内核版本 4.20 或更高版本,并使用 cgroup v2。
  2. 在 kubelet 上启用 KubeletPSI 特性门控。

启用后,你可以开始使用与 Prometheus 兼容的监控解决方案抓取 /metrics/cadvisor 端点,或查询 Summary API 来收集和可视化新的 PSI 指标。请注意,PSI 是一个 Linux 内核特性,因此这些指标在 Windows 节点上不可用。你的集群可以包含 Linux 和 Windows 节点的混合,在 Windows 节点上,kubelet 不会暴露 PSI 指标。

接下来是什么?

我们很高兴能将 PSI 指标带给 Kubernetes 社区,并期待你的反馈。作为一个 Beta 特性,我们正在积极努力改进和扩展此功能,以期发布稳定的 GA 版本。我们鼓励你试用并与我们分享你的体验。

要了解有关 PSI 指标的更多信息,请查看官方的 Kubernetes 文档。你也可以在 #sig-node Slack 频道上参与讨论。