kubernetes - 15 HPA

1 HPA的作用

应用的资源使用率通常都有高峰和低谷的时候,如何提高集群的整体资源利用率,让service中的Pod个数根据利用情况自动调整呢?
这就有赖于HPA(Horizontal Pod Autoscaling),即Pod水平自动缩放。

在这里插入图片描述

HPA伸缩过程:

收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
对比在扩容条件里记录的cpu限额(CPUUtilization)
调整实例数(必须要满足不超过最大/最小实例数)
每隔30s做一次自动扩容的判断

CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。

HPA进行伸缩算法:

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

部署HPA-cpu

上传镜像到私有仓库

在这里插入图片描述
创建目录,编辑文件

[root@server2 ~]# mkdir hap
[root@server2 ~]# cd hap/
[root@server2 hap]# vim deploy.yaml
[root@server2 hap]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment               Deloymnet控制器
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 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下限0.2
            cpu: 200m                  
---
apiVersion: v1
kind: Service                                svc
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

创建pod,svc
在这里插入图片描述设定HPA控制器,名字叫php-apache,cpu目标使用率是百分之五十,副本最小个数为1,最大个数为10

[root@server2 hap]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

查看pod的cpu和内存使用情况
在这里插入图片描述
进行压力测试,测试hpa是否生效,HPA 将增加或者减少 Pod 副本的数量来保持所有 Pod 的平均 CPU 利用率在 50% 左右。

[root@server2 hpa]# kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
	 每0.01秒访问一次php-apache服务,模拟增加php-apache服务的负荷

在开启一个server2查看,发现cpu的利用率被稳定在50%左右,而pod的数量也提升为7个

在这里插入图片描述
取消压力测试,过几分钟之后,副本数量调整为1,hpa的机制是扩容很迅速,缩容很慢,这是因为如果压力上来了,需要马上进行扩容,才能应对压力,等压力小了,不能马上缩容,防止压力再次上升,不能及时应对。

在这里插入图片描述

3 HPA部署-cpu+mem

想要同时监测cpu和mem,v1版本的hpa不能满足,需要使用v2版本,需要使用yaml文件的格式生成hpa。
编辑文件

[root@server2 hap]# cat hpa-v2.yaml 
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler    HPA类型
metadata:
  name: php-apache
spec:
  maxReplicas: 10                    最大副本数为10           
  minReplicas: 1                     最小副本数为1       
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 60   cpu目标使用率60%
        type: Utilization
  - type: Resource
    resource:
      name: memory
      target:
        averageValue: 50Mi           内存目标使用率50M
        type: AverageValue

删除之前的v1版本,应用hpa-v2文件创建新的v2版本的hpa,查看
在这里插入图片描述扩容缩容方法与上面类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值