通過HPA+CronHPA組合應對業務複雜彈性伸縮場景

本文分享自華爲雲社區《通過HPA+CronHPA組合應對業務複雜彈性伸縮場景》,作者:雲容器大未來。

背景

在k8s集羣中,容器水平自動伸縮(HPA),可以根據容器資源的使用量,在設置好的副本範圍內,自動擴縮容工作負載副本數(replicas)。HPA是基於指標閾值進行伸縮的,常見的指標有CPU和內存。也可以通過自定義指標,例如QPS、連接數等進行伸縮。但是存在一種場景:基於指標的伸縮存在一定的時延,這類時延主要包含:採集時延(分鐘級) 、 判斷時延(分鐘級) 和伸縮時延(分鐘級)。此類分鐘級時延,無法適應在短期內極速上漲的業務流量,可能會導致應用CPU飈高,響應時間變長。

容器定時水平自動伸縮(CronHPA)是對HPA的一種補充,對於有固定時間段高峯期的業務,可以提前將容器的實例數量擴容完畢,防止業務流量突發造成性能不足,導致業務延遲。而在業務低谷時,觸發定時回收資源。

在某些業務場景下,存在突發流量的同時,又具有明顯的波峯波谷,若同時配置CronHPA和HPA兩種策略,可能出現如下情況:在業務高峯到來前,CronHPA定時任務提前擴容業務容器副本,而此時HPA可能會檢測到資源使用率很低而觸發實例縮容,導致預擴容的策略失效。

華爲雲CCE服務支持聯動設置CronHPA策略和HPA策略,通過動態設置HPA的副本範圍上下限,來調整業務容器實例數。

1.jpg

使用示例

日常生活中,許多業務場景在流量突發的同時具有明顯的波峯波谷,且對響應時延很敏感,例如:

1. 網絡遊戲:X遊戲客戶,旗下某大型網絡遊戲,在晚上或週末、節假日等高峯期間,玩家數量會急劇增加,導致遊戲服務器的負載瞬間飆升,此時負載副本數若擴容較慢,可能導致網絡卡頓,遊戲體驗顯著下降;

2. 視頻直播:X視頻直播APP,在某些大型活動、比賽等直播活動開始時,觀衆數量會迅速上升,導致服務器負載急劇增加,網絡時延也會隨之增加,進而導致觀看直播的用戶體驗下降;

3. 電商促銷:X電商平臺,在其促銷活動時,通常會引起用戶的熱情高漲,導致用戶訪問量大幅增加,服務器負載也會急劇增加,若業務容器擴容不及時,很可能導致用戶體驗下降,嚴重的可能導致業務中斷;

4. 金融交易:X金融交易平臺,旗下涉及多款金融產品,均需要實時響應,網絡時延對交易效率和準確性有很大影響。在高峯期,交易量會急劇增加,網絡時延也會隨之增加。

以上業務場景都需要高效、穩定的網絡支持,對網絡時延很敏感。如果業務容器擴容不及時,會導致網絡時延過高,用戶體驗下降,甚至影響業務的正常運營。

下面以視頻直播服務爲例,介紹如何進行彈性伸縮配置。假如每天晚上的8點半到10點有一場熱門直播,在此期間,用戶的訪問量會暴增,隨後流量緩慢下降直至到達低谷。爲了節約成本,可按照如下配置,在流量高峯到來前,提前擴容業務容器實例數,在流量高峯退去後,根據業務流量,緩慢縮容:

1. 在CCE控制檯,單擊集羣名稱進入集羣。

2. 單擊左側導航欄的“工作負載”,在目標工作負載的操作列中單擊“更多 > 彈性伸縮”。

2.jpg

3. 策略類型選擇“HPA+CronHPA策略”,啓用HPA策略,並同時啓用CronHPA策略。此時CronHPA會定時調整HPA策略的最大和最小實例數。

4. 設置HPA策略

設置實例範圍與系統策略,如下圖, HPA會根據當前業務容器的CPU利用率,在1-10範圍內動態調節容器的實例數,當CPU利用率大於80%時自動擴容,在CPU利用率低於60%時自動縮容業務容器實例數。

3.png

5. 設置CronHPA策略

設置定時任務,如下圖所示

策略一:20:00調整HPA策略實例數範圍,從1-10變爲8-10;

策略二:22:30調整HPA策略實例數範圍,從8-10變爲1-10。

4.png

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對象時存在衝突問題,兩個伸縮策略相互獨立,後執行的操作會覆蓋先執行的操作,導致伸縮效果不符合預期,因此需避免這種情況發生。

5.jpg

爲避免上述問題,我們通過增強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

點擊關注,第一時間瞭解華爲雲新鮮技術~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章