全部產品
Search
文件中心

Container Service for Kubernetes:啟用節點自動調整

更新時間:Sep 14, 2024

當叢集的容量規劃無法滿足應用Pod調度時,您可以使用節點自動調整方案實現節點的自動擴縮。節點自動調整適用於擴容規模較小(例如開啟彈性的節點池數量少於20,或對應節點池中的節點數量少於100),工作負載批次較為穩定,以單次伸縮為主等業務情境。

閱讀前提示

為了讓您更好地使用節點自動調整功能,建議您在閱讀本文檔前,已閱讀節點伸縮概述並瞭解以下內容:

對節點自動調整的工作原理與功能特性

對哪些業務情境下,節點自動調整可以滿足您的業務訴求

對使用節點自動調整前需要瞭解的注意事項

前提條件

步驟一:開啟節點自動調整

使用節點自動調整功能前,您需要在節點池頁面開啟並配置叢集自動Auto Scaling,使節點具備伸縮能力。配置時,請選擇節點伸縮方案自動調整

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 節點池頁面,單擊節點伸縮後方的去配置

    1.jpg

  4. 首次使用叢集自動Auto Scaling功能時,按照頁面提示,開通ESS服務並完成授權(如已開通並授權,請跳過)。

  5. 節點伸縮配置頁面,選擇節點伸縮方案自動調整,配置伸縮的配置項,然後單擊確定

    配置

    說明

    節點池擴容順序策略

    • 隨機策略:存在多個可擴容節點池時,從中任意選擇一個節點池進行擴容。

    • 預設策略:存在多個可擴容節點池時,從中選擇一個資源浪費最少的節點池進行擴容。

    • 優先順序策略:存在多個可擴容節點池時,會按照您自訂的順序選擇優先順序高的節點池進行擴容。

      需在建立開啟了彈性的節點池後再操作。

    彈性靈敏度

    用於調整系統判斷伸縮的間隔時間。預設值為60s。

    實施Auto Scaling時,彈性組件會基於調度情況自動觸發擴容。您只需配置縮容條件。

    重要
    • ECS節點:僅當同時滿足縮容閾值縮容觸發時延靜默時間三個條件時,彈性組件才有可能執行節點縮容。

    • GPU節點:僅當同時滿足GPU 縮容閾值縮容觸發時延靜默時間三個條件時,彈性組件才有可能執行GPU節點縮容。

    允許縮容

    是否允許進行節點縮容。關閉時,縮容相關配置不生效。請謹慎設定。

    縮容閾值

    啟用節點自動調整的節點池中,單個節點的請求資源(Request)與單個節點資源容量的比值。

    僅當該比值低於配置的閾值時,即節點的CPU和記憶體資源使用率均低於縮容閾值時,節點才有可能被縮容。

    GPU 縮容閾值

    GPU執行個體的縮容閾值。

    僅當該比值低於配置的閾值時,即節點的CPU、記憶體和GPU資源使用率均低於GPU 縮容閾值時,GPU節點才有可能被縮容。

    縮容觸發時延

    從檢測到有縮容需求(達到縮容閾值)到實際執行縮容操作(縮容Pod數量)之間的時間間隔。單位:分鐘。預設值:10分鐘。

    重要

    僅當滿足縮容閾值配置,且達到縮容觸發時延後,彈性組件才有可能執行節點縮容。

    靜默時間

    距離最近一次擴容完成後,彈性組件不執行縮容的時間間隔。

    在靜默時間內,彈性組件不會縮容節點,但仍會判斷節點是否可以縮容;超過靜默時間後,如果節點滿足縮容閾值和縮容觸發時延兩個條件,彈性組件則會正常執行縮容。例如,當靜默時間為10分鐘,縮容觸發時延為5分鐘時,彈性組件在最近一次擴容後的10分鐘內不會縮容節點,但會在靜默的10分鐘內判斷節點是否符合縮容條件。等待靜默時間結束,節點達到縮容閾值且時間超過縮容觸發時延規定的5分鐘時,彈性組件會繼續執行縮容。

    查看進階配置的配置項說明

    配置項

    說明

    Pod 終止逾時時間

    縮容節點時等待節點上Pod終止的最長時間。單位:秒。

    Pod 最小副本數

    節點縮容前每個ReplicaSet中允許的Pod最小數量。

    開啟 Daemonset Pod 排水

    開啟DaemonSet Pod排水後,節點縮容時會驅逐節點上的DaemonSet Pod。

    跳過有 kube-system 命名空間下 Pod 所在節點

    開啟後,當叢集執行節點自動縮容操作時,可以忽略運行在kube-system命名空間下的Pod所在的節點,確保這些節點不受縮容的影響。

    說明

    此功能對DaemonSet Pod和Mirror Pod不生效。

