在使用 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
指標,可以及時發現和優化資源配置,避免性能瓶頸。