CPU 压力是资源争用比传统 CPU 使用率指标更准确的指标。 虽然 CPU 使用率较高显示资源消耗,但它不一定表示性能问题。 在 Azure Kubernetes 服务(AKS)群集中,通过压力停止信息(PSI)指标了解 CPU 压力有助于识别真正的资源争用问题。
当 AKS 群集中的节点遇到 CPU 压力时,即使 CPU 使用率看起来适中,应用程序的性能也可能不佳。 PSI 指标通过测量任务延迟(而不仅仅是资源消耗)来深入了解实际资源争用。
本文介绍如何使用 PSI 指标监视 CPU 压力,并提供解决资源争用问题的最佳做法。
症状
下表概述了 CPU 压力的常见症状:
症状 | DESCRIPTION |
---|---|
应用程序延迟增加 | 即使 CPU 使用率看起来适中,服务也会响应较慢。 |
节流的容器 | 容器在处理过程中遇到延迟,尽管节点上有可用的 CPU 资源。 |
性能下降 | 应用程序遇到与 CPU 使用率百分比不相关的不可预知的性能变化。 |
故障排除清单
若要确定并解决 CPU 压力问题,请执行以下步骤:
步骤 1:启用和监视 PSI 指标
使用以下方法之一访问 PSI 指标:
- 在 Web 浏览器中,使用 Azure 监视托管 Prometheus 或其他监视解决方案查询 PSI 指标。
- 在控制台中,使用 Kubernetes 命令行工具 (
kubectl
)。
Azure 监控托管 Prometheus 提供了监控 PSI 指标的方法。
按照 启用 Prometheus 和 Grafana 中的说明为 AKS 群集启用 Azure Monitoring Managed Prometheus。
若要为 Prometheus 启用自定义的刮报指标,请参阅 Scrape 配置。 我们建议设置
minumum ingestion profile
到false
和node-exporter
设置为true
。从 Azure 门户导航到与 AKS 群集关联的 Azure Monitor 工作区。
在“监视”下,选择“指标”。
选择 Prometheus 指标 作为数据源。
注释
若要使用指标,需要在 Azure Monitoring Managed Prometheus 中启用它们。 这些指标由节点导出程序或 cAdvisor 公开。
在 Prometheus 浏览器中查询特定的 PSI 指标:
计算 PSI-some 百分比(CPU 上至少有一个任务停止的时间百分比):
rate(node_pressure_cpu_waiting_seconds_total[5m]) * 100
注释
某些容器级别指标(例如container_pressure_cpu_waiting_seconds_total
container_pressure_cpu_stalled_seconds_total
,在 AKS 中不可用),因为它们是处于 alpha 状态的 Kubelet PSI 功能门的一部分。 AKS 开始支持在功能进入 beta 阶段时使用该功能。
步骤 2:查看防止 CPU 压力的最佳做法
请查看下表,了解如何实现避免 CPU 压力的最佳做法:
最佳做法 | DESCRIPTION |
---|---|
专注于 PSI 指标而不是利用率 | 使用 PSI 指标作为资源争用的主要指标,而不是 CPU 利用率百分比。 有关详细信息,请参阅 PSI - 压力抖动信息。 |
识别利用最大 CPU 的 Pod | 隔离使用最大 CPU 的 Pod,并确定降低压力的解决方案。 有关详细信息,请参阅 排查 AKS 群集中的 CPU 使用率过高问题。 |
最小化 CPU 限制 | 请考虑删除 CPU 限制,并依赖于 基于请求的 CPU 共享的 Linux 完全公平计划程序 。 有关详细信息,请参阅 Pod 和容器的资源管理。 |
使用适当的服务质量(QoS)类 | 根据 Pod 的重要性和争用敏感性为每个 Pod 设置适当的 QoS 类别。 有关详细信息,请参阅 为 Pod 配置服务质量。 |
优化 Pod 放置策略 | 使用 Pod 反关联规则避免在同一节点上放置 CPU 密集型工作负荷。 有关详细信息,请参阅 将 Pod 分配到节点。 |
监测短暂的压力峰值 | 即使平均利用率看似可以接受,短暂的压力峰值仍可能指示问题的存在。 有关详细信息,请参阅 资源指标管道。 |
需要监控的关键 PSI 指标
注释
如果节点的 CPU 使用率适中,但节点上的容器遭遇 CFS 限制,则增加资源限额,或者完全去掉限额,并遵循 Linux 的完全公平调度(CFS) 算法。
节点级 PSI 指标
-
node_pressure_cpu_waiting_seconds_total
:累计任务等待 CPU 的时间。 -
node_cpu_seconds_total
:用于比较的传统 CPU 利用率。
容器级 PSI 指示器
-
container_cpu_cfs_throttled_periods_total
:容器被限制的时间段数。 -
container_cpu_cfs_throttled_seconds_total
:容器调节的总持续时间。 - 节流百分比:
rate(container_cpu_cfs_throttled_periods_total[5m]) / rate(container_cpu_cfs_periods_total[5m]) * 100
为何使用 PSI 指标?
AKS 使用 PSI 指标作为 CPU 压力的指标,而不是负载平均值,原因有多种:
- 在超大节点和多核节点中,负载平均值通常低于报告 CPU 饱和度。
- 在聊天和容器化节点上,负载平均值可能会过度发出信号,从而导致警报疲劳。
- 由于负载平均值没有每个 c 组的可见性,因此干扰 Pod 可以隐藏在低系统平均值后面。