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数量,防止流量再次激增。
相关文章推荐
- k8s群集之动态扩缩容——HPA
- k8s实践17:kubernetes对接nfs存储实现pvc动态按需创建分配绑定pv
- VMware vSphere 5.1 群集深入解析(十二)- DRS动态配额
- kubernetes实战(九):k8s集群动态存储管理GlusterFS及使用Heketi扩容GlusterFS集群
- kubespy 用bash实现的k8s动态调试工具
- k8s创建资源(1)、<扩容与缩容>和<升级与回滚>
- 基于K8s的动态Jenkins Slave构建实践
- kubernetes的ceph RBD volume(5): 创建动态的volume绑定随replica scale的扩容和缩容的pod
- 如何设计可以动态扩容缩容的分库分表方案?
- k8s用kubectl管理应用升级,服务发布与回滚,扩缩容
- 【nfs搭建、k8s、StroageClass动态创建PV】K8S通过StroageClass完成动态的PV创建
- K8S水平自动扩、缩容实例
- k8s创建资源(1)、<扩容与缩容>和<升级与回滚>
- 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序
- k8s使用NFS做动态存储做mysql容器主从同步
- K8S集群基于heapster的HPA测试
- k8s使用nfs动态存储
- K8s资源对象的基本管理(升级、回滚、扩容、缩容)
- 15.hystrix生产环境中的线程池自动扩容与缩容的动态资源分配经验