自动扩展工作负载
在 Kubernetes 中,您可以根据当前的资源需求对工作负载进行*扩缩*。这使得您的集群能够更灵活、更高效地应对资源需求的变化。
当您扩缩工作负载时,您可以增加或减少工作负载管理的副本数量,或者调整副本可用的资源。
第一种方法称为*水平扩缩*,而第二种方法称为*垂直扩缩*。
根据您的用例,可以通过手动和自动的方式来扩缩您的工作负载。
手动扩缩工作负载
Kubernetes 支持*手动扩缩*工作负载。水平扩缩可以使用 kubectl
CLI 完成。对于垂直扩缩,您需要*修补*工作负载的资源定义。
有关这两种策略的示例,请参见下文。
- **水平扩缩**:运行应用程序的多个实例
- **垂直扩缩**:调整分配给容器的 CPU 和内存资源的大小
自动扩缩工作负载
Kubernetes 还支持*自动扩缩*工作负载,这也是本页的重点。
Kubernetes 中的*自动扩缩*概念是指自动更新管理一组 Pod 的对象的能力(例如 Deployment)。
水平扩缩工作负载
在 Kubernetes 中,您可以使用*HorizontalPodAutoscaler* (HPA) 自动水平扩缩工作负载。
它作为 Kubernetes API 资源和 控制器 实现,并定期调整工作负载中 副本 的数量,以匹配观察到的资源利用率,例如 CPU 或内存使用率。
有一个关于为 Deployment 配置 HorizontalPodAutoscaler 的演练教程。
垂直扩缩工作负载
Kubernetes v1.25 [稳定]
您可以使用*VerticalPodAutoscaler* (VPA) 自动垂直扩缩工作负载。与 HPA 不同,VPA 默认不随 Kubernetes 提供,而是一个单独的项目,可以在 GitHub 上找到。
安装后,它允许您为您的工作负载创建 CustomResourceDefinitions (CRD),这些定义定义了*如何*以及*何时*扩缩托管副本的资源。
注意
您需要在您的集群中安装 Metrics Server 才能使 HPA 工作。目前,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
扩缩器允许您定义用于扩缩或缩减工作负载的计划(和时区)。
扩缩集群基础设施
如果扩缩工作负载不足以满足您的需求,您还可以扩缩集群基础设施本身。
扩缩集群基础设施通常意味着添加或删除 节点。有关更多信息,请阅读集群自动扩缩。
下一步
- 了解有关水平扩缩的更多信息
- 就地调整容器资源大小
- 自动扩展集群中的 DNS 服务
- 了解有关集群自动扩缩的信息