步驟二:配置開啟彈性的節點池

節點自動調整的擴縮對象為開啟自動調整節點池的節點。因此,配置節點自動調整後,您還需要配置至少一個開啟了彈性的節點池。您可以建立一個開啟自動Auto Scaling的節點池,也可以配置已有節點池,為其開啟自動Auto Scaling功能。

下表介紹主要配置項,其中“節點池”均指“開啟彈性的節點池”。更多資訊,請參見建立節點池編輯節點池

配置

說明

自動調整

是否開啟自動調整。自動調整可根據業務需求和策略,經濟地自動調整彈性計算資源的管理服務。更多資訊,請參見Auto Scaling概述。開啟前,請先配置節點池的自動Auto Scaling能力,操作步驟可參考步驟一:開啟節點自動調整

執行個體相關的配置項

根據執行個體規格或屬性選擇Worker節點池使用的ECS執行個體,可通過vCPU、記憶體、規格類型系列、架構等屬性進行篩選。

節點池擴容時,將從選中的執行個體規格中擴容。具體擴容到的執行個體規格取決於節點池擴縮容策略。選擇的執行個體規格越多,節點池成功彈出節點的機率越大。

節點池內執行個體的規格。單一規格的ECS執行個體庫存容量波動較大,建議配置多種同規格的執行個體類型,以提高節點伸縮成功率。

如果您選擇的執行個體均為GPU伺服器,您可以按需開啟共用 GPU 調度。更多資訊,請參見共用GPU調度概述

執行個體數量

節點池所包含的執行個體數量(不包含您已有的執行個體)。

預設情況下,執行個體數最少為0。超過0時,叢集會預設向節點池中添加執行個體,並將執行個體加入到節點池對應的ACK叢集中。

作業系統

在開啟自動調整時,支援選擇Alibaba Cloud Linux、Windows鏡像、Windows Core鏡像。

當所選鏡像是Windows鏡像或Windows Core鏡像時,系統將自動設定汙點(Taints){ effect: 'NoSchedule', key: 'os', value: 'windows' }

節點標籤

在叢集中添加節點標籤(Label)後,會自動添加到Auto Scaling擴容出的節點上。

重要

當節點標籤和汙點配置映射到節點池Tag後,自動調整才可識別,且節點池Tag存在數量上限。因此,請將開啟自動調整的節點池配置的ECS標籤、汙點和節點標籤的總數控制在12個之內。

擴縮容策略

  • 優先順序策略:根據以上配置的虛擬交換器的優先順序進行擴縮容(選擇的虛擬交換器的順序,由上到下優先順序遞減)。當優先順序較高的虛擬交換器所在可用性區域無法建立ECS執行個體時,自動使用下一優先順序的虛擬交換器建立ECS執行個體。

  • 成本最佳化策略:按vCPU單價從低到高嘗試建立。當伸縮配置已設定搶佔式計費方式的多執行個體規格時,優先建立對應搶佔式計費執行個體。當搶佔式計費執行個體規格由於庫存等原因無法建立時,自動嘗試以隨用隨付的方式建立。

    付費類型搶佔式執行個體時,除允許搶佔式執行個體補償外,您還可以配置以下參數:

    • 按量執行個體所佔比例%:節點池執行個體中按量執行個體應占的比例,取值範圍為[0,100]。

    • 允許按量執行個體補償:開啟後,如果因價格或庫存等原因無法建立足夠的搶佔式執行個體,伸縮組將自動嘗試建立按量執行個體,以滿足ECS執行個體數量要求。

  • 均衡分布策略:只有設定多個專用網路交換器時,均衡分布策略才會生效。在伸縮組指定的多可用性區域(即指定多個專用網路交換器)之間均勻分配ECS執行個體。如果由於庫存不足等原因造成可用性區域之間不平衡,您可以再次進行均衡操作,以平衡資源的可用性區域分布。

    重要

    節點池建立完成後,擴縮容策略不支援編輯。

    付費類型搶佔式執行個體時,您可以設定是否開啟允許搶佔式執行個體補償。開啟後,當收到搶佔式執行個體將被回收的系統訊息時(即搶佔式執行個體被回收前5分鐘左右),開啟彈性的節點池將嘗試建立新的執行個體,替換掉將被回收的搶佔式執行個體。

伸縮模式

