Kubernetes v1.33:HorizontalPodAutoscaler 可配置容差
这篇文章描述了水平 Pod 自动扩缩的可配置容差, 这是在 Kubernetes 1.33 中首次出现的一个新的 Alpha 特性。
它是什么?
水平 Pod 自动扩缩 是 Kubernetes 中一个众所周知的特性,它允许你的工作负载根据资源利用率自动增减副本数量。
假设你在 Kubernetes 集群中运行了一个具有 50 个副本的 Web 应用程序。 你配置了 Horizontal Pod Autoscaler (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
[特性门控][/zh-cn/docs/reference/command-line-tools-reference/feature-gates/]后,
你可以为你的 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 以获得特性毕业的通知。