自动扩缩工作负载

通过自动扩缩,你可以用某种方式自动更新你的工作负载。在面对资源需求变化的时候可以使你的集群更灵活、更高效。

在 Kubernetes 中,你可以根据当前的资源需求扩缩工作负载。 这让你的集群可以更灵活、更高效地面对资源需求的变化。

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

第一种手段称为水平扩缩,第二种称为垂直扩缩

扩缩工作负载有手动和自动两种方式,这取决于你的使用情况。

手动扩缩工作负载

Kubernetes 支持工作负载的手动扩缩。水平扩缩可以使用 kubectl 命令行工具完成。 对于垂直扩缩,你需要更新工作负载的资源定义。

这两种策略的示例见下文。

自动扩缩工作负载

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

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

水平扩缩工作负载

在 Kubernetes 中,你可以使用 HorizontalPodAutoscaler (HPA) 实现工作负载的自动水平扩缩。

它以 Kubernetes API 资源和控制器的方式实现, 并定期调整工作负载中副本的数量 以满足设置的资源利用率,如 CPU 或内存利用率。

这是一个为 Deployment 部署配置 HorizontalPodAutoscaler 的示例教程

垂直扩缩工作负载

特性状态: Kubernetes v1.25 [stable]

你可以使用 VerticalPodAutoscaler (VPA) 实现工作负载的垂直扩缩。 不同于 HPA,VPA 并非默认来源于 Kubernetes,而是一个独立的项目, 参见 on GitHub

安装后,你可以为工作负载创建 CustomResourceDefinitions(CRDs), 定义如何以及何时扩缩被管理副本的资源。

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

VPA 的不同模式
模式 描述
Auto 目前是 Recreate,未来可能会变更为就地更新(in-place updates)
Recreate VPA 会在创建 Pod 时分配资源请求,并且当请求的资源与新的建议值区别很大时通过驱逐 Pod 的方式来更新现存的 Pod
Initial VPA 只有在创建时分配资源请求,之后不做更改
Off VPA 不会自动更改 Pod 的资源需求,建议值仍会计算并可在 VPA 对象中查看

就地 Pod 垂直扩缩容

特性状态: Kubernetes v1.33 [beta] (enabled by default: 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) 则根据集群中的节点数和 / 或 CPU 核心数, 调整工作负载(例如 Deployment 或 DaemonSet)的资源请求值。

事件驱动型自动扩缩

通过事件驱动实现工作负载的扩缩也是可行的, 例如使用 Kubernetes Event Driven Autoscaler (KEDA)

KEDA 是 CNCF 的毕业项目,能让你根据要处理事件的数量对工作负载进行扩缩,例如队列中消息的数量。 有多种针对不同事件源的适配可供选择。

根据计划自动扩缩

扩缩工作负载的另一种策略是计划进行扩缩,例如在非高峰时段减少资源消耗。

与事件驱动自动扩缩容类似, 这种行为可以使用 KEDA 和 Cron scaler 实现。 Cron 扩缩器允许你根据预设的时间表(以及时区)对工作负载进行扩容或缩容。

扩缩集群基础设施

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

扩缩集群基础设施通常是指增加或移除节点

阅读节点自动扩缩了解更多信息。

接下来

最后修改 April 30, 2025 at 8:54 AM PST: [zh-cn] sync apiserver-aggregation.md and autoscaling.md (e6252d8b72)