自动扩展工作负载
在 Kubernetes 中,您可以根据当前的资源需求扩展工作负载。这使您的集群能够更具弹性和高效地响应资源需求的变化。
扩展工作负载时,您可以增加或减少工作负载管理的副本数量,或者调整副本可用的资源。
第一种方法被称为水平扩展,而第二种方法被称为垂直扩展。
根据您的用例,有手动和自动扩展工作负载的方法。
手动扩展工作负载
Kubernetes 支持手动扩展工作负载。水平扩展可以使用 kubectl
CLI 完成。对于垂直扩展,您需要修补工作负载的资源定义。
请参见下面两种策略的示例。
- 水平扩展:运行应用程序的多个实例
- 垂直扩展:调整分配给容器的 CPU 和内存资源
自动扩展工作负载
Kubernetes 还支持自动扩展工作负载,这是本页的重点。
Kubernetes 中的自动扩展概念是指自动更新管理一组 Pod 的对象(例如 部署)的能力。
水平扩展工作负载
在 Kubernetes 中,您可以使用HorizontalPodAutoscaler (HPA) 自动水平扩展工作负载。
它作为 Kubernetes API 资源和 控制器 实现,并定期调整工作负载中 副本 的数量以匹配观察到的资源利用率,例如 CPU 或内存使用率。
有一个分步教程,介绍了如何为 Deployment 配置 HorizontalPodAutoscaler。
垂直扩展工作负载
Kubernetes v1.25 [稳定]
您可以使用VerticalPodAutoscaler (VPA) 自动垂直扩展工作负载。与 HPA 不同,VPA 不是 Kubernetes 的默认组件,而是一个单独的项目,可以在 GitHub 上找到。
安装后,它允许您为工作负载创建 自定义资源定义 (CRD),这些 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 服务
- 了解有关 集群自动扩展 的信息