針對 AKS 叢集中的記憶體飽和度進行疑難解答

本文討論針對記憶體飽和度問題進行疑難解答的方法。 如果至少有一個應用程式或進程需要的記憶體超過容器主機所能提供的記憶體,或主機耗盡其可用記憶體,就會發生記憶體飽和。

必要條件

徵狀

下表概述記憶體飽和度的常見徵兆。

徵兆 描述
無法排程的Pod 如果節點接近其設定的記憶體限制,則無法排程其他 Pod。
Pod 收回 如果節點的記憶體不足,kubelet 可以收回 Pod。 雖然控制平面會嘗試在具有資源的其他節點上重新排程收回的Pod,但不保證其他節點有足夠的記憶體可執行這些Pod。
節點尚未就緒 記憶體飽和可能會導致 kubeletcontainerd 沒有回應,最終導致節點整備問題。
OOM (記憶體不足) 終止 如果 Pod 收回無法防止節點問題,就會發生 OOM 問題。

疑難解答檢查清單

若要減少記憶體飽和度,請使用有效的監視工具並套用最佳做法。

步驟 1:識別記憶體飽和度的節點

使用下列其中一種方法來識別具有記憶體飽和度的節點:

  • 在網頁瀏覽器中,使用 Azure 入口網站 中 AKS 的 Container Insights 功能。

  • 在控制台中,使用 Kubernetes 命令行工具 (kubectl) 。

Container Insights 是 AKS 內監視容器工作負載效能的功能。 如需詳細資訊,請參閱啟用 Azure Kubernetes Service (AKS) 叢集的容器深入解析

  1. Azure 入口網站 上,搜尋並選取 [Kubernetes 服務]

  2. 在 Kubernetes 服務清單中,選取叢集的名稱。

  3. 在叢集的瀏覽窗格中,尋找 [ 監視 ] 標題,然後選取 [ 深入解析]

  4. 設定適當的 時間範圍 值。

  5. 選取 [ 節點] 索引標籤

  6. 在 [ 計量 ] 列表中,選 取 [記憶體工作集 (從 Allocatable) 計算

  7. 在百分位數選取器中,將範例設定為 [最大值],然後選取 [最大百分比] 數據行卷標兩次。 此動作會依所使用的記憶體百分比上限,從最高到最低來排序數據表節點。

    Azure 入口網站 AKS) 叢集 Azure Kubernetes Service (內 Container Insights 中 [節點] 檢視的螢幕快照。

  8. 因為第一個節點具有最高的記憶體使用量,請選取該節點來調查節點上執行之 Pod 的記憶體使用量。

    Azure 入口網站 Azure Kubernetes Service (AKS) 叢集中 Container Insights 中 [節點] 檢視下節點容器的螢幕快照。

    注意事項

    Pod 的 CPU 或記憶體使用量百分比是以為容器指定的 CPU 要求為基礎。 它不代表節點的CPU或記憶體使用量百分比。 因此,請查看實際的CPU或記憶體使用量,而不是Pod的CPU或記憶體使用量百分比。

現在您已識別出使用高記憶體的 Pod,您可以識別在 Pod 上執行的應用程式。

步驟 2:檢閱最佳做法以避免記憶體飽和

請檢閱下表,以瞭解如何實作避免記憶體飽和的最佳做法。

最佳作法 描述
使用記憶體 要求和限制 Kubernetes 提供選項來指定 要求) (記憶體大小下限,以及容器的記憶體大小上限 (限制) 。 藉由設定 Pod 的限制,您可以避免節點的記憶體壓力。 請確定所有執行中 Pod 的匯總限制不會超過節點的可用記憶體。 這種情況稱為 過度認可。 Kubernetes 排程器會透過服務 品質 (QoS) ,根據設定的要求和限制來配置資源。 如果沒有適當的限制,排程器可能會在單一節點上排程太多 Pod。 這最終可能會關閉節點。 此外,當 kubelet 正在收回 Pod 時,它會優先處理記憶體使用量超過其定義要求的 Pod。 建議您將記憶體要求設定為接近實際使用量。
啟用 水準 Pod 自動調整程式 藉由調整叢集,您可以平衡多個 Pod 的要求,以防止記憶體飽和。 這項技術可以減少特定節點上的記憶體使用量。
使用 反親和性標記 在設計時記憶體未系結的案例中,您可以使用節點選取器和親和性或反親和性標記,這可以將工作負載隔離到特定節點。 藉由使用反親和性標記,您可以防止其他工作負載排程這些節點上的 Pod。 這可減少記憶體飽和度問題。
選擇 較高的 SKU VM 虛擬機 (具有更多隨機存取記憶體 (RAM) 的 VM) 更適合處理高記憶體使用量。 若要使用此選項,您必須建立新的節點集區、將節點系結 (使其無法排程) ,並清空現有的節點集區。
隔離 系統和使用者工作負載 建議您在使用者節點集區上執行應用程式。 此設定可確保您可以將 Kubernetes 特定的 Pod 隔離到系統節點集區,並維護叢集效能。

其他相關資訊

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。

協力廠商連絡資訊免責聲明

Microsoft 提供第三方連絡資訊,協助您尋找有關本主題的其他資訊。 此連絡資訊如有變更,恕不另行通知。 Microsoft 不保證第三方聯繫人信息的正確性。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群