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

Kubernetes多HPA未绑定对应Deployment CPU指标异常扩容排查

根因定位

该问题的核心原因是三个Deployment的标签与选择器配置冲突。
你提供的app1 Deployment配置中,spec.selector.matchLabels设置为app: app,Pod模板的metadata.labels也设置为app: app,且你提到app2、app3的Deployment仅名称、启动脚本存在差异,说明三个Deployment的选择器、Pod标签完全一致。
Deployment通过选择器匹配自己管理的Pod实例,三个Deployment共用同一套选择器和标签,会导致每个Deployment都能匹配到该命名空间下所有带app: app标签的Pod(即三个应用的全部Pod)。HPA计算指标时会获取绑定Deployment匹配到的所有Pod的CPU平均值,自然三个HPA拿到的指标完全相同,等价于统计了整个命名空间下所有相关Pod的平均负载。

修复方案

逐个调整三个Deployment的标签和选择器,保证每个Deployment的标识唯一:

  1. 调整app1的Deployment配置:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app1
  labels:
    app: app1 # 替换为应用唯一标识
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app1 # 和Pod标签对应,保持唯一
  template:
    metadata:
      labels:
        app: app1 # 替换为应用唯一标识,和选择器匹配
    # 其余资源、启动命令等配置保持不变
  1. 同理修改app2、app3的Deployment,分别将标签、选择器设置为app: app2、app: app3
  2. 由于Kubernetes不允许直接修改已存在Deployment的matchSelector字段,你需要先删除原有三个Deployment再重新创建,若业务不允许中断可采用蓝绿发布的方式逐步替换。

验证方法

  • 修复完成后执行kubectl get pods -n my-namespace -l app=app1,确认返回结果仅包含app1的Pod
  • 执行kubectl describe hpa app1-hpa -n my-namespace,查看指标部分是否和app1实际Pod的CPU占用一致,等待几分钟后即可看到副本数自动调整到符合预期的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:27:04