本文分享自華爲雲社區《通過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