您的位置:首页 > 其它

k8s群集之动态扩缩容——HPA

2020-09-13 22:44 543 查看

一、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@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%

二、实现Pod扩容与缩容

1、生成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

2、模拟消耗php-apache的资源,验证是否会自动扩容与缩容

//创建一个应用,用来不停的访问我们刚刚创建的php-apache的svc资源。也可以使用node节点,多开几个终端来进行访问。

//在多台节点上输入如下命令模拟多用户对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

//接下来我们查看资源使用情况

//查看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数量,防止流量再次激增。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: