使用 PSI 指标对 AKS 群集中的 CPU 压力进行故障排除

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 指标的方法。

  1. 按照 启用 Prometheus 和 Grafana 中的说明为 AKS 群集启用 Azure Monitoring Managed Prometheus。

    若要为 Prometheus 启用自定义的刮报指标,请参阅 Scrape 配置。 我们建议设置 minumum ingestion profilefalsenode-exporter 设置为 true

  2. Azure 门户导航到与 AKS 群集关联的 Azure Monitor 工作区。

    显示如何导航到 Azure Monitor 工作区的屏幕截图。

  3. 在“监视”下,选择“指标”。

  4. 选择 Prometheus 指标 作为数据源。

    注释

    若要使用指标,需要在 Azure Monitoring Managed Prometheus 中启用它们。 这些指标由节点导出程序或 cAdvisor 公开。

  5. 在 Prometheus 浏览器中查询特定的 PSI 指标:

    • 对于节点级 CPU 压力,请使用 node_pressure_cpu_waiting_seconds_total Prometheus 查询语言(PromQL)。

      显示如何查询节点级 CPU 压力的屏幕截图。

    • 对于 Pod 级 CPU 压力,请使用 container_cpu_cfs_throttled_seconds_total PromQL。

  6. 计算 PSI-some 百分比(CPU 上至少有一个任务停止的时间百分比):

    rate(node_pressure_cpu_waiting_seconds_total[5m]) * 100

注释

某些容器级别指标(例如container_pressure_cpu_waiting_seconds_totalcontainer_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 可以隐藏在低系统平均值后面。

参考文献

联系我们以获得帮助

如果您有任何疑问或需要帮助,可以创建支持请求,或咨询Azure社区支持。 您还可以向Azure反馈社区提交产品反馈。