如果您業務的資源需求不易預測或有周期性變化(例如Web應用、遊戲服務、線上教育等),推薦您在叢集中啟用Auto Scaling。根據負載需求情況,工作負載伸縮支援自動調整應用Pod的副本數量或資源配置,計算資源伸縮支援自動調整節點資源,從而平穩應對流量峰值並降低成本。
使用前說明
本文面向叢集營運人員、開發人員等介紹ACK叢集的Auto Scaling方案(工作負載伸縮和節點伸縮)。建議您已瞭解社區工作負載伸縮方案(例如HPA、VPA等)和節點伸縮方案(例如Cluster Autoscaling)的相關內容等。
如果您的叢集為大規模叢集(通常為超過500個節點或者10,000個Pod的叢集),請參見規劃叢集資源彈性速率瞭解相關使用建議,以確保叢集和控制面的穩定性。
工作負載伸縮和計算資源伸縮
ACK的Auto Scaling提供以下兩種維度方案。
工作負載伸縮:調度層彈性方案,作用於Pod,通過增減Pod副本數量或調整Pod資源配置來適應負載變化。例如,HPA支援根據工作負載流量自動調整工作負載Pod的副本數,調整的副本數會改變當前負載佔用的調度容量,從而實現調度層的伸縮。
計算資源伸縮:資源層彈性方案,包括節點伸縮方案和虛擬節點方案,支援根據Pod的調度情況和資源使用方式動態地添加或移除計算資源。
推薦您將兩種方案搭配使用,既能通過調整工作負載Pod副本數來提高資源使用率,又能在叢集維度通過調整計算資源容量來保證Pod總能獲得足夠的計算資源。
工作負載伸縮方案
Kubernetes支援使用kubectl scale
命令手動調整工作負載Pod的數量,但需要營運人員自行判斷,僅適用於臨時性的副本數管理。您可以參見下表選擇方案,享受ACK工作負載伸縮方案在成本控制、穩定性保障和資源容量靈活管理等維度提供的支援。
方案 | 介紹 | 擴縮依據的指標 | 使用情境 | 相關文檔 |
HPA | 在業務負載上升時快速擴容Pod副本來緩解壓力,在業務負載變小時適當縮容以節省資源,是最常執行的 App彈性方案。 |
| 服務波動較大、服務數量多且需要頻繁擴縮容的線上業務情境,例如電商服務、線上教育、金融服務等。 | |
CronHPA | 類似Crontab的策略,定時對Pod進行擴縮容,可配置時區、執行的日期、跳過執行的日期(例如節假日),支援和HPA協同使用。 | 定時擴縮容 | 業務流量有明顯高峰時段、應用程式需要在特定時間執行任務等情境。 | |
VPA | 監控Pod的資源消耗模式,靈活推薦CPU和記憶體資源分派的配置,並在適當的情況下自動進行調整,而不調整Pod的副本數量。 | 推薦並自動調整Pod中容器的CPU及記憶體的Request和Limit | 需要穩定資源配置的有狀態應用的擴容、大型單體應用等情境,通常是在Pod出現異常恢複時生效。 | |
KEDA | 支援豐富的事件來源,為工作負載提供事件驅動的自動調整能力。 | 事件數目量,例如隊列長度 | 需要即時彈性的情境,尤其是基於事件來源的離線作業情境,例如音視頻離線轉碼、事件驅動作業、流式資料處理等。 | |
AHPA | 根據業務歷史指標,自動、主動識別彈性周期並對容量進行預測,提前進行彈性規劃,解決彈性滯後的問題。 |
| 業務流量有明顯周期性的情境,例如直播、線上教育、遊戲服務等。 |
此外,您也可以使用UnitedDeployment來定義工作負載。UnitedDeployment通過彈性單元Subset來靈活、便捷地管理多個同質的工作負載,動態分配在各Subset上的工作負載副本數量。您可以將UnitedDeployment和上述工作負載伸縮方案搭配使用,實現工作負載的靈活擴縮容與調度,例如多種計算資源混合使用情境。更多資訊,請參見基於UnitedDeployment實現工作負載的伸縮。
計算資源伸縮方案
在業務量波動大、需要快速響應的情境下,叢集需要一種能夠根據工作負載變化情況自動調整計算資源的方案,以在提高系統彈性的同時降低營運成本。計算伸縮方案提供的組件會監聽Pod是否處於調度失敗的狀態,以判斷是否需要新增ECS節點或ECI Pod資源。
您可以參見節點伸縮瞭解節點伸縮的功能原理。
下表提供的資源交付資料僅為理論值(參考值),實際資料以您的作業環境為準。
方案 | 介紹 | 使用情境 | 資源交付速度 | 相關文檔 |
節點自動調整 | 當叢集的容量規劃無法滿足應用Pod調度時,自動調整節點的數量。 | 全情境通用,面向線上業務、深度學習等情境,適用於擴容規模較小(例如開啟彈性的節點池數量少於20,或對應節點池中的節點數量少於100),工作負載批次較為穩定,以單次伸縮為主等業務情境。 | 以100節點為一個交付批次為例: | |
節點即時彈性 | 在節點自動調整的基礎上,節點即時彈性在伸縮速度和效率、資源交付確定性等方面更具優勢,還支援根據ECS執行個體的庫存查看健康度。 | 全情境通用, 叢集規模較大(例如彈性節點池中節點數大於100,或彈性節點池數大於20)、對資源交付速度有更高要求、期望靈活實現多執行個體規格和跨可用性區域自動調整、對進階調度策略(例如TopologySpread Constraints)有需求。 | 以100節點為一個交付批次為例:
| |
虛擬節點 | 無需節點營運和容量規劃,支援單叢集超大Pod容量(最多可支援50000個Pod),突發業務流量情境下能夠擴容工作負載Pod,實現每分鐘10000 Pod彈效能力。 | 全情境通用,尤其適用於任務和定時任務、資料計算、AI、突發業務等情境。 | 以1000個Pod作為一個交付批次為例:
|
計費說明
Auto Scaling功能本身不收費,但Auto Scaling組件會佔用Pod資源(節點伸縮的情況下需要至少保留一個節點)。節點伸縮方案下,擴容節點資源產生的計費會正常收取。更多資訊,請參見計費概述。
常見問題
如您在使用Auto Scaling功能時遇到問題,可參見Auto ScalingFAQ進行排查。
相關文檔
在一些預先安裝或者高效能情境下,您可能期望使用彈性效能最佳化的作業系統鏡像,提高複雜情境下Auto Scaling的便捷性,請參見彈性最佳化之自訂鏡像。
如需收集Auto Scaling的日誌,請參見收集系統外掛程式日誌。
推薦您在配置工作負載時結合工作負載推薦配置中的使用建議。
在Serverless容器情境下,Knative支援基於請求數或並發數擴縮容,當請求為零時可將Pod副本數量自動縮容至零,更多資訊,請參見Knative、基於流量請求數實現服務自動擴縮容。