全部產品
Search
文件中心

Container Service for Kubernetes:雲端節點伸縮概述

更新時間:Jan 18, 2025

ACK Edge叢集可以管理各種類型的線上線下節點資源,例如不同地區的ECS節點、IDC節點、其他廠商節雲節點,以及分布在工廠、門店、車輛和船舶中的伺服器節點,當線下節點資源不足時,節點自動調整能力可以為ACK Edge叢集自動擴容雲上節點,進行調度容量的補充。這種彈性的擴縮容能力能夠極大地節省資源成本。

閱讀前提示

為了讓您更好地瞭解ACK提供的節點伸縮方案,並結合您的業務訴求進行方案選型,建議您在啟用節點伸縮能力前閱讀本篇概述。

閱讀本文前,推薦您參見Kubernetes官方文檔瞭解手動伸縮、自動調整、水平伸縮、垂直伸縮等伸縮概念。

工作原理

在Kubernetes中,節點伸縮的工作原理與傳統意義上基於使用率閾值的模型有所差別。這也是從傳統IDC或其他編排系統遷移到Kubernetes叢集後往往需要解決的問題。

閾值是如何選擇與判斷的?

在一個叢集中,部分熱點節點的利用率可能較高,而其他節點的利用率可能較低。

  • 如果根據整個叢集的平均資源使用率來決定是否Auto Scaling,使得熱點節點的差異被平均,那麼會造成對熱點節點的擴縮不夠及時。

  • 如果依據最高的節點利用率來決定是否Auto Scaling,那麼會造成彈出資源的浪費,影響叢集的整體服務。

彈出執行個體後如何緩解壓力?

在Kubernetes叢集中,應用以Pod為最小單元部署在叢集的不同節點上。當一個Pod資源使用率較高時,即使該Pod所在的節點或者叢集觸發了彈性擴容,但該應用的Pod數量以及Pod對應的Limit並沒有發生變化,節點負載的壓力也無法轉移到新擴容的節點上。

如何判斷以及執行執行個體的縮容?

如果基於資源使用率的方式判斷節點是否縮容,那麼很有可能出現Request(資源請求)較大、但Usage(實際資源使用)很小的Pod被驅逐。當叢集中這種類型的Pod較多時,會佔用叢集大量的調度資源,導致部分Pod無法調度。

如何判斷節點的彈出?

節點伸縮會監聽Pod是否處於調度失敗的狀態,以判斷是否需要觸發擴容。當Pod由於調度資源不足而調度失敗時,節點伸縮會開始類比調度,計算在開啟彈性的節點池中哪個節點池可為這些Pod提供所需的節點資源,並在滿足需求時彈出相應的節點。

說明

類比調度時將一個開啟彈性的節點池作為一個的抽象節點,開啟彈性的節點池中配置的機型規格對應會成為抽象節點的CPU、記憶體或GPU的容量,且其配置的Label、Taint也會成為抽象節點的Label與Taint。類比調度器會在調度類比時,將該抽象節點納入調度參考範圍。符合調度條件時,調度模擬器會計算所需的節點數目,驅動節點池彈出節點。

如何判斷節點的縮容?

節點伸縮僅縮容開啟了彈性的節點池中的節點,無法管理靜態節點(不在開啟了彈性的節點池中的其他節點)。每個節點會單獨判斷是否進行縮容。當任意一個節點的調度利用率低於所設定的調度閾值時,就會觸發縮容判斷。此時,節點伸縮會嘗試類比驅逐節點上的負載,判斷當前節點是否可以排水。部分特殊的Pod(例如kube-system命名空間的非DaemonSet Pod、PDB控制的Pod等)則會跳過該節點而選擇其他的候選節點。當節點發生驅逐時,會先進行排水,將節點上的Pod驅逐到其他的節點,然後再下線該節點。

如何提高Auto Scaling的成功率?

Auto Scaling的成功率主要取決於以下兩個因素:

  • 調度策略是否滿足

    配置開啟彈性的節點池後,您需要先確認該節點池可以承載的Pod的調度策略範圍。如果無法直接判斷,您可以通過nodeSelector直接選擇節點池的Label,來進行預彈類比。

  • 資源配置是否充分

    當類比調度通過後,系統會選擇開啟彈性的節點池,以彈出執行個體。但開啟彈性的節點池中配置的ECS規格庫存會直接影響是否可以成功彈出執行個體。因此,推薦您配置多個可用性區域、多個不同機型組合,以提高彈出成功率。

如何提高Auto Scaling的速度?

  • 方法一:使用極速模式加速彈出速度。當開啟彈性的節點池預熱後(已完成一次擴容和一次縮容),節點池即可進入極速伸縮模式。更多資訊,請參見啟用節點自動調整

  • 方法二:使用自訂鏡像的方式,以Alibaba Cloud Linux 3作為基礎鏡像,大大提升IaaS層的資源交付速度(50%)。更多資訊,請參見彈性最佳化之自訂鏡像

節點自動調整方案

節點自動調整指資源層彈性,即當叢集的容量規劃無法滿足應用Pod調度時,自動擴縮節點資源,進行調度容量的補充。節點自動調整通過cluster-autoscaler組件,以輪詢的方式,周期性地維護和檢查叢集狀態,以發現滿足擴縮容條件的情況,從而自動擴縮容叢集節點。

伸縮速度與效率

  • 單次伸縮時,標準模式的伸縮速度約為60s,極速模式為50s。

  • 當達到1分鐘的伸縮量級時,伸縮速度會遇到瓶頸,並且在不同規模(多節點池)、不同情境(連續伸縮)下,彈性速度也會有比較明顯的抖動。例如,當節點池數量超過100時,伸縮速度將衰減為100~150s。

  • 使用輪詢式模型,且受制於對叢集狀態維護的依賴,彈性靈敏度最低為5s。

注意事項

配額與限制

  • 在專用網路下建立的單個路由表可建立的自訂路由數限額是200條。如需更大的配額,請前往配額中心提交申請。關於其他資源的配額限制及升配詳情,請參見依賴底層雲產品配額限制

  • 請合理配置開啟自動調整的節點池的最大執行個體數,保證此範圍內的節點所依賴的資源和配額充足,例如合理規劃VPC網段、交換器等網路資源,以避免節點擴容失敗。配置開啟自動調整的節點池的最大執行個體數,請參見配置執行個體數量。關於ACK的網路規劃,請參見Kubernetes叢集網路規劃

  • 節點伸縮功能不支援訂用帳戶付費類型的節點。如需建立開啟自動調整的節點池,請勿選擇付費類型為訂用帳戶。如需為已有節點池開啟自動調整,請確保節點池內沒有訂用帳戶付費類型的節點。

依賴資源的維護

選擇綁定EIP時,請勿通過ECS控制台直接刪除節點伸縮擴容出的ECS節點,否則會導致EIP無法自動釋放。

後續閱讀

如在使用節點自動調整過程中遇到問題,您可以參見節點自動調整常見問題進行自排查。