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

为何Prometheus的kube_pod_status_reason指标全返回0值?

关于kube_pod_status_reason指标全为0的问题解答

核心原因:指标设计逻辑与默认配置限制

你遇到的情况既不是指标故障,也不是完全误解用途,而是这个指标的设计逻辑和默认配置导致的:

  • kube_pod_status_reason是枚举型Gauge指标,由kube-state-metrics生成,仅针对预定义的异常Pod状态Reason创建指标实例
  • 只有当Pod的当前状态Reason与指标的reason标签完全匹配时,该指标值才为1;不匹配时则为0
  • 你看到的5种Reason(Evicted、NodeAffinity、NodeLost、Shutdown、UnexpectedAdmissionError)是kube-state-metrics默认追踪的异常Reason列表

你的Failed Pod返回全0值,说明该Pod的实际状态Reason不在这5个默认列表中(比如常见的Failed Pod Reason可能是Error、CrashLoopBackOff、OOMKilled、Completed等),此时kube-state-metrics不会为这些未预定义的Reason生成独立指标,仅保留默认列表的指标实例并设为0。

解决方法

1. 确认Pod实际状态Reason

执行命令查看目标Pod的真实状态Reason:

kubectl describe pod runner-goew1uzh-project-8-concurrent-0zk79h -n runner-workspace-writer

在输出的Status部分找到Reason字段,即可知道该Pod的真实异常原因。

2. 扩展kube-state-metrics的追踪列表

如果需要监控更多Pod状态Reason,需修改kube-state-metrics的配置:

  • 若使用Helm部署,在values.yaml中添加或修改podStatusReasonAllowlist配置:
    kubeStateMetrics:
      config:
        podStatusReasonAllowlist:
          - Evicted
          - NodeAffinity
          - NodeLost
          - Shutdown
          - UnexpectedAdmissionError
          - CrashLoopBackOff  # 添加你需要追踪的Reason
          - OOMKilled
    
  • 若直接部署容器,添加启动参数:
    --pod-status-reason-allowlist=Evicted,NodeAffinity,NodeLost,Shutdown,UnexpectedAdmissionError,CrashLoopBackOff,OOMKilled
    

修改后重启kube-state-metrics,即可看到对应Reason的指标值在匹配时变为1。

3. 替代查询方案

如果不想修改配置,可先通过kube_pod_status_phase筛选异常Pod,再结合其他指标或工具排查:

kube_pod_status_phase{phase=~"Failed|Pending"} == 1

该指标会直接标记Pod所处的阶段(Running/Success/Failed/Pending等),值为1代表当前处于该阶段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:35