HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)在 Kubernetes 集群中用于 Pod 水平自动伸缩,它基于 CPU 和内存利用率、对 Pod 数量进行自动扩缩容。
说明
HPA 不适用于无法缩放的对象,比如 DaemonSets。
使用限制
- HPA 配置多种指标时,会分别基于每种指标计算,并取最大值作为最终结果。
- 指标伸缩仅支持配置无状态负载(Deployment)、有状态负载(Statefulset)和自定义资源(CRD)。
前提条件
已安装 metrics-server 组件。详情请参见 安装组件。 通过控制台配置
- 在集群管理页面的左侧导航栏中,选择 弹性伸缩 > 指标伸缩,单击 创建指标伸缩,配置指标伸缩。
-
-
通过 kubectl 命令行配置
基础配置
使用如下代码示例,创建与伸缩对象关联的 HPA,并指定按照 CPU 或内存使用率进行弹性伸缩。
配置扩缩容行为
在 v1.24 及以上版本的集群中,autoscaling/v2 API 允许使用behavior字段配置 HPA 的扩缩容行为,同时,可以使用scaleUp和scaleDown字段分别配置扩容和缩容行为。
扩缩容策略
支持在behavior字段中指定一个或多个扩缩容策略。当指定多个策略时,默认允许最大更改量的策略是默认选择的策略。以下以缩容策略为例:
说明
- 默认情况下,系统会允许最大更改量的策略。因此,只有 Pod 副本数大于 40 时, 第二个策略才会被采用。如果副本数为 40 或者更少,则应用第一个策略。
- 支持使用selectPolicy字段来更改策略选择。 当配置为Min时,系统将选择副本数变化最小的策略。如果将该值设置为Disabled,则将完全禁用该扩缩容策略。
禁止 Pod 扩容或缩容
使用 HPA 时,如果您只期望进行 Pod 扩容或缩容,可以在配置扩缩容策略时,使用selectPolicy字段来实现。
- 禁用扩容:配置selectPolicy的值为Disabled时,禁用指定方向的扩容。例如:以下策略将会阻止 Pod 扩容。
- 禁用缩容:配置selectPolicy的值为Disabled时,禁用指定方向的缩容。例如:以下策略将会阻止 Pod 缩容。
配置静默时间
为防止因短期的指标波动导致 Pod 过度频繁或不必要的扩缩容。您可以为扩缩容行为配置静默时间,系统完成扩缩容后,在静默时间内,不会再次执行扩缩容策略,避免工作负载副本数频繁变更造成系统震荡。
例如在以下示例中,当指标显示目标应该缩容时,自动扩缩算法会将过去 5 分钟的所有期望状态考虑在内,使用窗口期内的最大值。
在集群管理页面的左侧导航栏中,选择 弹性伸缩 > 指标伸缩,查看已配置的弹性伸缩规则。
- 当 Pod CPU 使用率增加后会触发扩容,此时可通过如下命令查看 HPA 信息。
预期返回结果如下,Deployment 的副本数扩容到 2:
- 当 Pod CPU 使用率下降到指定值以下会触发缩容,此时可通过如下命令查看 HPA 信息。
预期返回结果如下,Deployment 的副本数缩容到 1: