自动扩缩工作负载

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

在 Kubernetes 中,你可以根据当前的资源需求对工作负载进行扩缩容(Scaling)。这使你的集群能够更灵活、更高效地响应资源需求的变化。

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

第一种方法称为横向扩缩容(Horizontal Scaling),第二种方法称为纵向扩缩容(Vertical Scaling)

根据你的使用场景,有手动和自动两种方式来扩缩容你的工作负载。

手动扩缩容工作负载

Kubernetes 支持工作负载的手动扩缩容。横向扩缩容可以使用 kubectl CLI 完成。对于纵向扩缩容,你需要修补(patch)工作负载的资源定义。

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

自动扩缩容工作负载

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

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

横向扩缩容工作负载

在 Kubernetes 中,你可以使用 HorizontalPodAutoscaler (HPA) 自动横向扩缩容工作负载。

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

这里有一个为 Deployment 配置 HorizontalPodAutoscaler 的分步教程

纵向扩缩容工作负载

功能状态: Kubernetes v1.25 [稳定]

你可以使用 VerticalPodAutoscaler (VPA) 自动纵向扩缩容工作负载。与 HPA 不同,VPA 默认不随 Kubernetes 一起提供,它是一个插件,你或集群管理员可能需要在能够使用它之前进行部署。

一旦安装,它允许你为工作负载创建自定义资源定义(CRDs),用于定义如何以及何时扩缩容受管副本的资源。

说明

你需要将 Metrics Server 安装到你的集群中,VPA 才能工作。

Pod 就地纵向扩缩容

特性状态: Kubernetes v1.35 [稳定](默认启用)

截至 Kubernetes 1.36,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)

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

基于计划的自动扩缩容

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

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

扩缩容集群基础设施

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

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

接下来


最后修改于 2025 年 11 月 23 日下午 1:47 (PST): 移动 HorizontalPodAutoscaler 概念页面 (57e1fdd7f9)