支援標準模式極速模式

  • 標準模式:根據資源申請值的使用量,通過建立、釋放ECS執行個體的方式進行伸縮。

  • 極速模式:通過建立、停機、啟動的方式進行伸縮,提高再次伸縮的速度。

    重要
    • 極速彈出模式在節點進入停機回收狀態時,節點將停機,並處在NotReady狀態。當再次伸縮彈出時,節點狀態會變為Ready。極速模式執行個體停機再次啟動時,如果啟動失敗,系統不會自動釋放執行個體,請按需手動釋放。

    • 極速彈出模式的節點處在停機回收狀態時,只收取磁碟的費用,不收取計算費用(不包含擁有本地碟的機型系列,例如ecs.d1ne.2xlarge),在庫存充裕的前提下可以快速啟動。

汙點 (Taints)

添加汙點後,叢集將不會將Pod調度到該節點上。

建立開啟了彈性的節點池後,您可以參照步驟一:開啟節點自動調整選擇是否配置優先順序策略。優先順序取值範圍為[1,100],必須為正整數。

步驟三:(可選)結果驗證

完成如上操作後,您便可以使用節點自動調整功能。此時,節點池將顯示已開始自動調整且叢集已自動安裝cluster-autoscaler組件

節點池已開啟自動調整

節點池頁面,節點池列表中將展示已開啟自動調整的節點池。

已安裝cluster-autoscaler組件

  1. 在叢集管理頁左側導覽列,選擇工作負載 > 無狀態

  2. 選擇kube-system命名空間,顯示cluster-autoscaler組件

常見問題

為什麼節點自動調整組件無法彈出節點?

請檢查是否存在如下幾種情境:

  • 配置開啟了彈性的節點池中的執行個體類型無法滿足Pod的請求資源(Request)。ECS執行個體規格給出的資源大小是執行個體的售賣規格,實際運行時ACK需要佔用一定的節點資源來為kube組件和system進程預留資源,從而保證OS核心和系統服務、Kubernetes守護進程的正常運行。這會導致節點的資源總數Capacity與可分配的資源數Allocatable之間存在差異。詳細資料,請參見節點資源預留策略

    此外,預設節點會安裝系統組件,Pod的申請資源要小於執行個體的規格。

  • 對可用性區域有約束的Pod,無法觸發配置了多可用性區域的節點池擴容。

  • 是否完整按照步驟執行了授權操作。授權操作是叢集維度,需要每個叢集操作一次。關於授權,請參見步驟一:開啟節點自動調整

  • 開啟自動調整的節點池中出現如下異常情況。

    • 執行個體未加入到叢集且逾時。

    • 節點未ready且逾時。

    為保證後續擴縮準確性,彈性組件以阻尼方式處理異常情況,在處理完異常情況節點前,不進行擴縮容。

為什麼節點自動調整組件無法縮容節點?

請檢查是否存在如下幾種情境:

  • 節點Pod的請求資源(Request)閾值高於設定的縮容閾值。

  • 節點上運行了kube-system命名空間的Pod。

  • 節點上的Pod包含強制的調度策略,導致其他節點無法運行此Pod。

  • 節點上的Pod擁有PodDisruptionBudget,且達到了PodDisruptionBudget的最小值。

您可以在開源社區得到更多關於節點自動調整組件的常見問題與解答。

Auto Scaling時,如何在多個開啟彈性的節點池之間選擇?

在Pod無法調度時,會觸發Auto Scaling組件的類比調度邏輯,根據節點池配置的標籤、汙點以及執行個體規格等資訊進行判斷。當配置的節點池可以類比調度Pod的時候,會選擇進行節點彈出。當有多個節點池同時滿足類比調度條件的時候,預設採用最少浪費(least-waste)原則,即根據類比彈出後節點上剩餘的資源最小進行抉擇。

什麼類型的Pod可以阻止CA移除節點?

節點自動調整使用了哪些調度策略來判斷不可調度Pod能否調度到開啟自動調整節點池?

使用的調度策略如下所示。

  • PodFitsResources

  • GeneralPredicates

  • PodToleratesNodeTaints

  • MaxGCEPDVolumeCount

  • NoDiskConflict

  • CheckNodeCondition

  • CheckNodeDiskPressure

  • CheckNodeMemoryPressure

  • CheckNodePIDPressure

  • CheckVolumeBinding

  • MaxAzureDiskVolumeCount

  • MaxEBSVolumeCount

  • ready

  • MatchInterPodAffinity

  • NoVolumeZoneConflict

如何為叢集WorkerRole添加AliyunCSManagedAutoScalerRolePolicy許可權?

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 單擊叢集資源頁簽,然後單擊Worker RAM 角色後面的連結。

  3. RAM控制台,單擊精確授權

  4. 精確授權面板,預設選擇系統策略,輸入系統策略名稱稱為AliyunCSManagedAutoScalerRolePolicy,然後單擊確定

  5. 精確授權面板,單擊關閉。重新整理頁面,可以看到新增的許可權。

  6. 手動重啟kube-system命名空間下的Deployment cluster-autoscaler,以便許可權立即生效。