Kubernetes HPA 弹性伸缩规则

2018, Apr 01    

基本规则:

  1. 每隔 30 秒循环检查一次所有 HPA(间隔可配置)
  2. 第一次自动伸缩完成后,记录伸缩时间
  3. 如果需要扩容,那么至少与上次伸缩时间间隔 3 分钟(可配置)
  4. 如果需要缩容,那么至少与上次伸缩时间间隔 5 分钟(可配置)

伸缩计算方法:

  1. 如果目标资源(比如 Deployment)的 Spec.Replicas 是 0,则不会进行任何伸缩操作(不记录伸缩时间)。
  2. 如果 Status.Replicas 超过 HPA 的 MaxReplicas,伸缩到 MaxReplicas(记录伸缩时间)。
  3. 如果 Status.Replicas 低于 HPA 的 MinReplicas,伸缩到 MinReplicas(记录伸缩时间)。
  4. 如果 Status.Replicas 等于 0,伸缩到 1(记录伸缩时间)。
  5. 如果不满足上述所有条件,则按照 CPU 利用率进行弹性伸缩(记录伸缩时间)。

CPU 利用率计算方法:

  1. 平均 CPU 利用率 = 所有 Pod 使用的 CPU mCore / 所有 Pod 请求的 CPU mCore
  2. 利用率比例 = 平均 CPU 利用率 / 目标 CPU 利用率
  3. 伸缩到的数量 = ceil( 利用率比例 * Status.Replicas )
    • 利用率比例不在 [0.9, 1.1] 区间,才能进行伸缩,防止抖动
  4. 本次可以伸缩到的数量 = min( 伸缩到的数量, max( Status.Replicas * 2, 4 ) )