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

Kubernetes集群中HPA无法从Prometheus获取指标,请求排查原因

问题根源分析

首先得澄清一下:你当前的HPA错误不是因为无法从Prometheus获取指标,而是Kubernetes的基础资源指标API(metrics.k8s.io)没有正常运行。HPA默认依赖这个API来获取CPU、内存这类原生资源的使用率数据,和Prometheus暂时还没扯上关系——除非你特意配置了用Prometheus提供自定义指标。

看错误信息里的关键提示:unable to fetch metrics from resource metrics API: the server could not find the requested resource (get pods.metrics.k8s.io),这说明集群里没有提供pods.metrics.k8s.io这个API服务的组件,也就是Metrics Server没部署或者没正常工作。

分步解决步骤

1. 检查Metrics Server状态

先确认集群里有没有部署Metrics Server:

kubectl get pods -n kube-system | grep metrics-server

如果没有任何输出,说明你还没部署Metrics Server——这是Kubernetes集群的可选组件,默认不会自动安装。

部署Metrics Server(如果缺失)

你可以通过Kubernetes官方提供的Metrics Server组件清单进行部署,或者使用Helm Chart安装(比如执行helm install metrics-server metrics-server/metrics-server)。

测试环境中,如果Metrics Server启动后报错无法连接kubelet,你可以在它的Deployment里添加--kubelet-insecure-tls参数跳过证书验证(生产环境建议配置合法的TLS证书)。

验证Metrics Server是否正常工作

部署完成后,等几分钟,然后执行:

kubectl top pods

如果能返回所有Pod的CPU和内存使用率数据,说明Metrics Server已经正常提供metrics.k8s.io API服务了。

2. 检查Pod的CPU Request配置

HPA计算CPU使用率的前提是你的Deployment里的Pod模板必须设置了CPU Request,因为HPA是基于实际CPU使用率 / CPU Request的百分比来判断是否需要扩缩容的。

检查你的php-apache Deployment配置,确保有类似这样的片段:

spec:
  containers:
  - name: php-apache
    image: php:apache
    resources:
      requests:
        cpu: "100m"  # 必须设置CPU请求值
      limits:
        cpu: "500m"

如果没有设置CPU Request,HPA会无法计算使用率,同样会出现<unknown>的指标值。

3. 如果你确实想通过Prometheus实现HPA(而非原生Metrics Server)

如果你的需求是用Prometheus采集的自定义指标(比如业务相关的QPS、延迟等)来做HPA,那需要额外部署Prometheus Adapter,它的作用是把Prometheus的指标转换成Kubernetes的自定义指标API(custom.metrics.k8s.io)。

关键配置步骤:

  • 部署Prometheus Adapter:通常可以通过kube-prometheus-stack这个Helm Chart一键部署,它包含Prometheus、Grafana和Adapter
  • 配置Adapter的ConfigMap:定义要从Prometheus抓取的指标规则,比如把Prometheus里的container_cpu_usage_seconds_total转换成Kubernetes能识别的自定义指标
  • 修改HPA配置:使用type: Pods或者type: Object的自定义指标,而不是默认的Resource类型

比如一个基于Prometheus CPU指标的HPA配置示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metric:
        name: container_cpu_usage_percentage
      target:
        type: AverageValue
        averageValue: 50%
最后验证

等Metrics Server(或Prometheus Adapter)正常运行后,重新查看HPA状态:

kubectl get hpa php-apache

如果指标从<unknown>变成具体的数值,说明问题已经解决,HPA会开始根据CPU使用率自动扩缩容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:35:43