共用方式為


Azure Kubernetes Service 中的叢集自動調整概觀

為了符合 Azure Kubernetes Service (AKS) 中的應用程式需求,您可能需要調整執行工作負載的節點數目。 叢集自動調整程式元件可以監看叢集中由於資源限制而無法調度的 Pod。 當叢集自動調整程式偵測到未排程的 Pod 時,它會相應增加節點集區中的節點數目,以符合應用程式需求。 它也會定期檢查沒有排程任何 Pod 的節點,並視需要相應減少節點數目。

本文可協助您了解叢集自動調整程式在 AKS 中的運作方式。 這也提供為 AKS 工作負載設定叢集自動調整程式時的指導、最佳做法和考量。 如果您想要為 AKS 工作負載啟用、停用或更新叢集自動調整程式,請參閱在 AKS 中使用叢集自動調整程式

關於叢集自動調整器

叢集通常需要一種自動調整的方法,才能適應不斷變化的應用程式需求,例如工作日和晚上之間或在週末。 AKS 叢集可以透過下列方式進行調整:

  • 叢集自動調整程式會定期檢查由於資源限制而無法在節點上進行排程的 Pod。 叢集接著會自動增加節點數目。 當您使用叢集自動調整程式時,會停用手動調整。 如需詳細資訊,請參閱擴大如何運作?
  • 水平 Pod 自動調整程式會在 Kubernetes 叢集中使用計量伺服器,以監視 Pod 的資源需求。 如果應用程式需要更多資源,Pod 數目會自動增加以符合需求。
  • 垂直 Pod 自動調整程式會根據過去的使用量,自動設定每個工作負載容器的資源要求和限制,以確保 Pod 排程到具有所需 CPU 和記憶體資源的節點。

螢幕擷取畫面顯示叢集自動調整程式和水平 Pod 自動調整程式通常共同運作的方式,以支援所需的應用程式需求。

對於節點,以及對於適用於 Pod 的垂直 Pod 自動調整程式或水平 Pod 自動調整程式,啟用叢集自動調整程式是常見的做法。 當您啟用叢集自動調整程式時,它會在節點集區大小低於節點計數下限時套用指定的調整規則,最高為節點數目上限。 叢集自動調整程式會等候生效,直到節點集區中需要新的節點,或直到節點可能從目前的節點集區安全地刪除為止。 如需詳細資訊,請參閱縮小如何運作?

最佳做法和考量

  • 使用叢集自動調整程式實作可用性區域時,建議針對每個區域使用單一節點集區。 您可以將 --balance-similar-node-groups 參數設定為 True,在擴大作業期間為工作負載維持跨區域的節點平衡分佈。 如果未實作此方法,縮小作業可能會中斷跨區域的節點平衡。
  • 針對節點超過 400 個的叢集,我們建議使用 Azure CNI 或 Azure CNI 重疊。
  • 若要在現成和固定節點集區上同時執行工作負載,請考慮使用優先順序展開器。 此方法可讓您根據節點集區的優先順序來排程 Pod。
  • 在 Pod 上指派 CPU/記憶體要求時請小心。 叢集自動調整程式會根據擱置的 Pod 擴大,而不是根據節點上的 CPU/記憶體壓力擴大。
  • 針對同時裝載長時間執行的工作負載,例如 Web 應用程式和短/高載作業工作負載的叢集,建議將它們分成具有同質規則/擴充器的不同節點集區,或使用 PodDisruptionBudget 來協助防止不必要的節點清空或相應減少作業。 指定批註 cluster-autoscaler.kubernetes.io/safe-to-evict:Pod 規格上的 「false」 也會防止 Pod 被收回。 請小心使用此批注,因為它可能會導致叢集自動調整程式在清空包含此批注的執行中 Pod 的節點時遇到問題。
  • 在已啟用自動調整程式功能的節點集區中,藉由移除工作負載來相應減少節點,而不是手動減少節點數目。 如果節點集區已達到最大容量,或是節點上正在執行作用中工作負載,可能會導致叢集自動調整程式發生非預期的行為,而可能造成問題。
  • 如果 Pod 的 PriorityClass 值低於 -10,節點就不會擴大。 優先順序 -10 會保留給超額佈建 Pod。 如需詳細資訊,請參閱搭配 Pod 優先順序和先佔使用叢集自動調整程式
  • 請勿將其他節點自動調整機制 (例如虛擬機器擴展集自動調整程式) 與叢集自動調整程式合併。
  • 如果 Pod 無法移動,叢集自動調整程式可能無法縮小,如下列情況所示
    • 直接建立的 Pod 不受控制器物件支援,例如部署或複本集。
    • Pod 中斷預算 (PDB) 限制太多,而且不允許低於特定閾值的 Pod 數目。
    • 如果排程在不同節點上,則 Pod 會使用節點選取器或無法接受的反親和性。 如需詳細資訊,請參閱哪些類型的 Pod 可以防止叢集自動調整程式移除節點?

重要

