HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)在 Kubernetes 集群中用于 Pod 水平自动伸缩,它基于 CPU 和内存利用率、对无状态负载和有状态负载的 Pod 数量进行自动扩缩容。
说明
HPA 不适用于无法缩放的对象,比如 DaemonSets。
已安装 metrics-server 组件,且组件工作正常。详情请参见 查看组件。
配置项 | 说明 |
---|---|
名称 | 根据系统提示,配置指标伸缩策略的名称。在同一个命名空间下,名称必须唯一。 |
命名空间 | 选择伸缩策略所属的命名空间。建议选择您自定义的命名空间或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述。 |
标签 | 对应 Kubernetes 中的 Label,用于指定该伸缩策略的标识属性。单击 添加标签,根据界面提示输入符合要求的 键 和 值。 |
注解 | 对应 Kubernetes 中的 Annotation,用于为伸缩策略附加任意非标识的元数据,包括 标签 不允许的字符,方便客户端能够检索此元数据。单击 添加注解,根据界面提示输入符合要求的 键 和 值。 |
配置项 | 说明 |
---|---|
伸缩对象 | 配置需要伸缩的工作负载。在下拉菜单中选择工作负载的类型和具体的工作负载。 |
监测指标 | 配置伸缩的监测指标,系统基于此指标决定是否需要进行伸缩。伸缩指标支持:
说明
|
最小实例数 | 配置伸缩时的最小实例数和最大实例数。策略触发时,工作负载实例将在此范围内伸缩。 |
最大实例数 |
配置项 | 说明 |
---|---|
扩缩容策略 | 配置工作负载的扩缩容行为,勾选 扩容策略 或 缩容策略,分别配置扩容策略行为和缩容策略行为。 |
静默时间 | 扩容策略或缩容策略的静默时间,整数形式,单位为秒。 |
策略类型 | 配置策略类型,包括:
|
策略 | 配置扩缩容的具体策略行为,包括:
|
apiVersion: apps/v1 kind: Deployment metadata: name: demo-workload # 工作负载名称 spec: replicas: 1 selector: matchLabels: app: demo-workload template: metadata: labels: app: demo-workload spec: containers: - name: workload image: cr-cn-beijing.volces.com/tw/nginx:1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址 resources: requests: # 指定容器的 CPU 和内存请求 cpu: "500m" memory: "1024Mi" limits: cpu: "1" memory: "2Gi"
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: workload-hpa # 指标伸缩名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: demo-workload # 指定指标伸缩的工作负载对象 minReplicas: 1 # 配置 HPA 的最小实例数 maxReplicas: 10 # 配置 HPA 的最大实例数 metrics: - type: Resource resource: name: cpu # 监测指标,目前仅支持 memory 和 cpu,且每一种监测指标只支持 1 个配置 target: type: Utilization averageUtilization: 80 # 监测指标阈值,整数形式,单位为 %,例如 80 代表 80% - type: Resource resource: name: memory # 监测指标,目前仅支持 memory 和 cpu,且每一种监测指标只支持 1 个配置 target: type: Utilization averageUtilization: 80 # 监测指标阈值,整数形式,单位为 %,例如 80 代表 80%
预期返回结果如下,Deployment 的副本数扩容到 2:kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE workload-hpa Deployment/example-workload 23/20 1 10 2 62s
预期返回结果如下,Deployment 的副本数缩容到 1:kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE workload-hpa Deployment/example-workload 0/20 1 10 1 15m
在 v1.24 及以上版本的集群中,autoscaling/v2
API 允许使用behavior
字段配置 HPA 的扩缩容行为,同时,可以使用scaleUp
和scaleDown
字段分别配置扩容和缩容行为。
说明
更多详细说明,请参见 社区文档。
支持在behavior
字段中指定一个或多个扩缩容策略。当指定多个策略时,默认允许最大更改量的策略是默认选择的策略。以下以缩容策略为例:
behavior: scaleDown: # 缩容策略 policies: - type: Pods # 策略类型,Pods 代表容器组,即基于 Pod 数量执行扩缩容 value: 4 # 阈值,此处代表缩容 4 个副本 periodSeconds: 60 # 时间间隔,整数形式,取值范围为 1~1800,单位为秒 - type: Percent # 策略类型,Percent 代表百分比,即基于 Pod 百分比执行扩缩容 value: 10 # 阈值,此处代表缩容当前副本数量的 10% periodSeconds: 60 # 时间间隔,整数形式,取值范围为 1~1800,单位为秒
说明
selectPolicy
字段来更改策略选择。 当配置为Min
时,系统将选择副本数变化最小的策略。如果将该值设置为Disabled
,则将完全禁用该扩缩容策略。使用 HPA 时,如果您只期望进行 Pod 扩容或缩容,可以在配置扩缩容策略时,使用selectPolicy
字段来实现。
默认值:均不禁止。
禁用扩容:配置selectPolicy
的值为Disabled
时,禁用指定方向的扩容。例如:以下策略将会阻止 Pod 扩容。
behavior: scaleUp: selectPolicy: Disabled
禁用缩容:配置selectPolicy
的值为Disabled
时,禁用指定方向的缩容。例如:以下策略将会阻止 Pod 缩容。
behavior: scaleDown: selectPolicy: Disabled
为防止因短期的指标波动导致 Pod 过度频繁或不必要的扩缩容。您可以为扩缩容行为配置静默时间,系统完成扩缩容后,在静默时间内,不会再次执行扩缩容策略,避免工作负载副本数频繁变更造成系统震荡。
例如在以下示例中,当指标显示目标应该缩容时,自动扩缩算法会将过去 5 分钟的所有期望状态考虑在内,使用窗口期内的最大值。
behavior: scaleDown: stabilizationWindowSeconds: 300