您现在的位置是:首页 >技术杂谈 >研发工程师玩转Kubernetes——自动扩缩容网站首页技术杂谈

研发工程师玩转Kubernetes——自动扩缩容

breaksoftware 2024-06-25 18:01:02
简介研发工程师玩转Kubernetes——自动扩缩容

《研发工程师玩转Kubernetes——使用Deployment进行多副本维护》一文中,我们通过Deployment实现了多副本维护——即维持在一个确定数量的副本个数。而在现实场景中,我们往往需要根据服务的压力,采用水平(横向)扩容的方式——即增加多个副本,来分担压力。当服务压力降低时,又需要减少副本数来节约成本。本节我们将介绍如何根据服务压力进行自动的扩缩容。

部署

我们借用《研发工程师玩转Kubernetes——CPU配额》中的代码。它是一个Http服务,接受请求后执行一段消耗CPU的操作。

推送镜像

docker build -t simple_http:v5 .
docker tag simple_http:v5 localhost:32000/simple_http:v5
docker push localhost:32000/simple_http:v5

Deployment清单

Deployment可以通过spec.replicas指定需要维护的副本个数。但是本节我们需要动态扩缩容,副本个数根据服务压力动态改变,而不会固定在一个固定的副本个数上,所以spec.replicas字段不需要指定。
在这里插入图片描述

HorizontalPodAutoscaler清单

HorizontalPodAutoscaler是用来设置动态扩缩容条件的组件。我们可以通过它来设置诸如:最少副本数量,最多副本数量和触发扩容的条件(如CPU达到80%时开始扩容)。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: simple-http-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: simple-http-deployment
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80

上面的例子意思是:针对名字(name)叫simple-http-deployment、类型(kind)是Deployment的Pod集合,最低维持(minReplicas)2个副本。如果Pod的CPU利用率超过80%,则开始扩容,最大(maxReplicas)不超过10个副本。

执行部署

上述清单我们都放在simple_http_deployment.yaml文件中,只要执行create指令就行

kubectl create -f simple_http_deployment.yaml

deployment.apps/simple-http-deployment created
service/simple-http-service created
horizontalpodautoscaler.autoscaling/simple-http-hpa created

测试

查看HorizontalPodAutoscaler副本数量

kubectl get horizontalpodautoscalers.autoscaling simple-http-hpa 

在这里插入图片描述
此时只有2个副本。
我们使用《研发工程师玩转Kubernetes——CPU配额》中的wrk进行压力测试。
在这里插入图片描述

 wrk -t10 -c10 -d300  http://192.168.137.248:30000

在压测过程中,我们使用下面命令查看CPU负载。

kubectl get horizontalpodautoscalers.autoscaling simple-http-hpa 
NAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGE
simple-http-hpaDeployment/simple-http-deployment1%/80%21024m48s
simple-http-hpaDeployment/simple-http-deployment10%/80%(CPU负载开始增加)21025m1s(开始压测)
simple-http-hpaDeployment/simple-http-deployment95%/80%(CPU负载超过阈值80%)21025m16s
simple-http-hpaDeployment/simple-http-deployment97%/80%2103(开始动态扩容)5m33s
simple-http-hpaDeployment/simple-http-deployment89%/80%(CPU负载开始下降)21046m53s
simple-http-hpaDeployment/simple-http-deployment89%/80%21069m17s
simple-http-hpaDeployment/simple-http-deployment85%/80%21079m43s
simple-http-hpaDeployment/simple-http-deployment79%/80%(CPU负载开始低于阈值80%)210710m(压测结束)
simple-http-hpaDeployment/simple-http-deployment1%/80%210710m
simple-http-hpaDeployment/simple-http-deployment1%/80%2102(自动缩容)15m

我们使用wrk压测了5分钟。这5分钟容器的CPU负载一直很高,Pod也一直在自动扩容。
5分钟后wrk停止,CPU利用率降低到1%。大概又过了5分钟,Pod自动缩容到最低的副本数2。

Kubernetes HorizontalPodAutosc

参考资料

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。