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%
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副本數量的自動擴容與縮容就實現了。對象