自动扩缩工作负载

通过自动扩缩,你可以通过一种或多种方式自动更新工作负载。这使得你的集群能够更灵活、高效地应对资源需求的变化。

在 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),这些定义了**如何**以及**何时**扩缩所管理副本的资源。

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

VPA 的不同模式
模式描述
Auto (自动)目前为 `Recreate`。未来可能会改为原地更新。
Recreate (重建)VPA 在 Pod 创建时分配资源请求,并通过在请求的资源与新建议显著不同时驱逐现有 Pod 来更新它们。
Initial (初始)VPA 只在 Pod 创建时分配资源请求,之后永不更改。
Off (关闭)VPA 不会自动更改 Pod 的资源需求。建议值会被计算并可在 VPA 对象中查看。

Pod 原地垂直扩缩

功能状态: Kubernetes v1.33 [beta] (默认启用:true)

从 Kubernetes 1.34 开始,VPA 不支持原地调整 Pod 大小,但目前正在进行此集成工作。要手动原地调整 Pod 大小,请参阅原地调整容器资源大小

基于集群大小的自动扩缩

对于需要根据集群大小扩缩的工作负载(例如 `cluster-dns` 或其他系统组件),你可以使用 **Cluster Proportional Autoscaler**。与 VPA 一样,它不属于 Kubernetes 核心,而是作为其自己的项目托管在 GitHub 上。

Cluster Proportional Autoscaler 监视可调度的节点和核心数量,并相应地扩缩目标工作负载的副本数量。

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

虽然 Cluster Proportional Autoscaler 扩缩工作负载的副本数量,但 Cluster Proportional Vertical Autoscaler 会根据集群中的节点和/或核心数量调整工作负载(例如 Deployment 或 DaemonSet)的资源请求。

事件驱动的自动扩缩

还可以基于事件扩缩工作负载,例如使用 **Kubernetes Event Driven Autoscaler** (KEDA)

KEDA 是一个 CNCF 毕业项目,它使你能够根据要处理的事件数量(例如队列中的消息数量)扩缩你的工作负载。有各种各样的适配器可供选择,以适应不同的事件源。

基于调度计划的自动扩缩

另一种扩缩工作负载的策略是**调度**扩缩操作,例如在非高峰时段减少资源消耗。

类似于事件驱动的自动扩缩,这种行为可以通过 KEDA 及其 `Cron` 扩缩器 来实现。`Cron` 扩缩器允许你定义扩缩工作负载(或缩小)的调度计划(和时区)。

扩缩集群基础设施

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

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

下一步

上次修改时间:2025 年 4 月 7 日上午 9:46 (PST):更新 v1.33 beta 的 InPlacePodVerticalScaling 文档 (#50290) (c014f72fbb)