1. HPA 基础概念:定义、工作原理与核心地位

HPA(Horizontal Pod Autoscaler)是 Kubernetes 内置的弹性伸缩控制器,它根据工作负载的实时指标(如 CPU、内存或自定义指标)自动调整工作负载(Deployment、StatefulSet 等)的 Pod 副本数量。HPA 是 Kubernetes 弹性伸缩体系中最核心、最常用的组件,也是生产环境应对流量波动的第一道防线。

1.1 HPA 的定义与核心作用

维度 说明
全称 Horizontal Pod Autoscaler(水平 Pod 自动伸缩器)
所属层级 Kubernetes 控制面组件,属于 autoscaling API 组
核心作用 根据观测到的指标(Metrics)动态调整 Pod 副本数,使实际负载与目标资源利用率匹配
伸缩方向 水平伸缩(增加/减少 Pod 数量),而非垂直伸缩(调整 Pod 资源大小)
适用对象 Deployment、StatefulSet、ReplicaSet 等支持 scale 子资源的控制器
关键认知:HPA 不直接管理 Pod,而是通过修改工作负载的 replicas 字段来触发控制器(如 Deployment Controller)执行实际的扩缩容操作。HPA 只负责“决策”,不负责“执行”。

1.2 HPA 工作原理(核心流程)

HPA 以控制循环(Control Loop)方式运行,默认每 15 秒(--horizontal-pod-autoscaler-sync-period)执行一次以下流程:

  1. 采集指标:HPA 通过 Metrics Server(或自定义指标 API)获取目标工作负载当前的平均指标值。
  2. 计算期望副本数:使用公式 期望副本数 = ceil(当前副本数 × (当前指标值 / 目标指标值))。
  3. 决策与限速:对比期望副本数与当前副本数,应用冷却窗口(Cooldown)和缩放策略,决定是否执行伸缩。
  4. 更新工作负载:调用 Kubernetes API 修改工作负载的 replicas 字段。
  5. 等待下一周期:进入下一个控制循环,重复上述步骤。
公式解读:当 当前指标值 / 目标指标值 > 1 时,期望副本数增加(扩容);当比值 < 1 时,期望副本数减少(缩容)。HPA 会向上取整,确保至少增加 1 个 Pod。
HPA 控制循环流程图 HPA 控制循环流程图 Metrics Server HPA Controller 计算期望副本数 Kubernetes API 下一周期 默认每 15 秒执行一次控制循环,冷却窗口(Cooldown)防止频繁伸缩

1.3 HPA 在 Kubernetes 弹性伸缩中的核心地位

Kubernetes 弹性伸缩体系包含三个层次:水平 Pod 伸缩(HPA)、垂直 Pod 伸缩(VPA)和集群节点伸缩(Cluster Autoscaler)。HPA 处于最核心、最常用的位置,原因如下:

伸缩类型 作用对象 典型场景 生产使用率
HPA(水平 Pod 伸缩) Pod 副本数 应对流量突发、日常负载波动 极高(90%+ 集群启用)
VPA(垂直 Pod 伸缩) Pod 资源请求/限制 资源规格优化、避免 OOM 中等(需配合 HPA 谨慎使用)
Cluster Autoscaler 集群节点数 资源不足时自动扩容节点 较高(大型集群必备)
生产注意事项:HPA 与 VPA 在默认配置下存在冲突——VPA 调整 Pod 资源规格后,HPA 基于资源利用率计算的期望副本数可能产生震荡。生产环境通常建议:HPA 为主,VPA 为辅,或使用 VPA 的 Initial 模式仅启动时调整。

1.4 HPA 的指标来源与类型

HPA 支持三种指标来源,覆盖从基础资源到业务自定义的全场景:

  • 资源指标(Resource Metrics):由 Metrics Server 提供,包括 CPU 使用率、内存使用率。这是最常用、最基础的指标类型。
  • 自定义指标(Custom Metrics):通过 Prometheus Adapter、Datadog Cluster Agent 等适配器,将业务指标(如 QPS、请求延迟、队列深度)暴露给 HPA。
  • 外部指标(External Metrics):从集群外部系统(如云服务商负载均衡器、消息队列)获取指标,适用于跨集群或混合云场景。
HPA 指标来源架构图 HPA 指标来源架构图 HPA Controller Metrics Server 资源指标 Prometheus Adapter 自定义指标 云服务商 API 外部指标 三种指标可同时配置,HPA 会取所有指标中计算出的最大期望副本数作为最终决策 生产环境推荐:资源指标(基础保障)+ 自定义指标(业务感知)组合使用

1.5 HPA 的版本演进与选择建议

API 版本 Kubernetes 版本 核心特性 生产推荐
autoscaling/v1 ≥ 1.0 仅支持 CPU 指标 不推荐(功能过于基础)
autoscaling/v2beta2 ≥ 1.12 支持多指标、自定义指标、行为配置 过渡版本
autoscaling/v2 ≥ 1.23(稳定版) 完整支持多指标、自定义指标、behavior 策略 强烈推荐
最佳实践:新集群统一使用 autoscaling/v2 API 版本。它提供了 behavior 字段,允许精细控制扩容/缩容的速率、冷却窗口和策略,是生产环境调优的基础。

1.6 本章小结