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羣集的三種Web-UI界面部署中的第三個部署Prometheus服務,來運行prometheus服務,若是不想部署prometheus,那麼能夠參考github上來單獨部署heapster服務git

//要想實現pod副本數量的一個擴縮容,就必須保證,能夠在master上執行下面的命令github

//查看節點的資源使用狀況
[root@docker-k8s01 kube-prometheus]# kubectl top nodes
NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
docker-k8s01   101m         5%     1315Mi          76%       
docker-k8s02   59m          2%     1077Mi          62%       
docker-k8s03   54m          2%     1131Mi          65%

2、實現Pod擴容與縮容

一、生成HPA控制器

//運行這個hpa-example,請求CPU的資源位200m,暴露一個80端口
[root@docker-k8s01 ~]# kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose --port=80
//當deployment資源對象的CPU使用率高達50%時,就會進行擴容,最多擴容到10個
[root@docker-k8s01 ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
//上述的命令做用是生成了一個HPA的控制器,用於控制自動擴縮容
//查看php-apache對應的svc羣集IP
[root@docker-k8s01 ~]# kubectl get svc | grep php-apache
php-apache   ClusterIP   10.98.31.183   <none>        80/TCP    82s
//肯定當前pod數量
[root@docker-k8s01 ~]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
php-apache-867f97c8cb-g8kl9   1/1     Running   0          2m30s

二、模擬消耗php-apache的資源,驗證是否會自動擴容與縮容

//建立一個應用,用來不停的訪問咱們剛剛建立的php-apache的svc資源。也可使用node節點,多開幾個終端來進行訪問。docker

//在多臺節點上輸入以下命令模擬多用戶對php-apaache形成成噸傷害
[root@docker-k8s01 ~]# kubectl run -i --tty load-generator --image=busybox /bin/sh
/ # while true; do wget -q -O- 10.98.31.183; done
//每一次OK都是對php-apache的確定,訪問成功
OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!O

//接下來咱們查看資源使用狀況apache

//查看hpa的資源使用,能夠看到才第二次就直接飆到了300%多
[root@docker-k8s01 ~]# kubectl get hpa -w
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        1          6m17s
php-apache   Deployment/php-apache   331%/50%   1         10        1          10m
php-apache   Deployment/php-apache   331%/50%   1         10        4          11m
php-apache   Deployment/php-apache   894%/50%   1         10        7          11m
php-apache   Deployment/php-apache   894%/50%   1         10        10         11m
//能夠看到咱們的10個pod都已經就緒了
[root@docker-k8s01 ~]# kubectl get pod 
NAME                             READY   STATUS    RESTARTS   AGE
load-generator-7d549cd44-8x96c   1/1     Running   0          5m48s
php-apache-867f97c8cb-44d2p      1/1     Running   0          3m4s
php-apache-867f97c8cb-6qf6b      1/1     Running   0          3m34s
php-apache-867f97c8cb-bhjtd      1/1     Running   0          3m4s
php-apache-867f97c8cb-fwhvs      1/1     Running   0          3m34s
php-apache-867f97c8cb-g8kl9      1/1     Running   0          16m
php-apache-867f97c8cb-gjzl7      1/1     Running   0          3m4s
php-apache-867f97c8cb-ktgnv      1/1     Running   0          3m34s
php-apache-867f97c8cb-mhm75      1/1     Running   0          3m19s
php-apache-867f97c8cb-pnwkf      1/1     Running   0          3m19s
php-apache-867f97c8cb-zqd62      1/1     Running   0          3m19s
[root@docker-k8s01 ~]# kubectl get deployments.
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
load-generator   1/1     1            1           6m42s
php-apache       10/10   10           10          17m

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

相關文章
相關標籤/搜索