《Kubernetes知识篇:Kubernetes资源自动伸缩的三种方法》( 二 )


-部署参考如下链接: 《部署篇:部署-服务》
补充说明:
1、Metrics server是K8S集群资源使用情况的聚合器2、从1.8版本开始,Metrics server可以通过yaml文件的方式进行部署3、Metrics server收集所有node节点的metrics信息
四、HPA实现pod自动扩缩容 4.1、基于CPU指标实现pod自动扩缩容
1、资源下载
K8S之HPA基于CPU指标实现pod自动扩缩容测试用例
2、创建Nginx服务
3、等待1分钟左右的时间,查看hpa
[root@k8s-master-227 k8s-auto-cpu]# kubectl get hpaNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEnginx-deployment-hpaDeployment/nginx0%/30%15151s
4、验证Nginx是否部署成功
5、压测Nginx服务,只是针对CPU做压测
[root@k8s-master-227 k8s-auto-cpu]# while true; do wget -q -O- http://10.48.71.68:80; done
说明:过一段时间等待后,我们通过执行以下命令来看到更高的CPU负载
上面可以看到,CPU消耗已经达到85%,每个pod的目标cpu使用率是30%,所以,Nginx这个创建的pod副本数将调整为3个副本,为什么是3个副本,因为85/30=~3 。pod副本数如下所示:
此时,pod副本数如下所示:
6、停止压测Nginx服务
说明:停止对Nginx服务压测,HPA会自动对Nginx这个创建的pod做缩容,等待5分钟后,pod会自动缩容,数量由原来的3个变成1个,如下图所示:
4.2、基于内存指标实现pod自动扩缩容
1、资源下载
K8S之HPA基于内存指标实现pod自动扩缩容测试用例
2、创建Nginx服务
3、等待1分钟左右的时间,查看hpa
[root@k8s-master-227 k8s-auto-memory]# kubectl get hpaNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEnginx-deployment-hpaDeployment/nginx2%/20%15381s
4、验证Nginx是否部署成功
5、压测Nginx服务,只是针对内存做压测
[root@k8s-master-227 k8s-auto-memory]# kubectl exec -it nginx-89ffd9f44-94pds -- /bin/sh# dd if=/dev/zero of=/tmp/a
说明:过一段时间等待后,我们通过执行以下命令来看到更高的内存负载
上面可以看到,内存消耗已经达到31%,每个pod的目标内存使用率是20%,所以,Nginx这个创建的pod副本数将调整为2个副本,为什么是2个副本,因为31/20=~2 。pod副本数如下所示:
此时,pod副本数如下所示:
6、取消对Nginx 内存的压测,删除/tmp/a 这个文件
[root@k8s-master-227 k8s-auto-memory]# kubectl exec -it nginx-89ffd9f44-94pds -- /bin/sh# rm -f /tmp/a# exit
说明:停止对Nginx服务压测,HPA会自动对Nginx这个创建的pod做缩容,等待5分钟后,pod会自动缩容,数量由原来的2个变成1个,如下图所示:
五、VPA实现pod自动扩缩容 5.1、部署-pod-
1、克隆项目
[root@k8s-master-227 k8s-vpa]# wget https://github.com/kubernetes/autoscaler/archive/refs/tags/vertical-pod-autoscaler-0.8.1.zip
说明:当前k8s集群版本为1.20.6,这里使用的项目版本为0.8.1,其中-pod--0.10.0、-pod--0.9.2、-pod--0.9.0在当前k8s集群环境均部署失败,换成0.8.1版本正常 。
2、修改部署文件
[root@k8s-master-227 kubernete-autoscale]# cd autoscaler-vertical-pod-autoscaler-0.8.1/vertical-pod-autoscaler/deploy/[root@k8s-master-227 deploy]# grep imagePullPolicy *admission-controller-deployment.yaml:imagePullPolicy: Alwaysrecommender-deployment.yaml:imagePullPolicy: Alwaysupdater-deployment.yaml:imagePullPolicy: Always[root@k8s-master-227 deploy]# sed -i 's#imagePullPolicy: Always#imagePullPolicy: IfNotPresent#g' `grep -rl imagePullPolicy .`[root@k8s-master-227 deploy]# grep imagePullPolicy *admission-controller-deployment.yaml:imagePullPolicy: IfNotPresentrecommender-deployment.yaml:imagePullPolicy: IfNotPresentupdater-deployment.yaml:imagePullPolicy: IfNotPresent