k8s Pod的自动水平伸缩(HPA)

网友投稿 253 2022-09-12

k8s Pod的自动水平伸缩(HPA)

我们知道,当访问量或资源需求过高时,使用:kubectl scale命令可以实现对pod的快速伸缩功能 但是我们平时工作中我们并不能提前预知访问量有多少,资源需求多少。 这就很麻烦了,总不能为了需求总是把pod设置为最多状态,这样太浪费资源;也不能当请求量上来以后再去伸缩pod,这样会有好多请求不成功。 k8s既然是云原生时代的产品,当然得有智能,自动这些特性。 所以现在引入一个新的概念: HPA(Horizontal Pod Autoscaler ) pod的自动水平伸缩 有了HPA,我们就不用为上面的问题而烦恼,HPA会帮我们自动完成pod的扩缩容。 当资源需求过高时,会自动创建出pod副本;当资源需求低时,会自动收缩pod副本数。 注意:首先必须确保集群中已经安装metrics-server的组件,否则无法获取集群内资源数据,无法进行以下操作。 原理: 通过集群内的资源监控系统(metrics-server),来获取集群中资源的使用状态。 根据CPU、内存、以及用户自定义的资源指标数据的使用量或连接数为参考依据,来制定一个临界点,一旦超出这个点,HPA就会自动创建出pod副本。   版本: 通过kubectl api-versions可以看到,目前有3个版本: autoscaling/v1                 #只支持通过cpu为参考依据,来改变pod副本数autoscaling/v2beta1       #支持通过cpu、内存、连接数以及用户自定义的资源指标数据为参考依据。autoscaling/v2beta2       #同上,小的变动   查询: 1 kubectl explain hpa ##默认查询到的是autoscaling/v1版本 2 3 kubectl explain hpa --api-version=autoscaling/v2beta1 ##如果使用其他版本,可以使用--api-version指明版本 部署HPA: 哪个资源最多几个最少几个通过什么判断伸缩 例如:我有个deployment叫myapp现在只有一个副本数,最多只能8个副本数,当pod的cpu平均利用率超过百分之50或内存平均值超过百分之50时,pod将自动增加副本数以提供服务。 SVC、Deployment资源清单:   1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: svc-hpa 5 namespace: default 6 spec: 7 selector: 8 app: myapp 9 type: NodePort ##注意这里是NodePort,下面压力测试要用到。 10 ports: 11 - name: http 12 port: 80 13 --- 14 apiVersion: apps/v1 15 kind: Deployment 16 metadata: 17 name: myapp 18 namespace: default 19 spec: 20 replicas: 1 21 selector: 22 matchLabels: 23 app: myapp 24 template: 25 metadata: 26 name: myapp-demo 27 namespace: default 28 labels: 29 app: myapp 30 spec: 31 containers: 32 - name: myapp 33 image: ikubernetes/myapp:v1 34 imagePullPolicy: IfNotPresent 35 ports: 36 - name: http 37 containerPort: 80 38 resources: 39 requests: 40 cpu: 50m 41 memory: 50Mi 42 limits: 43 cpu: 50m 44 memory: 50Mi   HPA资源清单如下:   1 apiVersion: autoscaling/v2beta1 2 kind: HorizontalPodAutoscaler 3 metadata: 4 name: myapp-hpa-v2 5 namespace: default 6 spec: 7 minReplicas: 1 ##至少1个副本 8 maxReplicas: 8 ##最多8个副本 9 scaleTargetRef: 10 apiVersion: apps/v1 11 kind: Deployment 12 name: myapp 13 metrics: 14 - type: Resource 15 resource: 16 name: cpu 17 targetAverageUtilization: 50 ##注意此时是根据使用率,也可以根据使用量:targetAverageValue 18 - type: Resource 19 resource: 20 name: memory 21 targetAverageUtilization: 50 ##注意此时是根据使用率,也可以根据使用量:targetAverageValue   使用ab工具模拟压力测试: 1 ab -c 1000 -n 5000000 http://192.168.1.103:31727/index.html 等待数分钟后,查看hpa及pod数量: 1 [root@K8s-master ~]# kubectl get hpa 2 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE 3 myapp-hpa-v2 Deployment/myapp 5%/50%, 72%/50% 1 8 2 44m 4 [root@K8s-master ~]# kubectl get pods 5 NAME READY STATUS RESTARTS AGE 6 myapp-558db64459-pwzsd 1/1 Running 0 16m 7 myapp-558db64459-x9c4k 1/1 Running 0 23s

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:k8s资源指标API及metrics-server资源监控
下一篇:二进制安装的k8s添加新的node节点
相关文章

 发表评论

暂时没有评论,来抢沙发吧~