You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE环境Spring Boot应用启动阶段HPA异常触发扩容问题

问题根因
  • HPA默认统计Pod内所有容器的CPU利用率总和,计算基数是Pod所有容器的CPU request总和。你当前Pod包含业务容器(CPU request 200m)和cloudsql-proxy sidecar(CPU request 100m),总计算基数为300m。
  • Spring Boot应用启动阶段需要初始化上下文、加载类、建立数据库连接等操作,会产生临时CPU峰值,即使没有业务流量,启动阶段CPU占用也可能达到240m以上,对应整体Pod CPU利用率超过80%的阈值,触发HPA扩容。
  • HPA默认不会过滤未就绪Pod的CPU指标,Pod还在启动、未通过readinessProbe检测时,其CPU占用已经被纳入HPA的利用率计算,临时峰值直接触发扩容逻辑。
解决方案
  1. 使用容器级HPA指标(推荐)
    K8s 1.20及以上版本支持单独指定HPA统计某一个容器的资源利用率,避免sidecar容器的request占用计算基数,更贴合业务实际负载情况。配置示例如下:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-api
  labels:
    app: myapp
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-api
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: ContainerResource
    containerResource:
      name: cpu
      container: myapp # 仅统计业务容器的CPU利用率
      target:
        type: Utilization
        averageUtilization: 80
  - type: ContainerResource
    containerResource:
      name: memory
      container: myapp # 仅统计业务容器的内存利用率
      target: 
        type: Utilization
        averageUtilization: 80
  1. 配置HPA扩容稳定窗口
    在HPA中添加behavior配置,设置扩容前的稳定窗口时长,过滤启动阶段的临时CPU峰值,窗口时长建议大于应用启动的最长耗时(此处建议设为120秒,大于你配置的90秒存活探针初始延迟):
spec:
  # 其他原有配置保持不变
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 120 # 过去2分钟的指标平均满足阈值才会触发扩容
      policies:
      - type: Percent
        value: 100
        periodSeconds: 60
    scaleDown:
      stabilizationWindowSeconds: 300
  1. 优化Spring Boot启动性能
    降低应用启动阶段的CPU峰值:
  • 开启Spring Boot懒加载,配置spring.main.lazy-initialization=true
  • 裁剪不必要的依赖组件,减少启动时的初始化逻辑
  • 调整JVM启动参数,避免启动阶段不必要的资源占用
  1. 调整业务容器CPU request
    如果启动阶段CPU峰值确实较高,可以适当调优业务容器的CPU request值,降低计算得到的利用率百分比,避免触发阈值。

内容的提问来源于stack exchange,提问作者Muktesh Arya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:06:03