Kubernetes v1.36:PSI 指标进入稳定版



Kubernetes v1.36:PSI 指标进入稳定版

Kubernetes v1.36:PSI 指标进入稳定版

原文作者:Maria Fernanda Romano Silva(Google Cloud)。原文发表于 Kubernetes 官方博客,2026 年 5 月 12 日。本文是按 CC BY 4.0 许可整理的中文改写。

CPU 利用率和内存占用说明“用了多少资源”,却不一定说明任务因此等了多久。Linux 的压力停顿信息(Pressure Stall Information,PSI)记录任务因 CPU、内存或 I/O 资源不足而停顿的时间。Kubernetes v1.36 将节点、Pod 和容器层级的 PSI 指标提升为稳定接口,便于把资源争用与延迟联系起来。

PSI 补充了哪些观测信号

传统利用率指标可能掩盖排队等待:节点 CPU 尚未满载,特定任务仍可能因调度延迟而受影响。PSI 同时提供累计停顿时间,以及 10 秒、60 秒和 300 秒的移动平均值,帮助区分短暂尖峰与持续压力。

指标覆盖 CPU、内存和 I/O。它们描述的是压力与等待,不等同于 CPU 或内存的使用率,也不直接指出哪个工作负载应当扩容。

性能测试读数要连同条件一起看

Kubernetes SIG Node 对 4 核机器上的高密度负载(80 个以上 Pod)做了两组对照。第一组在内核 PSI 已开启的条件下开关 KubeletPSI,观察 kubelet 采集与暴露指标的额外成本。第二组对比内核 PSI 开启和关闭,观察内核维护压力统计的成本。以下图表及数字来自原文中的特定测试,不是本文运行的基准。

原文图 1:内核 PSI 始终开启时,启用和关闭 KubeletPSI 的节点系统 CPU 使用量对比
原文图 1:节点系统 CPU 使用量,比较 KubeletPSI 开关。原作者测试图;单位为核。
原文图 2:内核 PSI 始终开启时,启用和关闭 KubeletPSI 的 kubelet CPU 使用量对比
原文图 2:kubelet CPU 使用量,比较 KubeletPSI 开关。原作者测试图;单位为核。

作者报告说,KubeletPSI 开关两组的周期性波动形状接近;在该测试条件下,采集工作没有超出常见的 0.1 核或节点总容量 2.5% 范围。这个读数来自该环境,不构成任何集群的资源预算。

原文图 3:内核 PSI 开启和关闭时,节点系统 CPU 使用量对比
原文图 3:内核 PSI 开关下的节点系统 CPU 使用量。原作者测试图;单位为核。
原文图 4:内核 PSI 开启和关闭时,kubelet CPU 使用量对比
原文图 4:内核 PSI 开关下的 kubelet CPU 使用量。原作者测试图;单位为核。

第二组测试中,作者报告内核开销的系统 CPU 差值通常在 0.037 至 0.125 核之间,也就是 4 核节点容量的约 0.925% 至 3.125%;出现过一次 0.225 核(5.6%)的短暂尖峰,数秒内回落。kubelet 自身的指标收集在该测试中没有连续一秒以上超过 0.25 核(6.25%)。不要把这些数字当作对不同内核、容器密度或硬件的保证。

从 Beta 到 GA 的指标缺失变化

早期版本在 Kubernetes 功能启用、但 Linux 内核没有启用 PSI(例如以 psi=0 启动)时,可能输出数值为零的指标。监控端容易把这个零误读为“没有压力”。v1.36 会检查底层 cgroup 配置;不支持时省略指标,让“缺失”与“真实测得的零”区分开。

使用前提与采集入口

  • 节点使用 Linux 内核 4.20 或更高版本,并运行 cgroup v2。
  • 内核编译时启用 CONFIG_PSI=y,且启动参数没有关闭 PSI(psi=0)。
  • Kubernetes v1.36 起,PSI 指标为 GA,不需要启用该功能门控。
  • 可从 /metrics/cadvisor 抓取,也可读取 Summary API。Windows 节点不提供 Linux PSI 指标;混合操作系统集群中,这些指标会在 Windows 节点缺失。

下面是按原文含义整理的只读查询示例。它需要有权代理访问 kubelet;示例固定节点名并用 jq 的参数传递容器名,避免把变量拼进过滤表达式。

kubectl get --raw "/api/v1/nodes/worker-1/proxy/stats/summary" |
  jq --arg name "example-container"     '.pods[].containers[] | select(.name == $name) |
     {name, cpu: .cpu.psi, memory: .memory.psi, io: .io.psi}'
权限边界:访问 kubelet 代理是高权限操作。只应由经过授权的节点管理员执行;需限定 RBAC、核验 kubectl 当前上下文,并避免把诊断 API 公开给不可信调用者。本文没有连接集群或运行命令。首个节点的示例选择也不是通用生产巡检脚本。
Linux 内核采集 PSI,cgroup v2 提供容器层级信息,kubelet 汇总后供监控系统读取;Windows 节点没有 Linux PSI 指标
数据路径示意图,由本文编译者绘制;不是测试输出。

核验范围

本文静态核对了原文中的版本、性能测试条件、指标可用前提和 Summary API 命令。未执行 kubectl 或 jq,没有访问集群,也没有重复 SIG Node 性能实验。性能曲线是原文图表,不能视作本次验证结果;上线前应按目标节点内核、cgroup、Kubernetes 版本和权限模型复核。

继续阅读

致谢:PSI 指标由 Kubernetes SIG Node 与多位贡献者协作推进;详见SIG Node 社区页。

来源与署名:Maria Fernanda Romano Silva(Google Cloud),《Kubernetes v1.36: PSI Metrics for Kubernetes Graduates to GA》,Kubernetes 官方博客,2026-05-12。原文与图表按 CC BY 4.0 标注;本译写保留署名、来源和更改说明。


© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容