本文分享自華為雲社群《透過HPA+CronHPA組合應對業務複雜彈性伸縮場景》,作者:雲容器大未來。
背景
在k8s叢集中,容器水平自動伸縮(HPA),可以根據容器資源的使用量,在設定好的副本範圍內,自動擴縮容工作負載副本數(replicas)。HPA是基於指標閾值進行伸縮的,常見的指標有CPU和記憶體。也可以透過自定義指標,例如QPS、連線數等進行伸縮。但是存在一種場景:基於指標的伸縮存在一定的時延,這類時延主要包含:採集時延(分鐘級) 、 判斷時延(分鐘級) 和伸縮時延(分鐘級)。此類分鐘級時延,無法適應在短期內極速上漲的業務流量,可能會導致應用CPU飈高,響應時間變長。
容器定時水平自動伸縮(CronHPA)是對HPA的一種補充,對於有固定時間段高峰期的業務,可以提前將容器的例項數量擴容完畢,防止業務流量突發造成效能不足,導致業務延遲。而在業務低谷時,觸發定時回收資源。
在某些業務場景下,存在突發流量的同時,又具有明顯的波峰波谷,若同時配置CronHPA和HPA兩種策略,可能出現如下情況:在業務高峰到來前,CronHPA定時任務提前擴容業務容器副本,而此時HPA可能會檢測到資源使用率很低而觸發例項縮容,導致預擴容的策略失效。
華為雲CCE服務支援聯動設定CronHPA策略和HPA策略,透過動態設定HPA的副本範圍上下限,來調整業務容器例項數。
使用示例
日常生活中,許多業務場景在流量突發的同時具有明顯的波峰波谷,且對響應時延很敏感,例如:
1. 網路遊戲:X遊戲客戶,旗下某大型網路遊戲,在晚上或週末、節假日等高峰期間,玩家數量會急劇增加,導致遊戲伺服器的負載瞬間飆升,此時負載副本數若擴容較慢,可能導致網路卡頓,遊戲體驗顯著下降;
2. 影片直播:X影片直播APP,在某些大型活動、比賽等直播活動開始時,觀眾數量會迅速上升,導致伺服器負載急劇增加,網路時延也會隨之增加,進而導致觀看直播的使用者體驗下降;
3. 電商促銷:X電商平臺,在其促銷活動時,通常會引起使用者的熱情高漲,導致使用者訪問量大幅增加,伺服器負載也會急劇增加,若業務容器擴容不及時,很可能導致使用者體驗下降,嚴重的可能導致業務中斷;
4. 金融交易:X金融交易平臺,旗下涉及多款金融產品,均需要實時響應,網路時延對交易效率和準確性有很大影響。在高峰期,交易量會急劇增加,網路時延也會隨之增加。
以上業務場景都需要高效、穩定的網路支援,對網路時延很敏感。如果業務容器擴容不及時,會導致網路時延過高,使用者體驗下降,甚至影響業務的正常運營。
下面以影片直播服務為例,介紹如何進行彈性伸縮配置。假如每天晚上的8點半到10點有一場熱門直播,在此期間,使用者的訪問量會暴增,隨後流量緩慢下降直至到達低谷。為了節約成本,可按照如下配置,在流量高峰到來前,提前擴容業務容器例項數,在流量高峰退去後,根據業務流量,緩慢縮容:
1. 在CCE控制檯,單擊叢集名稱進入叢集。
2. 單擊左側導航欄的“工作負載”,在目標工作負載的操作列中單擊“更多 > 彈性伸縮”。
3. 策略型別選擇“HPA+CronHPA策略”,啟用HPA策略,並同時啟用CronHPA策略。此時CronHPA會定時調整HPA策略的最大和最小例項數。
4. 設定HPA策略
設定例項範圍與系統策略,如下圖, HPA會根據當前業務容器的CPU利用率,在1-10範圍內動態調節容器的例項數,當CPU利用率大於80%時自動擴容,在CPU利用率低於60%時自動縮容業務容器例項數。
5. 設定CronHPA策略
設定定時任務,如下圖所示
策略一:20:00調整HPA策略例項數範圍,從1-10變為8-10;
策略二:22:30調整HPA策略例項數範圍,從8-10變為1-10。
6. 重複以上步驟,您可以新增多條策略規則,但策略的觸發時間不能相同。
7. 設定完成後,單擊“建立”
按照上述配置完成後,CronHPA會在流量高峰到來前的20:00調整HPA策略例項數範圍,從1-10變為8-10,此時, HPA會將業務例項數至少擴容為8,為即將到來的流量高峰做準備。等到流量高峰過去後的22:30調整HPA策略例項數範圍,從8-10變為1-10,此時,HPA會根據業務流量情況,縮容業務容器例項數到合適的值,降低使用者使用成本。
CronHPA與HPA聯動解析
HPA是用來控制Pod水平伸縮的控制器,HPA週期性檢查Pod的資源使用率資料,計算滿足HPA資源所配置的目標數值所需的副本數,進而調整目標資源(如Deployment)的replicas欄位。
CronHPA支援定時調整HPA策略的最大和最小例項數,以此實現與HPA的聯動,以滿足複雜場景下的工作負載伸縮。
由於HPA與CronHPA均作用於同一個deployment物件時存在衝突問題,兩個伸縮策略相互獨立,後執行的操作會覆蓋先執行的操作,導致伸縮效果不符合預期,因此需避免這種情況發生。
為避免上述問題,我們透過增強CronHPA,支援將CronHPA規則作用於HPA策略之上,CronHPA僅調整HPA的策略配置,而業務容器的例項數僅由HPA操作,從而實現兩種彈性策略的協同工作。
總結
k8s社群提供的HPA策略支援在配置的例項數範圍內,根據業務容器的CPU、記憶體等資源使用率實現自動擴縮容。疊加定時擴容策略CronHPA,期望在業務高峰到來前,先透過CronHPA定時任務提前擴容業務容器副本數,然而此時可能會因HPA檢測到資源使用率很低而觸發例項縮容,導致預擴容的策略失效。華為雲CCE服務透過將HPA與CronHPA組合,實現指標彈性策略與定時彈性策略的有機協同,滿足了客戶業務複雜的彈性伸縮場景。
參考文件:
https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/
https://support.huaweicloud.com/usermanual-cce/cce_10_0415.html
點選關注,第一時間瞭解華為雲新鮮技術~