共用方式為


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

    Azure 入口網站 Azure Kubernetes Service (AKS) 叢集中 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 意見反應社群提交產品意見反應。