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

GCP中Kubernetes HPA自定义日志指标无法读取求助

问题描述

用户在GCP中配置的Horizontal Pod Autoscaler(HPA)YAML片段如下:

//...
  metrics:
    - type: Pods
      pods:
        metric:
          name: "my-custom-metric"
        target:
          type: AverageValue
          averageValue: 60

//..

该自定义指标为日志型指标,已在Cloud Monitoring指标资源管理器中添加并可正常展示在仪表盘中,但HPA无法读取该指标,报错Unable to read all metrics。尝试使用指标完整路径名称时,又遇到“/不允许出现在名称中”的错误。用户提出以下疑问:

  • 是否需要为服务账号添加特定权限?
  • 是否必须使用Custom Metrics Adapter?
  • 无适配器时HPA无法访问指标吗?
解决方案

1. Custom Metrics Adapter是必需的

没错,要让Kubernetes HPA读取Cloud Monitoring里的自定义指标(包括你这种日志型指标),必须部署Google Cloud Custom Metrics Adapter。原生HPA只能识别Kubernetes内置的CPU、内存这类指标,没法直接对接Cloud Monitoring的自定义指标。适配器作为中间层,会把Cloud Monitoring的指标转换成Kubernetes API能处理的格式,供HPA调用。没有适配器的话,HPA根本访问不到Cloud Monitoring的自定义指标。

2. 服务账号权限配置

部署适配器时,要给它用的服务账号配好权限:

  • 给服务账号绑定roles/monitoring.viewer角色,这个角色允许读取Cloud Monitoring里的所有指标数据。
  • 自定义指标默认情况下项目内的monitoring.viewer就有权限访问,不用额外配置指标级权限,除非你做了特殊的权限隔离。

另外,HPA控制器本身用的服务账号(一般在kube-system命名空间下的horizontal-pod-autoscaler)不需要额外加权限,它是通过Kubernetes API和适配器交互,不是直接调用Cloud Monitoring API。

3. 指标名称的正确用法

用了适配器之后,不用带斜杠的完整指标路径,直接用指标的短名称就行:

  • 你在Cloud Monitoring里创建的日志型指标有个短名称(就是你YAML里写的my-custom-metric),直接用这个就行。
  • 如果还是拿不准正确名称,执行kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1"查看适配器暴露的所有指标列表,找到对应指标后再配置到HPA里。

4. 额外排查步骤

  • 先确认适配器正常运行:检查kube-system命名空间下的custom-metrics-stackdriver-adapter Pod是不是处于Running状态。
  • 验证适配器能拿到指标:执行kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/<你的命名空间>/pods/*/<你的指标名称>",如果能返回正常的指标数据,说明适配器对接没问题,重新配置HPA就可以了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:17