工作负载自动扩缩

通过自动缩放,你可以以一种或另一种方式自动更新你的工作负载。这使你的集群能够对资源需求的更改做出更弹性、更高效的反应。

在 Kubernetes 中,你可以根据当前的资源需求**缩放**工作负载。这使你的集群能够对资源需求的更改做出更弹性、更高效的反应。

当你缩放工作负载时,你可以增加或减少由工作负载管理的副本数量,或者调整副本可用的资源。

第一种方法被称为**水平缩放**,而第二种方法被称为**垂直缩放**。

根据你的用例,有手动和自动的方式来缩放你的工作负载。

手动缩放工作负载

Kubernetes 支持工作负载的**手动缩放**。可以使用 kubectl CLI 进行水平缩放。对于垂直缩放,你需要**修补**工作负载的资源定义。

请参阅下面的两个策略的示例。

自动缩放工作负载

Kubernetes 还支持工作负载的**自动缩放**,这是本页的重点。

Kubernetes 中的**自动缩放**概念指的是自动更新管理一组 Pod 的对象(例如Deployment)的能力。

水平缩放工作负载

在 Kubernetes 中,你可以使用 **HorizontalPodAutoscaler** (HPA) 自动水平缩放工作负载。

它被实现为 Kubernetes API 资源和一个控制器,并定期调整工作负载中的副本数量,以匹配观察到的资源利用率,如 CPU 或内存使用率。

有一个配置 Deployment 的 HorizontalPodAutoscaler 的演练教程

垂直缩放工作负载

特性状态: Kubernetes v1.25 [稳定]

你可以使用 **VerticalPodAutoscaler** (VPA) 自动垂直缩放工作负载。与 HPA 不同,VPA 默认情况下不随 Kubernetes 一起提供,而是一个单独的项目,可以在 GitHub 上找到。

安装后,它允许你为你的工作负载创建自定义资源定义(CRD),这些 CRD 定义了 _如何_ 和 _何时_ 缩放托管副本的资源。

目前,VPA 可以以四种不同的模式运行

VPA 的不同模式
模式描述
自动目前,Recreate 未来可能会更改为就地更新
重新创建VPA 在 Pod 创建时分配资源请求,并在现有 Pod 上更新它们,当请求的资源与新的建议有很大差异时,会驱逐它们
初始VPA 仅在 Pod 创建时分配资源请求,之后永远不会更改它们。
关闭VPA 不会自动更改 Pod 的资源需求。计算出建议,并可以在 VPA 对象中检查。

就地调整大小的要求

特性状态: Kubernetes v1.27 [alpha] (默认禁用: false)

**不**重启Pod 或其容器的情况下就地调整工作负载的大小,需要 Kubernetes 版本 1.27 或更高版本。此外,需要启用 InPlaceVerticalScaling 特性门控。

InPlacePodVerticalScaling: 启用就地 Pod 垂直缩放。

基于集群大小的自动缩放

对于需要根据集群大小缩放的工作负载(例如 cluster-dns 或其他系统组件),你可以使用 _集群比例自动缩放器_。就像 VPA 一样,它不是 Kubernetes 核心的一部分,而是在 GitHub 上作为自己的项目托管。

集群比例自动缩放器监视可调度的节点和核心的数量,并相应地缩放目标工作负载的副本数量。

如果副本的数量应该保持不变,你可以使用_集群比例垂直自动缩放器_根据集群大小垂直缩放你的工作负载。该项目**目前处于测试阶段**,可以在 GitHub 上找到。

当集群比例自动缩放器缩放工作负载的副本数量时,集群比例垂直自动缩放器会根据集群中的节点和/或核心数量调整工作负载(例如 Deployment 或 DaemonSet)的资源请求。

事件驱动的自动缩放

也可以基于事件缩放工作负载,例如使用 _Kubernetes 事件驱动的自动缩放器_ (KEDA)

KEDA 是一个 CNCF 毕业项目,使你能够根据要处理的事件数量来缩放你的工作负载,例如队列中的消息数量。有多种适配器可供选择用于不同的事件源。

基于计划的自动缩放

缩放工作负载的另一种策略是**计划**缩放操作,例如为了在非高峰时段减少资源消耗。

与事件驱动的自动缩放类似,可以使用 KEDA 及其 Cron 缩放器来实现这种行为。Cron 缩放器允许你定义缩放工作负载的计划(和时区)。

缩放集群基础设施

如果缩放工作负载不足以满足你的需求,你还可以缩放集群基础设施本身。

缩放集群基础设施通常意味着添加或删除节点。阅读集群自动缩放以获取更多信息。

下一步

上次修改时间:2024 年 10 月 22 日下午 12:25 PST:Pod 原位调整大小 Beta 版 (6c3808ec10)