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

如何在Kubernetes中配置Prometheus告警监控被驱逐的Failed状态Pod

问题根因

你用的kube_pod_container_status_terminated_reason是容器维度的指标,统计的是单个容器终止运行的原因。而节点驱逐是Pod级别的状态原因,kubelet会直接将整个Pod标记为Failed状态、Reason为Evicted,不会给Pod内的容器单独上报Evicted的终止标识,所以这个指标查不到对应数据。

解决方案

方案1:升级kube-state-metrics(推荐)

v2.2.0及以上版本的kube-state-metrics已经原生支持kube_pod_status_reason指标,直接暴露Pod维度的状态原因:

  1. 执行以下命令查看当前kube-state-metrics版本:
    kubectl exec -n <kube-state-metrics命名空间> <kube-state-metrics Pod名称> -- kube-state-metrics --version
  2. 如果版本低于v2.2.0,通过升级Prometheus Operator对应的Helm chart或者直接更新kube-state-metrics部署即可完成升级。
  3. 升级完成后使用如下PromQL统计Evicted Pod数量:
    count(kube_pod_status_reason{reason="Evicted"}) by (namespace)
    对应的告警规则示例:
groups:
- name: pod-eviction-rules
  rules:
  - alert: EvictedPodsExceedThreshold
    expr: count(kube_pod_status_reason{reason="Evicted"}) > 3
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: 集群驱逐Pod数量超过阈值
      description: 当前集群共有{{ $value }}个被驱逐的Pod,请排查节点资源或Pod资源配置问题。

方案2:手动配置kube-state-metrics暴露Pod Reason标签(无需升级)

如果暂时无法升级kube-state-metrics,可以修改kube-state-metrics启动参数,手动把Pod的status.reason字段暴露为指标标签:

  1. 修改kube-state-metrics的部署配置,增加启动参数:
    --metric-labels-allowlist=pods=[status.reason]
    注:部分旧版本的kube-state-metrics参数名为--labels-allowlist,可根据实际版本调整
  2. 重启kube-state-metrics后,即可在kube_pod_labels或kube_pod_info指标中拿到reason标签,通过PromQL关联查询Evicted的Failed Pod:
    count(kube_pod_status_phase{phase="Failed"} * on(pod, namespace) group_left(reason) kube_pod_info{reason="Evicted"})

方案3:基于Kubernetes事件告警

如果不需要统计历史驱逐Pod数量,仅需要实时感知驱逐事件,可以部署kube-eventer类的事件采集组件,匹配reason=Evicted、type=Warning的事件直接触发告警,无需调整Prometheus配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:15:04