Kubernetes 14 (HPA--水平Pod自动缩放)

本文介绍了Kubernetes的HorizontalPodAutoscaler(HPA)功能,详细阐述了HPA如何根据Pod的CPU和内存使用情况进行动态伸缩。通过实例展示了创建HPA、设置阈值以及进行压力测试的过程,揭示了HPA在应对流量波动时的自动扩容和缩容机制。同时,还探讨了如何在v2版本中实现对CPU和内存的联合监控。
摘要由CSDN通过智能技术生成

一、 HPA简介

1、HAP,全称 Horizontal Pod Autoscaler (Pod自动弹性伸缩),K8S通过对Pod中运行的容器各项指标(CPU占用、内存占用、网络请求量)的检测,实现对Pod实例个数的动态新增和减少。

2、HPA仅适用于Deployment控制器和ReplicaSet控制器,在V1版本中仅支持根据Pod的CPU利用率扩容与缩容,在v2版本中,支持根据内存和cpu利用率扩容与缩容。HPA需要与metrics配合使用,metrics负责监控cpu和mem数据,然后提供给HPA,HPA根据使用情况自动扩容与缩容。metrics默认只能用cpu和mem两个指标(系统负载),其他监控指标(访问量等等)需要第三方给数据,比如普罗米修斯

3、HPA伸缩过程:
(1) 收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization);
(2) 对比在扩容条件里记录的cpu限额(CPU Utilization);
(3) 调整实例数(必须要满足不超过最大/最小实例数);
(4) 每隔30s做一次自动扩容的判断;
CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。

4、HPA进行伸缩算法:
计算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target);
ceil()表示取大于或等于某数的最近一个整数,每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。当前Pod cpu使用率与目标使用率接近时,不会触发扩容或缩容。
触发条件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9

二、 HPA实例

1.HPA部署

可以参考官网文档:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/,准备所需镜像;
我们本地有,所以只需将真机的 hpa-example.tar发送给server1
请添加图片描述
server1导入镜像,并上传至仓库
请添加图片描述
请添加图片描述
使用以下命令删除不用的镜像;
查看磁盘使用,现在有6.6G可用
请添加图片描述
创建一个存放hpa文件的目录;
编辑deploy.yaml 文件

apiVersion: apps/v1
kind: Deployment		%创建Deployment控制器
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1			%副本数为1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: hpa-example		镜像是hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m			%cpu上限0.5
          requests:
            cpu: 200m			%cpu下限0.2
---
apiVersion: v1
kind: Service					%创建svc
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

请添加图片描述
请添加图片描述
应用deploy.yaml 文件,创建pod和svc
请添加图片描述
查看php-apache服务的详细信息,地址为10.106.97.49,测试访问
请添加图片描述

2.压力测试

php-apache 服务器已经运行,通过 kubectl autoscale 命令创建 HPA,用于控制我们上一步骤中创建的 Deployment,使 Pod 的副本数量维持在 1 到 10 之间。即:HPA 将(通过 Deployment)增加或者减少 Pod 副本的数量,以保持所有 Pod 的平均 CPU 利用率在 50% 左右(由于每个 Pod 请求 200 毫核的 CPU,这意味着平均 CPU 用量为 100 毫核)。自动扩缩完成副本数量的改变可能需要几分钟的时间。Hpa会根据Pod的CPU使用率动态调节Pod的数量。

设定hpa伸缩控制器;
kubectl autoscale deployment php-apache :表示deployment名为php-apache;
–cpu-percent= 50 :表示cpu使用率不超过50%;
–min= 1 --max= 10: 副本最小个数为1,最大个数为10。

可以看到hpa创建成功,目前只有一个pod
请添加图片描述
查看pod的cpu使用情况
请添加图片描述
接下来进行压力测试,模拟增加访问php-apache服务的负荷,查看hpa是否生效;
每0.01秒访问一次服务,如果hpa生效,则会适应性增/减pod副本的数量以保持每个pod的cpu平均使用率在50%左右。成功访问一次,会出现一个OK
请添加图片描述
因为执行命令后,进程会一直在运行,所以需要再打开一个终端来查看cpu的使用率信息
请添加图片描述
可以看到在hpa的作用下,pod节点增加到了6个,来维持50%的cpu使用率,此时cpu使用率大概为47%;
即hpa会根据Pod的CPU使用率动态调节Pod的数量。
请添加图片描述
现在取消压力测试
请添加图片描述
hpa会自动缩容,但是缩的速度比扩的速度慢很多
请添加图片描述
压力测试结束后,现在的cpu使用率为0,但是副本数量还是6,这是因为压力刚结束要预防压力再次回升。
请添加图片描述
等待压力测试结束后大约3-5分钟,pod副本数量逐渐缩减为1个;
hpa的机制是扩容很迅速,缩容很慢。原因是压力上来了,需要马上扩容,才能应对压力;等压力小了,不能马上缩容,防止压力再次上升,不能及时应对。
请添加图片描述

3.同时监控cpu和内存

API-v1版本只能监控单一指标,v2版本可以支持多个度量指标,但hpa只能采集到cpu和内存,其他指标需要使用普罗米修斯等第三方监控系统,应用采集后将数据交给hpa。
如果要同时对cpu和内存进行hpa伸缩监控,需要将hpa升级到v2版本,通过使用yaml配置文件的方式生成hap。

请添加图片描述

查看以下信息
请添加图片描述
请添加图片描述
编辑hpa-v2.yaml 文件;
kind: HorizontalPodAutoscaler :类型是HPA;
maxReplicas: 10 :最大副本数10;
minReplicas: 1 :最小副本数1;
averageUtilization: 60 :cpu目标使用率是百分之六十;
averageValue: 50Mi :mem目标使用大小是50M。
请添加图片描述
应用配置
请添加图片描述
查看hpa,可以看到现在同时监控cpu和内存
请添加图片描述
查看pod的实时资源使用情况
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值