what:什麼是HPA?
縮寫:HPA
全稱:Horizontal Pod Autoscaling
中文:POD水平自動伸縮
WHY:爲什麼需要HPA?
在實際生產中,隨着業務量的上升,POD的負載也隨之上升,我們的老辦法是手動伸縮POD:
將名爲foo中的pod副本數設置爲3
kubectl scale --replicas=3 rs/foo
但是不乏有這樣的場景:某一家商鋪臨時舉行了一次秒殺活動,作爲攻城獅的我們並未提前做準備,面對大量流量的訪問,之前的POD數量無法支撐這次秒殺所帶來的大量且臨時的QPS,服務器歇火了…這當然不是我們想看到的。
於是,一個發自靈魂深處的拷問便誕生了:
有沒有這樣一個玩意兒?它能夠隨時監控着deploy,根據deploy的某項指標,比如當deploy控制的pod的QPS>30時,就自動給他擴容,當QPS<=30的時候,就自動給他縮容,能夠享受自動擴容帶來的優勢同時也不會浪費集羣的資源。
不由感嘆,多麼美好的一幅畫面啊!四海昇平,集羣上下其樂融融!
HOW:如何實現HPA?
在此,我實現了一個demo,具體功能如下:
當POD的CPU利用率>2%時,給deploy擴容,POD的CPU利用率<=2%時,自動縮容
實現此功能的必要條件:
1.阿里雲K8S集羣
2.利用helm安裝prometheus-operator
實現步驟
1)首先,更新helm發佈的prometheus-operator,開啓PrometheusAdapter(約1400多行)
## Configuration for prometheusAdpater
prometheusAdpater:
affinity:
# the switch for prometheusAdpater
enabled: true
2)創建HPA控制器:
kubectl autoscale deployment workbei-mindmap-beta --cpu-percent=2 --min=1 --max=5 --namesapce=dingtalk-auth-beta
查看是否創建成功:
kubectl get hpa --namespace=dingtalk-auth-beta
成功截圖:
REFERENCE可想而知:代表的是關聯的deploy,尤其注意這個TARGETS指標!分號左側代表的是當前的指標值,右側代表的伸縮閾值。
3)測試是否能夠伸縮:
我開啓了3個窗口,分別輸入如下命令來不停的訪問pod中的探針接口來渴望增加CPU利用率
while true;do curl https://***.***.***/probe;done
期間可以通過如下命令觀察pod的CPU利用率情況
kubectl top pods --namespace=dingtalk-auth-beta
同時輸入如下命令觀察HPA指標情況
kubect get hps --namespace=dingtalk-auth-beta -w
結果截圖:
查看當前pod副本數量:
那麼,讓我們來停止訪問,測試是否能夠自動縮容?
停止訪問的窗口,喝杯茶歇一會兒