Coursera 笔记

Module 03 · Managing Applications with Kubernetes

AutoscalingKubernetes 自动伸缩(Auto-scaling)

Coursera ↗

目标与定义

看完本视频,您将能够:

  • 定义自动伸缩(Auto-scaling)。
  • 解释三种类型的自动伸缩器。
  • 演示每种自动伸缩器的工作原理。

自动伸缩的必要性

ReplicaSets 提供了伸缩的基础,但您不会总是希望运行固定数量的资源实例。Kubernetes 自动伸缩有助于:

  • 根据需求自动伸缩集群,从而优化资源使用和降低成本。
  • ReplicaSets 仅提供伸缩的起点,但您需要能够根据需要进行伸缩。

伸缩发生的层次

Kubernetes 自动伸缩在两个不同层次上实现:

  1. 集群/节点级别(Cluster or Node level)
  2. Pod 级别(Pod level)

三种自动伸缩器类型

Kubernetes 中提供三种自动伸缩器:

  1. 水平 Pod 自动伸缩器 (Horizontal Pod Autoscaler, HPA):调整 Pod 的数量。
  2. 垂直 Pod 自动伸缩器 (Vertical Pod Autoscaler, VPA):调整 Pod 的资源规格。
  3. 集群自动伸缩器 (Cluster Autoscaler, CA):调整节点的数量。
类型 缩写 调整对象 伸缩方式 目标
Horizontal Pod Autoscaler HPA Pod 副本数 ⬆️ 增加 或 ⬇️ 减少 Pod 数量 匹配需求
Vertical Pod Autoscaler VPA 容器资源请求和限制 ⬆️ 增加 或 ⬇️ 减少 资源大小/速度 匹配需求
Cluster Autoscaler CA 节点数量 ⬆️ 增加 或 ⬇️ 减少 节点数量 平衡负载

启用 Pod 自动伸缩(HPA)

 autoscale命令的使用

要为 Deployment(它在后台仍使用 ReplicaSet)创建自动伸缩,您只需使用 autoscale 命令并指定所需属性:

  1. min:最小 Pod 数量(例如:设置为 2)。
  2. max:最大 Pod 数量。
  3. cpu-percent:作为触发器。当 CPU 使用率达到指定百分比(例如:50%)时,系统会创建一个新 Pod。
  • 在后台,Deployment 仍然使用 ReplicaSet 来进行扩展和收缩。
  • ReplicaSet 中的副本数量会根据 autoscale 命令中指定的最小数量进行更改(例如:变为 2 个副本)。

HPA YAML 对象创建 (可选)

另一种启用自动伸缩的方法是手动为 HPA 对象创建 YAML 文件。

  • 您可以设置 min 和 max 数量。
  • cpu-percent 标志在 YAML 中显示为 targetCPUUtilizationPercentage。
  • 最佳实践:应使用 autoscale 命令,而不是从头创建 HPA YAML 文件。

1 HPA: 水平伸缩 (Scaling Out)

原理

HPA 通过水平伸缩(Horizontal Scaling 或 Scaling Out)来匹配需求。它会自动增加或减少运行中的 Pod 数量,以适应应用程序使用量的变化。

  • HPA 使用集群操作符(cluster operator),设置 CPU 或内存利用率等指标的目标值,以及最小和最大期望副本数量。
  • 它自动更新 Deployment 等工作负载资源。

示例演示

时间 负载情况 HPA 动作 结果
清晨 负载低 保持 1 个 Pod 足够
上午 11 点 达到峰值负载 自动伸缩工作负载资源 达到 3 个 Pod
下午 使用量下降 将第 3 个 Pod 标记为删除并移除 2 个 Pod
下午 5 点 使用量进一步降低 将另一个 Pod 标记为删除并移除 1 个 Pod


2 VPA: 垂直伸缩 (Scaling Up)

原理

VPA 允许您在集群内垂直伸缩服务(Scaling Up),即为现有机器添加更多资源。

  • VPA 通过增加或减少 Pod 的资源请求和限制来调整资源规格。
  • 集群操作符设置 CPU 或内存利用率等指标的目标值,类似于 HPA。
  • 集群根据服务的当前使用情况和期望目标来协调 Pod 的大小。

示例演示

时间 负载情况 VPA 动作 结果
清晨 负载低 保持 Pod 使用的系统资源量低
上午 11 点 达到峰值负载 自动伸缩 Pod 增加 CPU 和内存等系统资源
下午 使用量下降 自动伸缩 Pod 减少系统资源使用
下午 5 点 使用量进一步降低 自动伸缩 Pod 进一步减少到清晨 7 点水平

⚠️ 重要提示:在基于 CPU 或内存等资源指标上,不应将 VPA 与 HPA 同时使用。但在自定义或外部指标上,它们可以一起使用。


3 CA: 集群伸缩

原理

CA 自动伸缩的是集群本身,增加或减少 Pod 可以运行的可用节点数量 .

  • Pods 使用 HPA 或 VPA 进行自动伸缩。
  • 当节点本身因 Pod 过载时,CA 会自动伸缩节点,以便 Pod 可以在集群中重新平衡。
  • CA 确保始终有足够的计算能力来运行任务,并且您不会为未使用的节点支付额外费用。

示例演示

时间 负载情况 CA 动作 结果
清晨 负载低 保持 现有节点可以处理负载
新 Pod 请求 需求增加 CA 自动伸缩集群 添加一个新节点和 Pod 以满足需求
上午 11 点 达到峰值负载 保持 新节点达到满容量
下午 使用量下降 删除未使用的 Pod Pod 被移除
下午 5 点 使用量进一步降低 删除新节点上的所有 Pod 节点本身被标记并移除

适用场景

CA 的适用场景包括:

  • 夜间和周末,开发或持续集成(CI)测试负载较少。
  • 批处理作业完成,下一批作业尚未开始。

结论与最佳实践

  • 自动伸缩能够根据需要在集群/节点级别和 Pod 级别进行伸缩。
  • 您可以自动伸缩 Deployment 或 ReplicaSet。
  • 自动伸缩器类型包括:HPA、VPA 和 CA。
  • 最佳解决方案:通常是通过结合所有三种自动伸缩器类型,以确保服务在峰值负载时稳定运行,并在需求较低时最大限度地降低成本。