博文大綱:
一、HPA介紹
二、實現pod擴容與縮容的示例
一、HPA介紹
HPA的全稱爲Horizontal Pod Autoscaling,它可以根據當前pod資源的使用率(如CPU、磁盤、內存等),進行副本數的動態的擴容與縮容,以便減輕各個pod的壓力。當pod負載達到一定的閾值後,會根據擴縮容的策略生成更多新的pod來分擔壓力,當pod的使用比較空閒時,在穩定空閒一段時間後,還會自動減少pod的副本數量。
若要實現自動擴縮容的功能,還需要部署heapster服務,用來收集及統計資源的利用率,支持kubectl top命令,heapster服務集成在prometheus(普羅米修斯) MertricServer服務中,所以說,爲了方便,我這裏基於prometheus服務的環境上進行部署HPA(動態擴縮容)的服務。
可以參考博文:k8s羣集的三種Web-UI界面部署中的第三個部署Prometheus服務,來運行prometheus服務,如果不想部署prometheus,那麼可以參考github上來單獨部署heapster服務,
總言而之,要想實現pod副本數量的一個擴縮容,就必須保證,可以在master上執行下面的命令:
[root@master ~]# kubectl top node #查看節點的資源使用情況
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 218m 10% 1362Mi 79%
node01 113m 5% 1116Mi 64%
node02 127m 6% 1287Mi 74%
二、實現pod擴容與縮容的示例
1、生成HPA控制器
#運行這個hpa-example,請求CPU的資源爲200m,暴露一個80端口
[root@master ~]# kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose --port=80
#當deployment資源對象的CPU使用率達到50%時,就進行擴容,最多可以擴容到10個
[root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
#上面的命令作用是生成了一個HPA的控制器,用於控制自動擴縮容
[root@master ~]# kubectl get svc | grep php-apache #查看php-apache對應的svc羣集IP
php-apache ClusterIP 10.99.60.48 <none> 80/TCP 15m
[root@master ~]# kubectl get pod | grep php-apa #確定當前的pod數量
php-apache-867f97c8cb-vw74k 1/1 Running 0 17m
2、模擬消耗php-apache的資源,並驗證pod是否會自動擴容與縮容
新開啓多個終端,對pod進行死循環請求,如下(如果你的系統資源比較充足,可以選擇開啓多個終端,對pod進行死循環請求,我這裏開啓了三個終端,同時請求php-apache的pod):
[root@master ~]# while true; do wget -q -O- 10.99.60.48; done #每個終端都執行此命令
[root@master ~]# kubectl top pod #可以通過此命令隨時查看pod的負載情況
NAME CPU(cores) MEMORY(bytes)
load-generator-7d549cd44-xm98c 0m 1Mi
php-apache-867f97c8cb-vw74k 208m 20Mi
#也可以不定時的查看pod的數量是否有變化
[root@master ~]# kubectl get pod #在運行死循環請求一段時間後,查看pod數量
#可以發現php-apache的pod數量變成了10個,並且不會再增加,因爲在上面的命令對其限制了最大數
NAME READY STATUS RESTARTS AGE
load-generator-7d549cd44-xm98c 1/1 Running 1 25m
php-apache-867f97c8cb-4r6sk 1/1 Running 0 19m
php-apache-867f97c8cb-4rcpk 1/1 Running 0 13m
php-apache-867f97c8cb-5pbxf 1/1 Running 0 16m
php-apache-867f97c8cb-8htth 1/1 Running 0 13m
php-apache-867f97c8cb-d94h9 0/1 ContainerCreating 0 13m
php-apache-867f97c8cb-drh52 1/1 Running 0 18m
php-apache-867f97c8cb-f67bs 0/1 ContainerCreating 0 17m
php-apache-867f97c8cb-nxc2r 1/1 Running 0 19m
php-apache-867f97c8cb-vw74k 1/1 Running 0 39m
php-apache-867f97c8cb-wb6l5 0/1 ContainerCreating 0 15m
當停止死循環請求後,也並不會立即減少pod數量,會等一段時間後減少pod數量,防止流量再次激增。
至此,pod副本數量的自動擴縮容就實現了。
———————— 本文至此結束,感謝閱讀 ————————