Kubernetes平台上应用的自动化横着扩展(水平自动伸缩)是通过HPA(Horizontal Pod Autoscaler)来实现的,基于观测CPU使用率(v1版本,v2beta版本也支持memory或者其他自定义性能属性),当业务负载上升超过HPA设定值,创建新的POD保障业务对资源的需求,当负载下载后可以通过销毁POD是否资源来提高利用率。

HPA控制器的工作流程(V1版本)


流程

创建HPA资源对象,关联对应资源例如Deployment,设定目标CPU使用率阈值,最大,最小replica数量。

前提:pod一定要设置资源限制,参数request,HPA才会工作。

HPA控制器每隔15秒钟(可以通过设置controller manager的–horizontal-pod-autoscaler-sync-period参数设定,默认15s)通过观测metrics值获取资源使用信息

HPA控制器将获取资源使用信息与HPA设定值进行对比,计算出需要调整的副本数量

根据计算结果调整副本数量,使得单个POD的CPU使用率尽量逼近期望值,但不能照顾设定的最大,最小值。

以上2,3,4周期循环


周期

HPA控制器观测资源使用率并作出决策是有周期的,执行是需要时间的,在执行自动伸缩过程中metrics不是静止不变的,可能降低或者升高,如果执行太频繁可能导致资源的使用快速抖动,因此控制器每次决策后的一段时间内不再进行新的决策。对于扩容这个时间是3分钟,缩容则是5分钟,对应调整参数

--horizontal-pod-autoscaler-downscale-delay

--horizontal-pod-autoscaler-upscale-delay

1

2

自动伸缩不是一次到位的,而是逐渐逼近计算值,每次调整不超过当前副本数量的2倍或者1/2


通过kubectl api-versions可以查看到存在3个版本。v1版本只支持CPU,v2beta2版本支持多metrics(CPU,memory)以及自定义metrics。基于autoscaling/v2beta2的hpa yaml文件写法


apiVersion: autoscaling/v2beta2

kind: HorizontalPodAutoscaler

metadata:

  name: php-apache-hpa

  labels:

    app: hpa-test

spec:

  scaleTargetRef:

    apiVersion: apps/v1

    kind: Deployment

    name: php-apache

  minReplicas: 1

  maxReplicas: 10

  metrics:

  - type: Resource

    resource:

      name: cpu

      target:

        type: Utilization

        averageUtilization: 50


原文链接:https://blog.csdn.net/oyym_mv/article/details/87189199

参考kubernetes云平台管理实战:HPA水平自动伸缩

链接https://www.cnblogs.com/luoahong/p/10303077.html

参考阿里云容器HPA设置链接https://help.aliyun.com/document_detail/86554.html