自动扩展工作负载

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

在 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 上找到。

安装后,它允许您为您的工作负载创建 CustomResourceDefinitions (CRD),这些定义定义了*如何*以及*何时*扩缩托管副本的资源。

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

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

就地调整大小的要求

功能状态: Kubernetes v1.27 [alpha]

就地调整工作负载的大小而*无需*重新启动 Pod 或其 容器 需要 Kubernetes 1.27 或更高版本。此外,需要启用 InPlaceVerticalScaling 功能门。

InPlacePodVerticalScaling:启用就地 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 扩缩器允许您定义用于扩缩或缩减工作负载的计划(和时区)。

扩缩集群基础设施

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

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

下一步

上次修改时间:2024 年 2 月 18 日下午 2:59 PST:添加有关集群自动扩缩的概念页面 (b39e01b971)