工作负载自动扩缩

通过自动扩缩容,你可以以某种方式自动更新工作负载。这使得你的集群能够更弹性、更高效地应对资源需求的变更。

在 Kubernetes 中,你可以根据当前的资源需求来对工作负载进行扩缩容。这使得你的集群能够更弹性、更高效地应对资源需求的变更。

在对工作负载进行扩缩容时,你可以增加或减少工作负载管理的副本数量,或者原地调整分配给副本的资源。

第一种方法被称为水平扩缩容,第二种被称为垂直扩缩容

根据你的用例,可以通过手动或自动方式来对工作负载进行扩缩容。

手动扩缩容工作负载

Kubernetes 支持对工作负载进行手动扩缩容。水平扩缩容可以使用 kubectl CLI 来完成。对于垂直扩缩容,你需要对工作负载的资源定义进行修补(patch)

请参阅下文,了解这两种策略的示例。

自动扩缩容工作负载

Kubernetes 也支持对工作负载进行自动扩缩容,这也是本页的重点。

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

水平扩缩容工作负载

在 Kubernetes 中,你可以使用 HorizontalPodAutoscaler(HPA,水平 Pod 自动扩缩容)来自动对工作负载进行水平扩缩容。

它被实现为一个 Kubernetes API 资源和一个控制器,并根据观察到的资源利用率(例如 CPU 或内存使用量)周期性地调整工作负载中的副本数量。

有一个配置 Deployment 的 HorizontalPodAutoscaler 的操作教程

垂直扩缩容工作负载

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

你可以使用 VerticalPodAutoscaler (VPA,垂直 Pod 自动扩缩容) 来自动对工作负载进行垂直扩缩容。与 HPA 不同,VPA 默认不包含在 Kubernetes 中,而是一个独立的项目,可以在 GitHub 上找到。

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

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

VPA 的不同模式
模式描述
Auto目前是 Recreate。将来可能会更改为原地更新。
RecreateVPA 在创建 Pod 时分配资源请求,并通过驱逐现有 Pod 来更新其资源请求,如果请求的资源与新推荐值显著不同的话。
InitialVPA 只在创建 Pod 时分配资源请求,之后不再更改。
OffVPA 不会自动更改 Pod 的资源需求。推荐值会被计算出来,可以在 VPA 对象中进行查看。

Pod 原地垂直扩缩容

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

从 Kubernetes 1.33 开始,VPA 尚不支持原地调整 Pod 大小,但此集成正在开发中。要手动原地调整 Pod 大小,请参阅原地调整容器资源

基于集群规模的自动扩缩容

对于需要根据集群规模进行扩缩容的工作负载(例如 cluster-dns 或其他系统组件),你可以使用 Cluster Proportional Autoscaler(集群比例自动扩缩容器)。与 VPA 一样,它不是 Kubernetes 核心的一部分,而是作为独立项目托管在 GitHub 上。

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

如果副本数量应保持不变,你可以使用 Cluster Proportional Vertical Autoscaler(集群比例垂直自动扩缩容器)根据集群规模对工作负载进行垂直扩缩容。该项目目前处于 Beta 阶段,可以在 GitHub 上找到。

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

事件驱动自动扩缩容

也可以基于事件对工作负载进行扩缩容,例如使用 Kubernetes Event Driven Autoscaler (KEDA,Kubernetes 事件驱动自动扩缩容器)

KEDA 是一个 CNCF 毕业项目,它允许你根据要处理的事件数量来扩缩工作负载,例如队列中的消息数量。KEDA 为各种事件源提供了广泛的适配器可供选择。

基于日程的自动扩缩容

另一种扩缩容工作负载的策略是安排扩缩容操作,例如为了在非高峰时段减少资源消耗。

与事件驱动自动扩缩容类似,可以通过 KEDA 结合其 Cron scaler 来实现这种行为。Cron scaler 允许你定义扩缩容工作负载的日程(和时区)。

扩缩容集群基础设施

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

扩缩容集群基础设施通常意味着添加或移除节点。阅读节点自动扩缩容了解更多信息。

下一步

最后修改于 2025 年 4 月 7 日太平洋标准时间上午 9:46:为 v1.33 beta 更新 InPlacePodVerticalScaling 文档 (#50290) (c014f72fbb)