gx88998 2025-11-10 16:26 采纳率: 100%
浏览 6
已结题

promtheus-server的pod出现这个日志,请问是什么原因?之前都是好的(操作系统-linux)

img

报错如上图内容,之前是没问题的,重启了pod之后出现上图报错

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-11-10 16:43
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案能帮助您,请采纳,非常感谢!
    .
    每日一句正能量,让它带给您好心情:努力的人,自带光芒,走到哪里都能照亮一片天。
    .

    根据您提供的日志,Prometheus Server 主要存在两个核心问题:

    1. Kubernetes API 权限问题

    错误现象:

    cannot List resource "nodes/services/pods/endpoints" in API group "" at the cluster scope
    

    根本原因:
    Prometheus 使用的 ServiceAccount znaqyxbzpt:default 缺少必要的 Kubernetes API 权限,无法列出集群范围的资源(nodes、services、pods、endpoints等)。

    解决方案:

    检查并修复 ClusterRole 和 ClusterRoleBinding:

    # 检查当前的 ClusterRole 和 ClusterRoleBinding
    kubectl get clusterrole,clusterrolebinding -n znagyxbzpt | grep prometheus
    
    
    # 检查 ServiceAccount 是否存在
    kubectl get serviceaccount -n znagyxbzpt
    

    创建或更新必要的 RBAC 权限:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-k8s
    rules:
    - apiGroups: [""]
      resources:
      - nodes
      - nodes/proxy
      - services
      - endpoints
      - pods
      verbs: ["get", "list", "watch"]
    - apiGroups:
      - extensions
      resources:
      - ingresses
      verbs: ["get", "list", "watch"]
    - nonResourceURLs: ["/metrics"]
      verbs: ["get"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: prometheus-k8s
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: prometheus-k8s
    subjects:
    - kind: ServiceAccount
      name: default  # 或您的具体 ServiceAccount 名称
      namespace: znagyxbzpt
    

    2. Alertmanager 连接超时问题

    错误现象:

    Error sending alert err="Post \"http://prometheus-alertmanager:80/api/v1/alerts\": context deadline exceeded"
    

    根本原因:
    Prometheus 无法在超时时间内连接到 Alertmanager。

    解决方案:

    检查 Alertmanager 状态:

    # 检查 Alertmanager Pod 状态
    kubectl get pods -n znagyxbzpt | grep alertmanager
    
    
    # 检查 Alertmanager 服务
    kubectl get svc -n znagyxbzpt | grep alertmanager
    
    
    # 检查网络连通性
    kubectl exec -it prometheus-server-pod -n znagyxbzpt -- nc -zv prometheus-alertmanager 80
    

    检查 Prometheus 配置中的 Alertmanager 配置:

    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          - prometheus-alertmanager:80
        # 可以尝试增加超时时间
        timeout: 10s
    

    3. 综合排查步骤

    1. 验证 RBAC 配置:
    kubectl auth can-i list nodes --as=system:serviceaccount:znagyxbzpt:default
    kubectl auth can-i list pods --as=system:serviceaccount:znagyxbzpt:default
    
    1. 重启相关组件:
    # 重启 Prometheus(在修复 RBAC 后)
    kubectl delete pod -n znagyxbzpt prometheus-server-64759849¢9-47919
    
    
    # 检查 Alertmanager 并重启
    kubectl get pods -n znagyxbzpt | grep alertmanager
    
    1. 检查事件日志:
    kubectl get events -n znagyxbzpt --sort-by=.lastTimestamp
    

    总结

    问题主要是由于:

    • RBAC 权限不足:ServiceAccount 缺少必要的集群级别资源列表权限
    • 网络连接问题:Prometheus 无法连接到 Alertmanager

    建议先修复 RBAC 权限问题,然后检查 Alertmanager 的网络连通性。重启后出现此问题可能是由于集群权限配置发生了变化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月10日