Module 03 · Managing Applications with Kubernetes
AutoscalingKubernetes 自动伸缩(Auto-scaling)
目标与定义
看完本视频,您将能够:
- 定义自动伸缩(Auto-scaling)。
- 解释三种类型的自动伸缩器。
- 演示每种自动伸缩器的工作原理。
自动伸缩的必要性
ReplicaSets 提供了伸缩的基础,但您不会总是希望运行固定数量的资源实例。Kubernetes 自动伸缩有助于:
- 根据需求自动伸缩集群,从而优化资源使用和降低成本。
- ReplicaSets 仅提供伸缩的起点,但您需要能够根据需要进行伸缩。
伸缩发生的层次
Kubernetes 自动伸缩在两个不同层次上实现:
- 集群/节点级别(Cluster or Node level)
- Pod 级别(Pod level)
三种自动伸缩器类型
Kubernetes 中提供三种自动伸缩器:
- 水平 Pod 自动伸缩器 (Horizontal Pod Autoscaler, HPA):调整 Pod 的数量。
- 垂直 Pod 自动伸缩器 (Vertical Pod Autoscaler, VPA):调整 Pod 的资源规格。
- 集群自动伸缩器 (Cluster Autoscaler, CA):调整节点的数量。
| 类型 | 缩写 | 调整对象 | 伸缩方式 | 目标 |
|---|---|---|---|---|
| Horizontal Pod Autoscaler | HPA | Pod 副本数 | ⬆️ 增加 或 ⬇️ 减少 Pod 数量 | 匹配需求 |
| Vertical Pod Autoscaler | VPA | 容器资源请求和限制 | ⬆️ 增加 或 ⬇️ 减少 资源大小/速度 | 匹配需求 |
| Cluster Autoscaler | CA | 节点数量 | ⬆️ 增加 或 ⬇️ 减少 节点数量 | 平衡负载 |
启用 Pod 自动伸缩(HPA)
autoscale命令的使用
要为 Deployment(它在后台仍使用 ReplicaSet)创建自动伸缩,您只需使用 autoscale 命令并指定所需属性:
min:最小 Pod 数量(例如:设置为 2)。max:最大 Pod 数量。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。
- 最佳解决方案:通常是通过结合所有三种自动伸缩器类型,以确保服务在峰值负载时稳定运行,并在需求较低时最大限度地降低成本。