Kubernetes v1.33:HorizontalPodAutoscaler 可配置容忍度
本文介绍**HorizontalPodAutoscaler 的可配置容忍度**,这是 Kubernetes 1.33 中首次推出的一个 Alpha 特性。
这是什么?
Horizontal Pod Autoscaling 是 Kubernetes 一个著名的特性,它允许你的工作负载根据资源利用率,通过增加或减少副本数来自动调整大小。
假设你在一个 Kubernetes 集群中运行一个有 50 个副本的 Web 应用。你配置了 HorizontalPodAutoscaler (HPA) 以根据 CPU 利用率进行扩缩容,目标利用率为 75%。现在,假设所有副本的当前 CPU 利用率为 90%,高于期望的 75%。HPA 将使用以下公式计算所需的副本数:
在本例中
因此,HPA 会将副本数从 50 增加到 60,以减少每个 Pod 上的负载。同样,如果 CPU 利用率降至 75% 以下,HPA 将相应地减少副本数。Kubernetes 文档提供了扩缩容算法的详细描述。
为了避免在出现微小指标波动时创建或删除副本,Kubernetes 应用了一种滞后机制:只有当当前和期望的指标值差异超过 10% 时,它才会更改副本数。在上面的例子中,由于当前和期望指标值之间的比率为 \(90/75\),即比目标高出 20%,超过了 10% 的容忍度,因此扩容操作将继续进行。
这个 10% 的默认容忍度是集群范围的;在旧的 Kubernetes 版本中,它无法进行微调。这个值适用于大多数使用场景,但对于大型部署来说太粗略了,因为 10% 的容忍度可能代表几十个 Pod。因此,社区长期以来一直要求能够调整这个值。
在 Kubernetes v1.33 中,这现在成为可能。
我该如何使用它?
在你的 Kubernetes v1.33 集群中启用 `HPAConfigurableTolerance` 特性门控后,你可以为你的 HorizontalPodAutoscaler 对象添加所需的容忍度。
容忍度出现在 `spec.behavior.scaleDown` 和 `spec.behavior.scaleUp` 字段下,因此扩容和缩容可以有不同的容忍度。一个典型的用法是为扩容指定一个较小的容忍度(以快速响应峰值),但为缩容指定一个较高的容忍度(以避免因小的指标波动而过于频繁地添加和删除副本)。
例如,一个缩容容忍度为 5%、扩容无容忍度的 HPA 将如下所示:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app
spec:
...
behavior:
scaleDown:
tolerance: 0.05
scaleUp:
tolerance: 0
我想要所有细节!
通过阅读 KEP-4951 获取所有技术细节,并关注 issue 4951 以获得该特性毕业的通知。