Kubernetes HPA 弹性伸缩规则
2018, Apr 01
基本规则:
- 每隔 30 秒循环检查一次所有 HPA(间隔可配置)
- 第一次自动伸缩完成后,记录伸缩时间
- 如果需要扩容,那么至少与上次伸缩时间间隔 3 分钟(可配置)
- 如果需要缩容,那么至少与上次伸缩时间间隔 5 分钟(可配置)
伸缩计算方法:
- 如果目标资源(比如 Deployment)的 Spec.Replicas 是 0,则不会进行任何伸缩操作(不记录伸缩时间)。
- 如果 Status.Replicas 超过 HPA 的 MaxReplicas,伸缩到 MaxReplicas(记录伸缩时间)。
- 如果 Status.Replicas 低于 HPA 的 MinReplicas,伸缩到 MinReplicas(记录伸缩时间)。
- 如果 Status.Replicas 等于 0,伸缩到 1(记录伸缩时间)。
- 如果不满足上述所有条件,则按照 CPU 利用率进行弹性伸缩(记录伸缩时间)。
CPU 利用率计算方法:
- 平均 CPU 利用率 = 所有 Pod 使用的 CPU mCore / 所有 Pod 请求的 CPU mCore
- 利用率比例 = 平均 CPU 利用率 / 目标 CPU 利用率
- 伸缩到的数量 = ceil( 利用率比例 * Status.Replicas )
- 利用率比例不在 [0.9, 1.1] 区间,才能进行伸缩,防止抖动
- 本次可以伸缩到的数量 = min( 伸缩到的数量, max( Status.Replicas * 2, 4 ) )