CPU 壓力比傳統 CPU 使用率計量更精確的資源爭用指標。 雖然高 CPU 使用量會顯示資源耗用量,但不一定表示效能問題。 在 Azure Kubernetes Service (AKS) 叢集中,透過壓力停滯資訊 (PSI) 計量瞭解 CPU 壓力有助於識別真正的資源爭用問題。
當 AKS 叢集中的節點遇到 CPU 壓力時,即使 CPU 使用率看起來適中,應用程式也可能遭受效能不佳。 PSI 計量可藉由測量工作延遲,而不只是資源耗用量,來提供實際資源爭用的見解。
本文可協助您使用 PSI 計量監視 CPU 壓力,並提供解決資源爭用問題的最佳做法。
癥狀
下表概述 CPU 壓力的常見徵兆:
| 癥狀 | 說明 |
|---|---|
| 增加應用程式延遲 | 即使 CPU 使用率看起來適中,服務回應速度也會變慢。 |
| 節流容器 | 容器在處理時遇到延遲,儘管節點上有可用的CPU資源。 |
| 效能降低 | 應用程式遇到無法預測的效能變化,這些變化不會與CPU使用量百分比相互關聯。 |
疑難排解檢查清單
若要找出並解決 CPU 壓力問題,請遵循下列步驟:
步驟 1:啟用和監視 PSI 計量
使用下列其中一種方法來存取 PSI 計量:
- 在網頁瀏覽器中,使用 Azure Monitoring Managed Prometheus 或其他監視解決方案來查詢 PSI 計量。
- 在控制台中,使用 Kubernetes 命令行工具 (
kubectl)。
Azure 監視管理的 Prometheus 提供監視 PSI 指標的方式:
遵循 啟用 Prometheus 和 Grafana 中的指示,為您的 AKS 叢集啟用 Azure 監視受控 Prometheus。
若要為 Prometheus 啟用自定義的抓取度量,請參閱 Scrape 設定。 我們建議將
minumum ingestion profile設定為false,並將node-exporter設定為true。從 Azure 入口網站流覽至與 AKS 叢集相關聯的 Azure 監視器工作區。
在 [監視] 下,選取 [計量]。
選取 [Prometheus 計量 ] 作為數據源。
備註
若要使用指標,您必須在 Azure 監視受控 Prometheus 中加以啟用。 這些計量是由 Node 導出工具或 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 壓力的最佳做法:
| 最佳做法 | 說明 |
|---|---|
| 專注於 PSI 計量而非使用率 | 使用 PSI 計量作為資源爭用的主要指標,而不是 CPU 使用率百分比。 如需詳細資訊,請參閱 PSI - 壓力停滯資訊。 |
| 識別使用最多 CPU 的 Pod | 隔離使用最多 CPU 的 Pod,並找出降低壓力的解決方案。 如需詳細資訊,請參閱 針對 AKS 叢集中的高 CPU 使用量進行疑難解答。 |
| 將 CPU 限制降到最低 | 請考慮移除 CPU 限制,並根據要求依賴 Linux 的完全公平排程器 與 CPU 共用。 如需詳細資訊,請參閱 Pod和容器的資源管理。 |
| 使用適當的服務品質 (QoS) 類別 | 根據每個 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 意見反應社群提交產品意見反應。