不要變更自動調整節點集區內的個別節點,。 相同節點群組中的全部節點都應該具有統一的容量、標籤、污點和在其上執行的系統 Pod。

  • 叢集自動調整程式不負責在叢集節點集區中強制執行「最大節點計數」,而不論 Pod 排程考量為何。 如果任何非叢集自動調整程式執行者將節點集區計數設定為超出叢集自動調整程式設定上限的數目,則叢集自動調整程式不會自動移除節點。 叢集自動調整程式相應減少行為仍會限定為只移除沒有排程 Pod 的節點。 叢集自動調整程式最大節點計數位態的唯一用途,是強制執行相應增加作業的上限。 它不會影響相應減少考量。

叢集自動調整程式設定檔

叢集自動調整程式設定檔是一組參數,可控制叢集自動調整程式的行為。 您可以在建立叢集或更新現有的叢集時設定叢集自動調整程式設定檔。

最佳化叢集自動調整程式設定檔

您應該根據特定的工作負載案例微調叢集自動調整程式設定檔設定,同時考量效能與成本之間的取捨。 本節提供示範這些取捨的範例。

務必注意,叢集自動調整程式設定檔設定是全叢集,並套用於全部已啟用自動調整的節點集區。 任何在一個節點集區中發生的調整動作都可能會影響其他節點集區的自動調整行為,這可能會導致非預期的結果。 務必在全部相關節點集區套用一致且同步處理的設定檔設定,以確保您達到所需的結果。

範例 1:最佳化效能

對於處理大量和高載工作負載且主要著重於效能的叢集,建議您增加 scan-interval 和減少 scale-down-utilization-threshold。 這些設定有助於將多個調整作業批次處理成單一呼叫,將調整時間和計算讀取/寫入配額的使用率最佳化。 這也有助於降低對於使用量過低的節點快速縮小作業的風險,以提高 Pod 排程效率。 也增加 ok-total-unready-countmax-total-unready-percentage

對於具有 DaemonSet Pod 的叢集,我們建議將 ignore-daemonsets-utilization 設定為 true,這實際上會忽略 DaemonSet Pod 的節點使用率,並將不必要的縮小作業降到最低。 請參閱 突發性工作負載設定檔

範例 2:最佳化成本

如果您需要成本最佳化的設定檔,建議您設定下列參數設定:

  • 縮減 scale-down-unneeded-time,這是節點在可供縮小之前應該不需要的時間量。
  • 縮減 scale-down-delay-after-add,這是在考量節點縮小之前等待節點的時間量。
  • 增加 scale-down-utilization-threshold,這是移除節點的使用率閾值。
  • 增加 max-empty-bulk-delete,這是單一呼叫中可以刪除的節點數目上限。
  • skip-nodes-with-local-storage 設為 False。
  • 增加 ok-total-unready-countmax-total-unready-percentage

常見問題和風險降低建議

透過 CLI 或入口網站檢視調整失敗和相應增加未觸發的事件。

未觸發擴大作業

常見的原因 風險降低建議
PersistentVolume 節點親和性衝突,叢集自動調整程式搭配多個可用性區域或 Pod 或永續性磁碟區的區域與節點區域不同時,就可能發生衝突。 每個可用性區域使用一個節點集區,並啟用 --balance-similar-node-groups。 您也可以在 Pod 規格中將 volumeBindingMode 欄位設定為 WaitForFirstConsumer,以防止磁碟區繫結至節點,直到使用磁碟區建立 Pod 為止。
污點和容忍/點親和性衝突 評估指派給節點的污點,並檢閱 Pod 中定義的容忍。 如有必要,請調整污點和容忍,以確保您的 Pod 可以在節點上有效率地排程。

擴大作業失敗

常見的原因 風險降低建議
子網路中的 IP 位址耗盡 在同一個虛擬網路中新增另一個子網路,並將另一個節點集區新增至新的子網路。
核心配額耗盡 已核准的核心配額已用盡。 要求增加配額。 叢集自動調整程式遇到多次失敗的擴大嘗試時,會在特定節點群組內進入指數輪詢狀態
節點集區的大小上限 增加節點集區上的節點上限,或建立新的節點集區。
要求/呼叫超過速率限制 請參閱 429 太多要求錯誤

縮小作業失敗

常見的原因 風險降低建議
Pod 防止節點清空/無法收回 Pod • 檢視可避免縮小的 Pod 類型
• 針對使用本地儲存體的 Pod,例如 hostPath 和 emptyDir,請將叢集自動調整程式設定檔旗標 skip-nodes-with-local-storage 設定為 false
• 在 Pod 規格中,將 cluster-autoscaler.kubernetes.io/safe-to-evict 註釋設定為 true
• 檢查您的 PDB,因為這可能受到限制。
節點集區的大小下限 減少節點集區的大小下限。
要求/呼叫超過速率限制 請參閱 429 太多要求錯誤
寫入作業已鎖定 請勿對完全受控的 AKS 資源群組進行任何變更 (請參閱 AKS 支援原則)。 移除或重設您先前套用於資源群組的任何資源鎖定

其他問題

常見的原因 風險降低建議
PriorityConfigMapNotMatchedGroup 請確定您將需要自動調整的全部節點群組新增至展開器設定檔

輪詢中的節點集區

輪詢中的節點集區是在 0.6.2 版中引進的項目,並導致叢集自動調整程式在失敗後從調整節點集區輪詢。

視調整作業發生失敗的時間而定,可能需要最多 30 分鐘的時間才能進行另一次嘗試。 您可以停用再重新啟用自動調整,以重設節點集區的輪詢狀態。