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

Kubernetes与Prometheus无法对接Grafana问题求助

排查Grafana与Prometheus接入失败的问题

先从最基础的环节开始排查吧——毕竟你是单master无worker节点的集群,组件的调度、运行状态本身就有特殊情况,很多问题都出在这里。

1. 先确认Prometheus本身是否正常工作

如果Prometheus都没跑起来或者没采集到K8s指标,Grafana肯定拿不到数据:

  • 检查Prometheus Pod状态:
    先看看Pod是不是都处于Running状态,有没有崩溃或Pending的情况:

    kubectl get pods -n monitoring  # 换成你实际安装Prometheus的命名空间
    

    如果是Pending状态,大概率是master节点的默认污点(node-role.kubernetes.io/master:NoSchedule)导致的——默认情况下master不允许普通Pod调度。你得检查Prometheus的Deployment/StatefulSet有没有配置容忍这个污点:

    kubectl get deployment prometheus-server -n monitoring -o yaml | grep -A 10 tolerations
    

    如果没有相关配置,要在你的自定义YAML里加上:

    tolerations:
    - key: "node-role.kubernetes.io/master"
      operator: "Exists"
      effect: "NoSchedule"
    

    同时还要确认Pod的nodeSelector没有限制只能跑在worker节点。

  • 验证Prometheus服务的可访问性:
    先找到Prometheus的Service,然后用端口转发测试本地能不能访问:

    kubectl get svc -n monitoring
    kubectl port-forward svc/prometheus-server 9090:80 -n monitoring
    

    打开http://localhost:9090,进入Status -> Targets页面,看看K8s相关的采集目标(比如node-exporter、kube-state-metrics)是不是Up状态。如果这些目标是Down,那就是Prometheus根本没采集到K8s指标,得先解决这个。

2. 检查Grafana的数据源配置是否正确

你安装的Kubernetes监控仪表盘,核心是要正确关联Prometheus数据源:

  • 登录Grafana(http://localhost:3000),进入Configuration -> Data sources,确认已经添加了Prometheus数据源:
    • 数据源的URL要填Prometheus的集群内访问地址,比如http://prometheus-server.monitoring.svc.cluster.local:80(根据你的命名空间调整)
    • 点击Save & Test,看是否提示成功。如果失败,就去Grafana Pod里测试网络连通性:
      kubectl exec -it <你的grafana-pod名称> -n <grafana命名空间> -- curl http://prometheus-server.monitoring.svc.cluster.local:80
      
      要是不通,可能是命名空间错了、Service名称不对,或者有网络策略限制了流量。

3. 核对Helm安装Prometheus的自定义YAML

你用了教程里的自定义配置,很可能是某个组件被禁用或者配置错了:

  • 确认kube-state-metrics是否安装:这个组件专门采集K8s资源(Pod、Deployment等)的指标,绝大多数Kubernetes仪表盘都依赖它。检查它的Pod状态:

    kubectl get pods -n monitoring | grep kube-state-metrics
    

    如果没有这个Pod,说明你的自定义YAML禁用了它,需要开启:

    kubeStateMetrics:
      enabled: true
    
  • 确认node-exporter能在master节点运行:因为你没有worker,node-exporter必须跑在master上,同样要检查它的DaemonSet有没有容忍master污点:

    kubectl get daemonset prometheus-node-exporter -n monitoring -o yaml | grep -A 10 tolerations
    

    没有的话,同样要在配置里加上对应的容忍规则。

4. 检查仪表盘的指标匹配度

有些旧的Kubernetes仪表盘,查询语句可能和新版本Prometheus/node-exporter的指标名不匹配:

  • 找一个没有数据的面板,点击Edit查看查询语句,然后去Prometheus UI里执行这个查询,看有没有返回结果。比如查询kube_pod_status_ready,如果Prometheus里没有这个指标,那就是kube-state-metrics没正常工作。

5. 日志排查兜底

如果上面都没问题,就去看日志找线索:

  • Prometheus日志:
    kubectl logs <prometheus-pod名称> -n monitoring
    
    看有没有连接K8s API失败、无法访问kube-state-metrics之类的报错。
  • Grafana日志:
    kubectl logs <grafana-pod名称> -n <grafana命名空间>
    
    看有没有数据源连接错误、仪表盘加载失败的信息。

另外,单master节点要注意资源是否足够,用kubectl top node看看CPU、内存使用率,资源不足也会导致组件运行异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:51:47