首页/云/Kubernetes 速查/HPA 扩缩行为调优(behavior)
调度与资源52 条

HPA 扩缩行为调优(behavior)

扩容求快、缩容求稳:behavior 分别控制 scaleUp/scaleDown 的策略与稳定窗口,避免指标毛刺引发副本抖动。

Kubernetes 速查云更新于 2026-10-13

HPA behavior 是什么

behavior 是 autoscaling/v2 里的扩缩节流配置,分 scaleUp 与 scaleDown 两段,每段可以设置稳定窗口与速率策略。稳定窗口决定「参考多久之内的建议值」,扩缩策略决定「一次最多变几个副本」。默认取向下:扩容窗口为 0,指标一涨就扩;缩容窗口 300 秒,指标回落也不急着缩。这套配置的目的就是让扩容追上流量、让缩容不被毛刺带跑。

基本信息

字段位置HorizontalPodAutoscaler.spec.behavior
两段配置scaleUp 控制扩容,scaleDown 控制缩容
稳定窗口stabilizationWindowSeconds,取窗口内历史建议值的极值
速率策略policies 里按 Pods 或 Percent 限定单位时间内的变化量
选择策略selectPolicy 取 Max 或 Min,默认 Max
API 版本autoscaling/v2 才支持 behavior 字段

behavior 完整示例

behavior 完整示例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web
  namespace: prod
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 3
  maxReplicas: 30
  metrics:
    - type: Resource
      resource:
        name: cpu
        target: {type: Utilization, averageUtilization: 70}
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 0           # 扩容不等待
      policies:
        - type: Percent
          value: 100                          # 每 60 秒最多翻倍
          periodSeconds: 60
    scaleDown:
      stabilizationWindowSeconds: 300         # 缩容前观察 5 分钟
      policies:
        - type: Pods
          value: 2                            # 每 120 秒最多减 2 个
          periodSeconds: 120

字段含义与默认

字段含义常见取值
scaleUp.stabilizationWindowSeconds扩容参考的历史窗口默认 0,指标驱动场景通常保持 0
scaleDown.stabilizationWindowSeconds缩容参考的历史窗口默认 300,抖动的业务可再放大
policies.typePods 按个数、Percent 按比例限制突发业务用 Percent,平稳业务用 Pods
selectPolicy多条策略冲突时取哪个默认 Max,需要更保守可改 Min

典型使用场景

  • 突发流量:扩容窗口设 0 并允许翻倍,让副本数快速跟上
  • 周期抖动:指标在阈值附近来回跳时放大缩容窗口,避免副本数拉锯
  • 下游保护:用速率策略限制扩容速度,防止瞬间翻倍打爆数据库连接池
  • 成本控制:给缩容设置更积极的策略,低峰期尽快回收副本
  • 发布与重启:理解窗口语义,才知道为什么缩容总是慢半拍
HPA 的利用率是相对 requests 计算的:容器必须声明 CPU requests,否则该指标算不出来,HPA 会报缺少 request 的告警并停止扩缩。这与 request 与 limits 的关系直接相关,调 HPA 前先把 requests 补齐。
把缩容窗口改成 0 风险不小:流量毛刺会让副本数频繁上上下下,既增加发布与连接建立成本,也让容量评估失去参考。真要缩短,先确认指标是平滑的。

易错点

  • 把缩容窗口设成 0:流量瞬时抖动会让副本数来回拉锯,连接池与缓存反复重建
  • 扩容每次只允许加 1:突发流量追不上,先评估单副本容量与冷启动时间再定策略
  • 容器没写 CPU requests:利用率指标算不出来,HPA 表面存在却不会动作
  • 只看 HPA 对象不看清单:扩缩受阻的原因常在群集侧,用 kubectl describe hpa 看事件
  • maxReplicas 设得过高又不设速率上限:流量尖峰时瞬间拉起大量副本,可能压垮下游依赖

数据来源与参考

  • Kubernetes 官方文档 · HPA 的扩缩行为配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