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