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

K8s HPA拉取Pods自定义指标失败 自动扩缩容故障排查

根因分析

报错URL里出现的%!A(MISSING)、%!D(MISSING)是Go语言fmt包的典型格式化错误输出,代表字符串格式化时传入参数和占位符不匹配,结合现象可以定位两个核心问题:

  1. 你只验证了自定义指标API的根路径可访问,没有验证Pod维度的http_requests指标是否真的被适配器正确注册,绝大多数情况下自定义指标适配器(最常用的是Prometheus Adapter)默认不会自带http_requests的Pod维度关联规则,HPA请求对应指标路径时适配器无法正确路由。
  2. 你使用的autoscaling/v2beta1版本HPA属于已废弃的旧API,和当前集群部署的自定义指标适配器存在版本兼容问题,HPA向适配器发起请求时参数传递不匹配,导致适配器端拼接请求路径时触发格式化bug,生成了非法的请求URL,最终返回资源不存在的错误。
修复步骤
  • 首先验证Pod维度自定义指标的可用性,不要只检查API根路径,执行以下命令确认指标可正常返回:
    kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/http_requests"
    
    如果该命令返回错误,先修改自定义指标适配器的配置(比如Prometheus Adapter的ConfigMap),添加http_requests指标的Pod维度关联规则,确保指标和Pod资源能正确关联,直到上面的命令能返回正常的指标数据。
  • 将HPA的API版本从废弃的autoscaling/v2beta1升级为稳定版autoscaling/v2,同步适配新API的字段格式,修正后的完整HPA配置如下:
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: podinfo
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: podinfo
      minReplicas: 2
      maxReplicas: 10
      metrics:
      - type: Pods
        pods:
          metric:
            name: http_requests
          target:
            type: AverageValue
            averageValue: 1
    
  • 应用新的HPA配置后等待1~2分钟,执行kubectl describe hpa podinfo查看事件状态,如果没有拉取指标的相关报错,即代表HPA已经恢复自动扩缩容能力。
  • 如果调整后仍然出现相同的%!MISSING类格式化错误,直接将自定义指标适配器升级到和当前K8s集群版本匹配的稳定版本,该类错误属于适配器自身的代码逻辑bug,升级版本即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:42:37