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

使用Prometheus监控Kubernetes cgroup问题及配置Grafana告警

Kubernetes集群cgroup内存故障致Pod卡在Init状态的Prometheus+Grafana告警配置

前置依赖

  • 集群内部署kube-state-metrics组件,确保Prometheus可正常抓取其metrics端口;同时保证cAdvisor、kubelet核心指标采集正常,无丢点。

这类Docker cgroup内存分配失败导致的Init状态故障,核心判定特征有两个:一是Pod持续停留在Init阶段超过正常启动阈值,二是对应cgroup路径内存使用率触顶,或init容器退出日志携带cgroup memory alloc failed、no space left on device: cgroup类报错。

核心PromQL查询语句

以下为精准匹配故障的查询语句,可直接复制使用:

# 匹配卡在Init状态且关联cgroup内存高使用率的异常Pod
(
  kube_pod_init_container_status_waiting{container=~"init-.*"} == 1
  * on(namespace, pod) group_left(node) kube_pod_info
)
* on(node) group_left()
(
  1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.9
  or
  (container_memory_usage_bytes{id=~"/kubepods/besteffort/.*|/kubepods/burstable/.*"} / container_spec_memory_limit_bytes > 0.97)
)

语句逻辑说明:

  • 第一层筛选所有处于等待状态的init容器,关联拿到Pod所在节点信息
  • 第二层匹配节点整体内存使用率超90%,或节点上kubepods对应cgroup路径内存使用率超97%的场景,排除普通启动慢、镜像拉取失败导致的Init卡滞,精准定位cgroup内存分配问题。

Grafana告警配置步骤

  • 打开集群监控对应的Grafana实例,新建Panel,数据源选择已对接的Prometheus,将上述PromQL粘贴到查询框,查询时间范围设置为5m,最小步长设为15s。
  • 切换到Alert标签页,设置触发条件:当查询返回结果值大于0,且持续时长满足2m时触发告警。正常Pod的init容器启动耗时不会超过1分钟,2分钟阈值可过滤绝大多数正常启动场景,避免误报。
  • 配置告警固定标签:添加severity=critical、fault_category=cgroup_alloc_error标签,方便后续告警路由到对应运维组。
  • 配置告警通知模板,直接嵌入指标标签减少排障信息查询成本:
[严重告警] Pod因cgroup内存分配失败卡Init状态
命名空间: {{ $labels.namespace }}
异常Pod: {{ $labels.pod }}
所在节点: {{ $labels.node }}
节点内存使用率: {{ $value | humanizePercentage }}
  • 配置通知渠道,选择对应运维组的接收渠道(企业微信、邮件、钉钉等)保存即可。

配置避坑点

  • 禁止单独用kube_pod_status_phase{phase="Pending"}作为告警判断条件,会把镜像拉取中、调度中、正常启动的Pod全部误报,必须叠加容器状态、cgroup内存使用率两个维度的条件做联合判断。
  • 如果集群运行时从Docker切换为containerd,上述规则不需要修改,cgroup内存分配的指标特征完全一致。
  • 告警触发后优先排查对应节点是否存在cgroup泄漏问题,再检查异常Pod的init容器内存request/limit配置是否超过节点cgroup可分配配额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:39:18