Linux企业运维——Kubernetes(十七)HPA容器水平伸缩

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Kubernetes(十七)HPA容器水平伸缩相关的知识,希望对你有一定的参考价值。

Linux企业运维——Kubernetes(十七)HPA容器水平伸缩

1、HPA简介

HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。

HPA伸缩过程:

  • 收集HPA控制下所有Pod最近的cpu使用情况(CPUutilization)
  • 对比在扩容条件里记录的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

2、HPA实例

2.1、HPA部署

server1查看磁盘使用情况,还有2.9G可用
docker image prune命令用于删除未使用的映像

再查看磁盘使用,现在有7.1G可用

真实主机将hpa-example.tar发送给server1

server1加载该镜像

将hpa-example镜像上传至仓库

server2创建hpa目录,在hpa目录下创建deploy.yaml配置文件

创建一个deployment控制器,指定镜像和cpu资源限制

[root@server2 hpa]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
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
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m


服务端口指定80

apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache


应用配置,准备好压力测试环境
(本地镜像都在根空间,上传到仓库的镜像都在/data数据目录下)

server2查看pod信息,正常运行

查看php-apache服务的详细信息,地址为10.100.194.233,测试访问

2.2、压力测试

设定hpa伸缩,kubectl autoscale deployment php-apache (php-apache表示deployment的名字) --cpu-percent= 50 (表示cpu使用率不超过50%) --min= 1 (最少一个pod) --max= 10 (最多10个pod)
可以看到hpa创建成功,目前只有一个pod

输入下图指令进行压力测试,模拟大流量高负荷的访问,每0.01秒访问一次服务。如果hpa生效,会适应性增减pod副本的数量以保持每个pod的cpu平均使用率在50%左右

可以看到在hpa的作用下,pod节点增加到了6个,来维持50%的cpu使用率


查看hpa信息,可以看到现在的平均cpu使用率

压力测试结束,现在cpu使用率为0,但是副本数量还是6,这是因为压力刚结束要预防压力再次回升。


压力测试结束后大约3-5分钟,pod副本数量逐渐缩减为1个

2.3、同时监控cpu和内存

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

编辑hpa-v2.yaml 文件,内容如下,将版本设定为v2beta2

[root@server2 hpa]# vim hpa-v2.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 60
        type: Utilization
  - type: Resource
    resource:
      name: memory
      target:
        averageValue: 50Mi
        type: AverageValue


应用配置,查看hpa,可以看到现在同时监控cpu和内存

以上是关于Linux企业运维——Kubernetes(十七)HPA容器水平伸缩的主要内容,如果未能解决你的问题,请参考以下文章

Linux企业运维——Kubernetes(十三)访问控制

Linux企业运维——Kubernetes(二十)Prometheus监控

Linux企业运维——Kubernetes(二十)Prometheus监控

Linux企业运维——Kubernetes(十四)PSP安全策略

Linux企业运维——Kubernetes(十六)容器资源监控

Linux企业运维——Kubernetes(十六)容器资源监控