1. 课程导论:HPA工作原理、Prometheus在HPA中的角色、常见故障模式概述

1.1 水平Pod自动伸缩(HPA)工作原理

HPA(Horizontal Pod Autoscaler)是Kubernetes内置的弹性伸缩控制器,其核心逻辑基于控制循环模型。HPA控制器定期(默认每15秒)查询目标资源指标,计算期望副本数,并调整工作负载的副本数量。

HPA的工作流程可概括为以下步骤:

  1. 指标采集:HPA通过metrics.k8s.io API(Resource Metrics)或custom.metrics.k8s.io/external.metrics.k8s.io API(Custom/External Metrics)获取Pod或对象的当前指标值。
  2. 期望副本计算:使用公式 期望副本数 = ceil(当前副本数 × (当前指标值 / 目标指标值))。
  3. 决策与执行:比较期望副本数与当前副本数,若差异超过容忍阈值(默认0.1),则通过Scale API更新Deployment/StatefulSet的副本数。
  4. 冷却与回退:内置--horizontal-pod-autoscaler-downscale-stabilization(默认5分钟)和--horizontal-pod-autoscaler-upscale-delay(默认3分钟)防止抖动。
关键公式:
desiredReplicas = ceil[currentReplicas × (currentMetricValue / desiredMetricValue)]

1.2 Prometheus在HPA中的角色

原生HPA仅支持CPU/内存等Resource Metrics。当需要基于自定义业务指标(如QPS、请求延迟、队列深度)或外部指标(如消息队列积压数)进行伸缩时,必须引入Prometheus生态。Prometheus在HPA架构中扮演指标生产者和适配器桥梁的双重角色。

典型架构组件如下:

组件 角色 说明
Prometheus Server 指标采集与存储 从应用、中间件、Kubernetes组件拉取指标,提供PromQL查询能力
Prometheus Adapter 指标转换与暴露 将Prometheus中的指标转换为Kubernetes Custom/External Metrics API格式
Kubernetes API Server 指标API聚合 将Adapter注册的API聚合到custom.metrics.k8s.io或external.metrics.k8s.io
HPA Controller 伸缩决策者 通过聚合API查询指标,执行伸缩计算
Prometheus在HPA中的角色架构 应用Pod /metrics 端点 (暴露业务指标) Prometheus Server 指标采集 & 存储 PromQL 查询引擎 Prometheus Adapter 指标转换 & 暴露 Custom/External API Kubernetes API Server 指标API聚合 HPA Controller 伸缩决策 Scale API 调用 拉取 /metrics PromQL 查询 注册 API 查询指标 Scale 调整副本数

1.3 常见故障模式概述

在生产环境中,Prometheus数据采集链路中的任何环节故障都可能导致HPA失效。根据故障发生的位置,可归纳为以下四大类:

故障类别 典型表现 根因示例
采集层故障 指标缺失、数据延迟、指标值异常 Target不可达、Relabel配置错误、抓取超时、指标名称变更
适配层故障 HPA无法查询到指标、返回404/500 Adapter配置错误、PromQL语法错误、Series不存在、API聚合失败
伸缩决策故障 HPA不伸缩、伸缩过度、伸缩震荡 指标波动剧烈、冷却窗口配置不当、目标值设置不合理、多指标冲突
基础设施故障 HPA Controller异常、API Server过载 集群资源不足、etcd性能瓶颈、网络分区、RBAC权限不足
⚠️ 常见误区: 很多运维人员将HPA不工作直接归因于“Prometheus数据采集失败”,但实际排查中,Adapter配置错误和指标命名不一致才是最高频的故障根因。本课程后续章节将逐一深入剖析每种故障的排查方法论。

1.4 故障排查的黄金路径

面对HPA故障,建议遵循以下排查链路:

  1. 检查HPA事件:kubectl describe hpa <name> 查看Conditions和Events。
  2. 验证指标可达性:直接请求Metrics API kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/...。
  3. 检查Adapter日志:查看Prometheus Adapter Pod日志中的查询错误。
  4. 验证Prometheus数据:在Prometheus UI中直接执行HPA使用的PromQL,确认数据存在且符合预期。
  5. 检查Target采集状态:确认应用Pod的/metrics端点可正常访问且返回合法数据。
💡 排查口诀: “先看HPA事件,再查API响应;Adapter日志是关键,PromQL验证不能省;最后检查采集端,链路闭环才放心。”
HPA故障排查黄金路径 ① HPA事件 kubectl describe ② Metrics API kubectl get --raw ③ Adapter日志 查询错误分析 ④ PromQL验证 Prometheus UI ⑤ 采集端 /metrics 排查要点 • 每一步都输出明确的“通过/失败”结论 • 失败时立即深入该层,不要跳过步骤 • 使用 kubectl get hpa -o yaml 查看完整状态 • 关注 lastScaleTime 和 conditions 字段

1.5 课程学习路径

本课程将按照“原理 → 配置 → 故障 → 实战”的递进结构展开:

  • 第2-5章:深入HPA核心原理与Prometheus Adapter配置细节。
  • 第6-15章:逐一剖析采集层、适配层、决策层的典型故障案例。
  • 第16-25章:进阶故障场景,包括多指标HPA、外部指标、大规模集群伸缩等。
  • 第26-30章:综合实战演练与监控告警体系构建。

通过本课程,你将掌握从“HPA不工作”到“精准定位根因”的完整排查能力,成为团队中Prometheus + HPA领域的专家。