apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
  namespace: default
spec:
  # 目标对象:针对哪个工作负载扩缩容
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app-deployment
  
  # 副本数边界(必填)
  minReplicas: 2
  maxReplicas: 10
 
  # 核心:指标配置(v2 版本支持多指标)
  metrics:
  # 1. 资源指标(CPU)
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization        # 用法:Utilization(使用率)或 AverageValue(平均值)
        averageUtilization: 60   # 期望 Pod 平均 CPU 使用率为 60%
  
  # 2. 资源指标(内存)- 可选
  - type: Resource
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 500Mi      # 期望每个 Pod 内存平均值不超过 500Mi
 
  # 3. 自定义指标(例如 Prometheus 采集的 QPS)- 需安装 Prometheus Adapter
  - type: Pods
    pods:
      metric:
        name: http_requests_per_second
      target:
        type: AverageValue
        averageValue: 10         # 期望每个 Pod 平均 QPS 为 10
 
  # 扩缩容行为策略(v2 支持细粒度控制,强烈建议生产环境配置)
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300   # 缩容冷却窗口:5 分钟内指标持续低于阈值才缩容
      policies:
      - type: Percent
        value: 50               # 每次缩容最多减少 50% 的 Pod
        periodSeconds: 60       # 每 60 秒内最多执行一次
      selectPolicy: Min         # 取多个策略中效果最保守的(Max 则最激进)
    scaleUp:
      stabilizationWindowSeconds: 0     # 扩容无冷却(默认即为 0,立即响应)
      policies:
      - type: Percent
        value: 100              # 每次扩容最多翻倍
        periodSeconds: 15       # 每 15 秒可扩容一次
      - type: Pods
        value: 4                # 或每次最多增加 4 个 Pod
        periodSeconds: 15
      selectPolicy: Max         # 取扩容量最大的策略(快速响应)