Kubernetes-HPA初體驗

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副本數量:
在這裏插入圖片描述
那麼,讓我們來停止訪問,測試是否能夠自動縮容?

停止訪問的窗口,喝杯茶歇一會兒
在這裏插入圖片描述

穩健

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