工作负载自动扩缩
在 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 上找到。
安装后,它允许你为你的工作负载创建自定义资源定义(CRD),这些 CRD 定义了 _如何_ 和 _何时_ 缩放托管副本的资源。
注意
你需要将指标服务器安装到你的集群中,以便 HPA 工作。目前,VPA 可以以四种不同的模式运行
模式 | 描述 |
---|---|
自动 | 目前,Recreate 未来可能会更改为就地更新 |
重新创建 | VPA 在 Pod 创建时分配资源请求,并在现有 Pod 上更新它们,当请求的资源与新的建议有很大差异时,会驱逐它们 |
初始 | VPA 仅在 Pod 创建时分配资源请求,之后永远不会更改它们。 |
关闭 | VPA 不会自动更改 Pod 的资源需求。计算出建议,并可以在 VPA 对象中检查。 |
就地调整大小的要求
Kubernetes v1.27 [alpha]
(默认禁用: false)**不**重启Pod 或其容器的情况下就地调整工作负载的大小,需要 Kubernetes 版本 1.27 或更高版本。此外,需要启用 InPlaceVerticalScaling
特性门控。
InPlacePodVerticalScaling
: 启用就地 Pod 垂直缩放。
基于集群大小的自动缩放
对于需要根据集群大小缩放的工作负载(例如 cluster-dns
或其他系统组件),你可以使用 _集群比例自动缩放器_。就像 VPA 一样,它不是 Kubernetes 核心的一部分,而是在 GitHub 上作为自己的项目托管。
集群比例自动缩放器监视可调度的节点和核心的数量,并相应地缩放目标工作负载的副本数量。
如果副本的数量应该保持不变,你可以使用_集群比例垂直自动缩放器_根据集群大小垂直缩放你的工作负载。该项目**目前处于测试阶段**,可以在 GitHub 上找到。
当集群比例自动缩放器缩放工作负载的副本数量时,集群比例垂直自动缩放器会根据集群中的节点和/或核心数量调整工作负载(例如 Deployment 或 DaemonSet)的资源请求。
事件驱动的自动缩放
也可以基于事件缩放工作负载,例如使用 _Kubernetes 事件驱动的自动缩放器_ (KEDA)。
KEDA 是一个 CNCF 毕业项目,使你能够根据要处理的事件数量来缩放你的工作负载,例如队列中的消息数量。有多种适配器可供选择用于不同的事件源。
基于计划的自动缩放
缩放工作负载的另一种策略是**计划**缩放操作,例如为了在非高峰时段减少资源消耗。
与事件驱动的自动缩放类似,可以使用 KEDA 及其 Cron
缩放器来实现这种行为。Cron
缩放器允许你定义缩放工作负载的计划(和时区)。
缩放集群基础设施
如果缩放工作负载不足以满足你的需求,你还可以缩放集群基础设施本身。
缩放集群基础设施通常意味着添加或删除节点。阅读集群自动缩放以获取更多信息。