如果您的集群規模較大(例如彈性節點池中節點數大于100,或彈性節點池數大于20)、對資源交付速度有更高要求、期望靈活實現多實例規格和跨可用區自動伸縮,那么節點自動伸縮可能無法滿足您擴縮容的需求,推薦您使用節點即時彈性功能。節點即時彈性降低了開發者的使用門檻并提高了彈性效率,同時降低了運維人員維護成本。
閱讀前提示
為了讓您更好地使用節點即時彈性功能,建議您在閱讀本文檔前,已閱讀節點伸縮概述并了解以下內容:
節點即時彈性的工作原理
節點即時彈性的功能優勢
哪些業務場景下,建議您選擇節點即時彈性
使用節點即時彈性前需要了解的注意事項
前提條件
如果您的集群節點池已開啟自動彈性伸縮且節點池的伸縮模式為非極速模式,節點即時彈性可兼容原彈性節點池的語義與行為,并支持所有類型的應用無感開啟與使用。但針對伸縮模式為極速模式的節點池,節點即時彈性無法兼容。
步驟一:開啟節點即時彈性
使用節點即時彈性功能前,您需要在節點池頁面開啟并配置集群自動彈性伸縮,使節點具備伸縮能力。配置時,請選擇節點伸縮方案為即時彈性。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點池頁面,單擊節點伸縮后方的去配置。
首次使用集群自動彈性伸縮功能時,按照頁面提示,開通ESS服務并完成授權(如已開通并授權,請跳過)。
ACK托管集群:完成AliyunCSManagedAutoScalerRole角色授權。
ACK專有集群:完成KubernetesWorkerRole角色授權和AliyunCSManagedAutoScalerRolePolicy系統策略的授權,入口如下所示。
在節點伸縮配置頁面,選擇節點伸縮方案為即時彈性,配置伸縮配置項,然后單擊確定。
實施彈性伸縮時,彈性組件會基于調度情況自動觸發擴容。您只需配置縮容條件。
配置項
說明
縮容閾值
啟用節點即時彈性的節點池中,單個節點的請求資源(Request)與單個節點資源容量的比值。
僅當該比值低于配置的閾值時,即節點的CPU和內存資源利用率均低于縮容閾值時,節點才有可能被縮容。
GPU 縮容閾值
GPU實例的縮容閾值。
僅當該比值低于配置的閾值時,即節點的CPU、內存和GPU資源利用率均低于GPU 縮容閾值時,GPU節點才有可能被縮容。
縮容觸發時延
從檢測到有縮容需求(達到縮容閾值)到實際執行縮容操作(縮容Pod數量)之間的時間間隔。單位:分鐘。默認值:10分鐘。
重要僅當滿足縮容閾值配置,且達到縮容觸發時延后,彈性組件才有可能執行節點縮容。
配置項
說明
Pod 終止超時時間
縮容節點時等待節點上Pod終止的最長時間。單位:秒。
Pod 最小副本數
節點縮容前每個ReplicaSet中允許的Pod最小數量。
開啟 Daemonset Pod 排水
開啟DaemonSet Pod排水后,節點縮容時會驅逐節點上的DaemonSet Pod。
跳過有 kube-system 命名空間下 Pod 所在節點
開啟后,當集群執行節點自動縮容操作時,可以忽略運行在kube-system命名空間下的Pod所在的節點,確保這些節點不受縮容的影響。
說明此功能對DaemonSet Pod和Mirror Pod不生效。
步驟二:配置開啟彈性的節點池
節點即時彈性的擴縮對象為開啟自動伸縮節點池的節點。因此,配置節點即時彈性后,您還需要配置至少一個開啟了彈性的節點池。
新建一個開啟自動彈性伸縮的節點池。具體操作,請參見創建節點池。
配置已有節點池,為其開啟自動彈性伸縮功能。具體操作,請參見編輯節點池。
說明配置已有節點池時,請確保您的節點池未配置期望節點數。您可以在節點池列表進入節點池詳情頁面,在基本頁簽查看期望節點數是否為空,也可以調用DescribeClusterNodePoolDetail - 查詢節點池配置接口,查詢
desired_size
是否為nil
。
推薦您擴大節點池實例規格的可選范圍,例如為節點池配置多個可選的實例規格、使用實例規格泛化配置,或為節點池配置多個可用區,進一步保障實例規格庫存充足,節點伸縮活動執行成功。
(可選)步驟三:結果驗證
完成如上操作后,您便可以使用節點即時彈性功能。此時,節點池將顯示已開啟自動伸縮且集群已自動安裝節點即時彈性組件。
節點池已開啟自動伸縮
在節點池頁面,節點池列表將顯示已開啟自動伸縮的節點池。
已安裝節點即時彈性組件
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件管理頁面,定位ACK GOATScaler組件,顯示已安裝。
節點即時彈性關鍵事件介紹
節點即時彈性涉及到以下關鍵事件(Event),以便查看節點即時彈性發生時內部的狀態信息。
事件名稱 | 事件對象 | 說明 |
ProvisionNode | pod | 節點即時彈性觸發節點擴容成功。 |
ProvisionNodeFailed | pod | 節點即時彈性觸發節點擴容失敗。 |
ResetPod | pod | 節點即時彈性將滿足條件的、已觸發過擴容的、但仍不可調度的Pod重新納入可觸發擴容的范圍。 |
InstanceInventoryStatusChanged | ACKNodePool | 某個可用區的某個實例規格供給狀態發生變化。格式為 詳細信息,請參見查看節點即時彈性健康度。 |
節點即時彈性標識介紹
節點即時彈性維護了以下標識。請勿手動操作,以免引發異常。
Node Label
node label | 說明 |
goatscaler.io/managed:true | 用于標識被節點即時彈性管理的節點。針對帶此標簽的節點,節點即時彈性會周期性檢查是否滿足縮容條件。 |
k8s.aliyun.com: true | 用于標識被節點即時彈性管理的節點的標識,針對帶此標簽的節點,節點即時彈性會周期性檢查是否滿足縮容條件。 |
goatscaler.io/provision-task-id:{task-id} | 用于標識節點即時彈性擴容節點的任務Task ID,以便您追蹤創建節點的觸發源。 |
Node Taint
Node Taint | 說明 |
goatscaler.io/node-terminating | 打上此污點的節點會被節點即時彈性執行縮容。 |
Pod Annotation
Pod Annotation | 說明 |
goatscaler.io/provision-task-id | 用于標識節點即時彈性為此Pod擴容后節點的Task ID。針對有此Annotation的Pod,節點即時彈性會等待節點啟動,暫不重復擴容。 |
goatscaler.io/reschedule-deadline | 用于標識節點即時彈性等待Pod未被調度到節點上的時間。超出此時間后,若Pod仍然不可調度,節點即時彈性會將Pod重新納入可觸發擴容的范圍。 |
相關操作
查看節點即時彈性健康度
節點即時彈性功能支持根據ECS實例的庫存情況來動態選擇規格和可用區。如需感知并監控實例規格庫存健康狀況,獲取節點池的實例配置優化建議,從而進一步保障節點伸縮活動執行成功,您可以查看節點池庫存健康度的ConfigMap,評估當前節點池庫存是否健康,提前對實例規格配置進行分析和調整。
詳細信息,請參見查看節點即時彈性健康度。
升級節點即時彈性組件
請及時升級節點即時彈性組件,以便享用最新的功能改進和特性優化。具體操作,請參見管理組件。