k8s羣集之動態擴縮容之(HPA)

1、HPA介紹

HPA的全稱爲Horizontal Pod Autoscaling,它能夠根據當前pod資源的使用率(如CPU、磁盤、內存等),進行副本數的動態的擴容與縮容,以便減輕各個pod的壓力。當pod負載達到必定的閾值後,會根據擴縮容的策略生成更多新的pod來分擔壓力,當pod的使用比較空閒時,在穩定空閒一段時間後,還會自動減小pod的副本數量。php

若要實現自動擴縮容的功能,還須要部署heapster服務,用來收集及統計資源的利用率,支持kubectl top命令,heapster服務集成在prometheus(普羅米修斯) MertricServer服務中,因此說,爲了方便,我這裏基於prometheus服務的環境上進行部署HPA(動態擴縮容)的服務。node

能夠參考博文:K8s的監控之三種可視化UI界面部署的第三個部署Prometheus服務,來運行prometheus服務!!!apache

說這麼多,總之就是想要使用HPA,就必須保證,能夠在master節點上執行以下命令:markdown

[root@master ~]# kubectl top node      #查看節點的資源使用狀況
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   1317m        65%    1383Mi          80%       
node01   1237m        61%    1082Mi          62%       
node02   1146m        57%    1045Mi          60%

2、實現pod自動擴容與縮容

1)生成HPA控制器併發

[root@master ~]#  kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose --port=80
//運行hpa資源,名稱爲php-apache,並設置請求CPU的資源爲200m並暴露一個80端口

[root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
//當hpa資源的deployment資源對象的CPU使用率達到50%時,就進行擴容,最多能夠擴容到10個

[root@master ~]# kubectl get svc | grep php-apache    //查看php-apache對應的svc羣集IP
php-apache   ClusterIP   10.97.45.108   <none>        80/TCP    44m

[root@master ~]#  kubectl get pod | grep php-apa    //肯定當前的pod正常運行
php-apache-867f97c8cb-9mpd6   1/1     Running   0          44m

2)模擬消耗php-apache的資源,並驗證pod是否會自動擴容與縮容ide

新開啓多個終端(也可以使用node節點),對php-apache的pod進行死循環請求,以下(若是你的系統資源比較充足,能夠選擇開啓多個終端,對pod進行死循環請求,我這裏開啓了兩個node的終端,同時請求php-apache的pod):google

[root@node01 ~]# while true; do wget -q -O- 10.97.45.108; done           //一直返回ok屬於正常現象
//模擬多用戶對php-apache的pod形成的併發請求
[root@master ~]# kubectl get  hpa   //查看hpa資源對cpu的佔用狀況
#也可以使用「-w」選項對CPU資源佔用狀況實時監控
NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   416%/50%   1         10        10         56m
[root@master ~]#  kubectl get pod
//在運行死循環請求一段時間後,查看pod數量,固然使用-w選項對pod的變化進行實時的監控
NAME                          READY   STATUS    RESTARTS   AGE
php-apache-867f97c8cb-6jsjq   1/1     Running   0          4m9s
php-apache-867f97c8cb-7xd5x   1/1     Running   0          51s
php-apache-867f97c8cb-9mpd6   1/1     Running   0          56m
php-apache-867f97c8cb-dhng7   1/1     Running   0          3m8s
php-apache-867f97c8cb-qc9hr   1/1     Running   0          2m22s
php-apache-867f97c8cb-rj494   1/1     Running   0          3m38s
php-apache-867f97c8cb-sbn9n   1/1     Running   0          3m38s
php-apache-867f97c8cb-vzfbg   1/1     Running   0          4m9s
php-apache-867f97c8cb-vzfbg   1/1     Running   0          5m19s
php-apache-867f97c8cb-vzfbg   1/1     Running   0          3m39s
//固然最大也就只能夠產生10個pod,由於咱們以前規定最多產生10個pod

當中止死循環請求後,也並不會當即減小pod數量,會等一段時間後減小pod數量,防止流量再次激增。code

至此,HPA實現pod副本數量的自動擴容與縮容就實現了。對象

相關文章
相關標籤/搜索