當叢集的容量規劃無法滿足應用Pod調度時,您可以使用ACK提供的節點伸縮功能,自動擴縮節點資源以進行調度容量的補充。ACK目前提供節點自動調整與節點即時彈性兩種彈性方案,後者相較於前者有著更快的彈性速度、更高的交付效率和更低的使用門檻。
閱讀前提示
為了讓您更好地瞭解ACK提供的節點伸縮方案,並結合您的業務訴求進行方案選型,建議您在啟用節點伸縮能力前閱讀本篇概述。
閱讀本文前,推薦您參見Kubernetes官方文檔瞭解手動伸縮、自動調整、水平伸縮、垂直伸縮等伸縮概念。
工作原理
在Kubernetes中,節點伸縮的工作原理與傳統意義上基於使用率閾值的模型有所差別。這也是從傳統IDC或其他編排系統遷移到Kubernetes叢集後往往需要解決的問題。
傳統的Auto Scaling模型基於使用率實現。例如,一個叢集中有3個節點,當叢集中的節點CPU、記憶體使用量率超過特定的閾值時,系統將擴容新的節點。但這種模式存在以下問題。
基於以上問題,ACK通過節點伸縮(資源層)和工作負載伸縮(調度層)兩層彈性模型來解決。節點伸縮基於資源的使用率來觸發應用副本的變化,也就是調度單元的變化。以下介紹技術細節。
彈性方案:節點自動調整與節點即時彈性
節點伸縮指資源層彈性,即當叢集的容量規劃無法滿足應用Pod調度時,自動擴縮節點資源,以進行調度容量的補充。ACK在節點伸縮層面提供兩種彈性方案。
方案介紹
本文中提供的彈性測量資料為理論值,均基於彈性最佳化的自訂鏡像實現,實際資料以您的實際業務環境為準。關於自訂鏡像的更多資訊,請參見彈性最佳化之自訂鏡像。
節點即時彈性需要白名單許可權開啟。如需使用,請提交工單並描述您的業務情境進行申請。
方案 | 實現組件 | 說明 |
方案一:節點自動調整 | cluster-autoscaler組件 | 以輪詢的方式,周期性地維護和檢查叢集狀態,以發現滿足擴縮容條件的情況,從而自動擴縮容叢集節點。 |
方案二:節點即時彈性 | 節點即時彈性組件 | 一個基於事件驅動的節點伸縮控制器。在大規模叢集(例如彈性節點池中節點數大於100,或彈性節點池數大於20)和連續多次彈性擴容等情境下,能夠保證更好的彈性資源交付。伸縮速度(即從Pod首次調度失敗到Pod調度成功的耗時)穩定在45s、成功率可達99%、資源片段度降低約30%。同時,在擴縮容自訂策略上有更好的擴充性。 |
方案對比
如果您的叢集節點池已開啟自動Auto Scaling且節點池的伸縮模式為非極速模式,節點即時彈性可相容原彈性節點池的語義與行為,並支援所有類型的應用無感開啟與使用。所以,本小節重點闡述節點即時彈性相較於節點自動調整的最佳化特性。
最佳化特性 | 節點自動調整 | 節點即時彈性 |
伸縮速度與效率 | 單次伸縮時,標準模式的伸縮速度約為60s,極速模式為50s。 | 通過事件驅動的機制來觸發擴縮行為,結合阿里雲的ContainerOS能力進行彈性加速,伸縮速度大約為45±10s。 |
當達到1分鐘的伸縮量級時,伸縮速度會遇到瓶頸,並且在不同規模(多節點池)、不同情境(連續伸縮)下,彈性速度也會有比較明顯的抖動。例如,當節點池數量超過100時,伸縮速度將衰減為100~150s。 | 不會隨著節點池的規模與Pod的規模的增大而產生明顯的衰減,更適用於對彈性交付速度高的情境。 | |
使用輪詢式模型,且受制於對叢集狀態維護的依賴,彈性靈敏度最低為5s。 | 基於事件驅動,使用響應式模型,彈性靈敏度為1~3s。 | |
資源交付確定性 | 雲上資源的庫存變化較為頻繁。由於執行個體規格組合問題、庫存不足等原因,節點自動調整的彈性成功率在97%左右。 | 支援庫存自動選擇策略,可根據您配置的篩選條件與順序,從阿里雲上千個執行個體規格組合中過濾無庫存的執行個體規格,並選擇最為合適的規格進行擴容,或在庫存不足時補償合格規格。這大大降低了營運人員選擇規格的壓力,同時提升了交付的成功率,可達99%。 |
支援按照節點池配置的規格擴容相同類型的規格。在類型不同時,會選擇最小的規格進行擴容。 | 支援擴容不同類型的規格。 | |
資源交付失敗時,會進行周期性重試,手段較為滯後。 | 資源交付失敗時,支援庫存預警能力,提前通知規格組合的潛在風險。 | |
使用及營運門檻 | 相較於節點自動調整,節點即時彈性的使用門檻更低。主要體現在以下方面。
| |
調度策略 | 除支援節點自動調整所有的調度特性之外,節點即時彈性還支援以下特性:
| |
節點即時彈性支援根據Pod選擇最優裝箱策略(Bin Packing)和預綁定(PreBind)策略(自訂特性),可將調度片段率最佳化30%。 |
節點即時彈性的使用限制
在評估節點即時彈性方案時,您需要同時瞭解節點即時彈性的使用限制。
不支援極速模式
一個節點池單批擴容節點的個數不可超過180個
不支援以下自訂參數
禁止縮容
自訂GPU縮容閾值
自訂擴容策略
方案選型建議
參見前文的方案對比與節點即時彈性的使用限制,如果您的業務對彈性速度、資源交付確定性和使用及營運成本要求相對較低,且無法容忍節點即時彈性的使用限制時,節點自動調整可能能夠滿足您的業務需求。但如果您有以下業務訴求,我們更推薦您使用節點即時彈性。
叢集規模較大,例如彈性節點池中節點數大於100,或彈性節點池數大於20叢集規模變大時,節點自動調整的擴容效率會明顯衰減,而節點即時彈性的效能波動較小。
對資源交付速度,即彈性速度,有更高要求。單次伸縮情境下,標準模式下的節點自動調整的彈性速度為60s左右,而節點即時彈性為45s左右。
業務負載批次不可控,對同一個彈性節點池通常有連續擴容的需求。連續伸縮模式下,節點自動調整的效能會衰減且抖動較為明顯,而節點即時彈性仍然能實現45s左右的伸縮速度。
注意事項
配額與限制
在專用網路下建立的單個路由表可建立的自訂路由數限額是200條。如需更大的配額,請前往配額中心提交申請。關於其他資源的配額限制及升配詳情,請參見依賴底層雲產品配額限制。
請合理配置開啟自動調整的節點池的最大執行個體數,保證此範圍內的節點所依賴的資源和配額充足,例如合理規劃VPC網段、交換器等網路資源,以避免節點擴容失敗。配置開啟自動調整的節點池的最大執行個體數,請參見配置執行個體數量。關於ACK的網路規劃,請參見Kubernetes叢集網路規劃。
節點伸縮功能不支援訂用帳戶付費類型的節點。如需建立開啟自動調整的節點池,請勿選擇付費類型為訂用帳戶。如需為已有節點池開啟自動調整,請確保節點池內沒有訂用帳戶付費類型的節點。
依賴資源的維護
選擇綁定EIP時,請勿通過ECS控制台直接刪除節點伸縮擴容出的ECS節點,否則會導致EIP無法自動釋放。
後續閱讀
如在使用節點伸縮過程中遇到問題,您可以參見Auto ScalingFAQ進行自排查。