1. HPA 基础概念
1.1 什么是 HPA
Horizontal Pod Autoscaler(HPA)是 Kubernetes 内置的弹性扩缩容控制器,它根据工作负载的实时资源使用率(如 CPU、内存)或自定义指标,自动调整 Deployment、StatefulSet 等 workload 的 Pod 副本数。HPA 是 Kubernetes 实现应用级弹性的核心机制,也是 SLO 校准中“容量与成本平衡”的关键组件。
核心定位:HPA 解决的是“水平扩展”问题——增加或减少 Pod 实例数量,而非提升单个 Pod 的资源规格(垂直扩展)。在微服务架构中,水平扩展是更推荐的方式。
1.2 HPA 工作原理
HPA 以控制循环(Control Loop)方式运行,默认每 15 秒(由 --horizontal-pod-autoscaler-sync-period 控制)执行一次以下流程:
- 采集指标:通过 Metrics Server 或自定义指标 API 获取目标 Pod 的当前资源使用数据。
- 计算期望副本数:根据当前指标值与目标值的比值,计算期望的 Pod 副本数。
- 更新 workload:调用 Kubernetes API 更新 Deployment/StatefulSet 的
replicas字段。 - 等待生效:等待 Pod 启动/终止完成,进入下一轮控制循环。
期望副本数计算公式:
desiredReplicas = ceil[currentReplicas × (currentMetricValue / desiredMetricValue)]
1.3 核心组件
| 组件 | 角色 | 关键说明 |
|---|---|---|
| Metrics Server | 资源指标采集器 | 从 Kubelet 的 cAdvisor 接口采集 Pod/Node 的 CPU、内存使用数据,通过 metrics.k8s.io API 暴露。默认不安装,需手动部署。 |
| Controller Manager | HPA 控制器运行载体 | Kubernetes 控制平面组件,内置 HPA Controller,负责执行控制循环、计算期望副本数、调用 API 更新 workload。 |
| Custom Metrics API | 自定义指标适配器 | 可选组件(如 Prometheus Adapter),用于接入业务指标(QPS、延迟等),扩展 HPA 的指标来源。 |
注意:Metrics Server 仅支持 CPU 和内存的平均值指标。若需要基于 P99 延迟、请求速率等业务指标做弹性,必须部署自定义指标适配器(如 Prometheus Adapter、KEDA)。
1.4 HPA 与手动扩缩容对比
手动扩缩容(kubectl scale)是运维人员根据经验或监控告警,手动调整副本数。HPA 则实现了自动化、指标驱动的弹性决策。两者对比如下:
| 对比维度 | 手动扩缩容 | HPA 自动扩缩容 |
|---|---|---|
| 决策依据 | 人工经验、监控告警 | 实时指标数据(CPU/Memory/自定义) |
| 响应速度 | 分钟级(人工发现 + 操作) | 秒级(控制循环 15s) |
| 准确性 | 依赖个人经验,容易过度/不足 | 基于指标比值计算,精确可预测 |
| 运维成本 | 7×24 人工值守,容易疲劳 | 声明式配置,自动化运行 |
| 适用场景 | 临时扩容、紧急故障恢复 | 日常弹性、SLO 驱动的容量管理 |
| 与 SLO 关系 | 无法与 SLO 直接联动 | 可基于 SLO 指标(如错误率、延迟)驱动扩缩容 |
1.5 一个简单的 HPA 配置示例
以下 YAML 定义了一个基于 CPU 使用率的 HPA,目标 Pod 副本数范围 2~10,当 CPU 平均使用率超过 80% 时触发扩容:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
关键字段说明:
scaleTargetRef:指定要扩缩容的 workload 对象(Deployment/StatefulSet)。minReplicas / maxReplicas:副本数上下限,防止无限扩缩。metrics[].target.averageUtilization:目标利用率,HPA 会尽力维持 Pod 平均 CPU 在此值附近。
1.6 本章小结
- HPA 是 Kubernetes 原生的水平 Pod 自动扩缩容机制,基于控制循环实现。
- 核心组件包括 Metrics Server(指标采集)和 Controller Manager(控制器运行)。
- 与手动扩缩容相比,HPA 具备自动化、指标驱动、秒级响应的优势,是 SLO 校准中实现容量弹性的关键基础设施。
- HPA 默认仅支持 CPU/Memory 指标,生产环境常需配合自定义指标适配器(如 Prometheus Adapter)来接入业务 SLO 指标。