为何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
相关产品推荐
相关产品推荐

