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

HPA调用PubSub外部指标报错:one_of参数不足问题排查与修复

解决HPA基于PubSub外部指标的one_of参数错误问题

这个问题我之前踩过坑,核心原因是HPA把单个值的matchLabels转换成In操作时,生成的Cloud Monitoring查询用了one_of()函数,但该函数要求至少传2个参数,而你的配置里只有一个订阅ID,直接触发了API报错。

为什么之前能正常运行?

两天前没问题是因为旧版本的metrics adapter(比如GKE的Stackdriver Metrics Adapter)在处理单个标签值的matchLabels时,会生成=(等于)条件,而非In/one_of()。但最近组件更新后,逻辑变了:只要是matchLabels就会转换成In操作,哪怕只有单个值也不例外,这就导致Cloud Monitoring API拒绝了这个非法的one_of()调用。

修复方案

推荐用第一种方案,更规范且长期有效:

方案1:改用matchExpressions指定Equals操作符

把metricSelector里的matchLabels替换成matchExpressions,明确使用Equals操作符,这样生成的查询会用=而不是one_of(),完美避开这个问题:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: pubsub
spec:
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - external:
      metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
      metricSelector:
        matchExpressions:
        - key: resource.labels.subscription_id
          operator: Equals
          values:
          - my-subscription-name
      targetAverageValue: "2"
    type: External

方案2:临时凑够2个标签值(不推荐)

如果不想修改配置结构,可以临时加一个不存在的订阅ID凑数,让one_of()有两个参数,但这只是临时workaround,不建议长期使用:

metricSelector:
  matchLabels:
    resource.labels.subscription_id: my-subscription-name
    resource.labels.subscription_id: dummy-subscription-id  # 无效ID,仅用于凑数

验证修复

重新应用HPA配置:

kubectl apply -f your-hpa-file.yaml

等待几分钟后,查看HPA状态确认指标正常:

kubectl get hpa pubsub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:32:51