在使用 AWS EKS 时,CloudWatch Container Insights 提供了丰富的容器级别监控指标,帮助我们深入了解应用的运行状态。如下截图中的 ContainerInsights pod_cpu_utilization
指标就是一个非常重要的维度。本文将详细解释这个指标的含义,并将其与我们熟悉的 kubectl top
命令以及底层主机节点的 CPU 概念进行对比。
1. CloudWatch pod_cpu_utilization
指标是什么?
截图中的指标名称是 ContainerInsights pod_cpu_utilization
,单位是 Percent (%)。
这个指标衡量的是在特定的 时间周期 (Period) 内(截图中是 1 分钟),该 Pod (exchange-app-api
) 所使用的 CPU 资源占所在节点总 CPU 的平均百分比。
- Statistic (统计量): 您看到了 Min, Max, Average, Sum, Last value。其中 Average (平均值)(例如 13.456%)代表了在整个 1 分钟内 Pod CPU 使用率的平均水平。
- Unit (单位): 百分比 (%)。指标值表示的是 Pod 使用的 CPU 占节点总 CPU 的比例。
注意: 早期文档或部分社区资料可能会提到该指标是相对于 Pod 的 request/limit,但实际 AWS 官方文档和实测表明,pod_cpu_utilization
是以节点为基准的。
2. 这个百分比是如何计算的?
CloudWatch Container Insights 的 Pod CPU utilization 百分比计算方式如下:
pod_cpu_utilization = (Pod 实际使用的 CPU / 节点总 CPU) * 100%
例如,如果节点有 4 核(4000m),Pod 使用了 400m,则利用率为 (400m / 4000m) * 100% = 10%
。
3. 与 kubectl top
的关系
-
单位不同:
kubectl top
显示的是毫核 (m),即 Pod 实际使用的 CPU 绝对值。- CloudWatch
pod_cpu_utilization
显示的是百分比 (%),即 Pod 使用量占节点总 CPU 的比例。
-
时间维度不同:
kubectl top
是实时快照。- CloudWatch 是统计周期(如 1 分钟)的平均、最大等。
如何关联?
如果 kubectl top
显示 Pod 使用 400m,节点总 CPU 是 4000m,则 CloudWatch 的 pod_cpu_utilization
平均值应接近 10%。
4. 与主机节点 CPU 的关系
Pod 的 CPU 使用量直接来自其所在节点的 CPU。pod_cpu_utilization
反映的是单个 Pod 对节点总 CPU 的消耗比例。节点上所有 Pod 的 CPU 使用率之和不会超过节点总 CPU 的 100%。
5. Pod CPU utilization over pod limit 指标
另一个常见指标是 Pod CPU utilization over pod limit
,它表示 Pod 实际 CPU 使用量超过其 CPU limit 的百分比。如果该值大于 0%,说明 Pod 已经超出了其设定的 CPU 限制,可能会被限流(throttle)或影响服务性能。
示例:
- 如果 Pod 的 CPU limit 设置为 500m,实际使用 600m,则
Pod CPU utilization over pod limit
为(600m - 500m) / 500m * 100% = 20%
。 - 该指标有助于发现哪些 Pod 经常超出 CPU 限制,及时调整资源分配。
总结:
CloudWatch Container Insights 的 pod_cpu_utilization
指标是 Pod 在一段时间内平均 CPU 使用率,以节点总 CPU 为基准。它与 kubectl top
的区别在于单位(百分比 vs 毫核)和时间粒度(平均 vs 实时快照)。理解这些差异和关联,有助于更准确地监控和分析 Kubernetes 集群中的 CPU 资源使用情况。同时,关注 Pod CPU utilization over pod limit
指标,可以及时发现和优化资源配置,避免性能瓶颈。