如何用Prometheus排除Master节点统计K8s集群内存使用率?
问题描述
在K8s集群中用Prometheus统计资源使用率时,遇到统计结果失真的问题:集群CPU/内存使用率显示为80%,但存在大量Pending Pod。原因是Master节点带有污点无法调度Pod,而统计时误将Master节点的资源纳入计算,实际Worker节点资源已耗尽。
以内存使用率统计为例,原查询语句如下:
1 - sum(avg_over_time(node_memory_MemAvailable_bytes{container="node-exporter"}[10m])) / sum(node_memory_MemTotal_bytes)
已通过以下查询获取到Master节点的instance标签:
leader_election_master_status{name="kube-scheduler"}
返回结果示例:
leader_election_master_status{endpoint="http-metrics", instance="172.20.62.250:10251", [...]}
需要修改内存使用率统计查询,在对node_memory_MemAvailable_bytes和node_memory_MemTotal_bytes求和时,排除instance为172.20.62.250:10251的Master节点。
解决方案
直接在PromQL的指标过滤条件中添加instance!="目标Master实例地址"来排除指定节点,修改后的查询语句如下:
1 - sum(avg_over_time(node_memory_MemAvailable_bytes{container="node-exporter", instance!="172.20.62.250:10251"}[10m])) / sum(node_memory_MemTotal_bytes{instance!="172.20.62.250:10251"})
补充说明
- 对于
node_memory_MemAvailable_bytes,在原有container="node-exporter"过滤基础上,新增instance!="172.20.62.250:10251",确保只计算Worker节点的可用内存平均值。 - 对于
node_memory_MemTotal_bytes,同样添加instance!="172.20.62.250:10251"过滤,排除Master节点的总内存。 - 如果集群有多个Master节点,可以用
instance!~"正则表达式"批量排除,比如instance!~"172.20.62.*:10251"匹配同网段的所有Master实例。
内容的提问来源于stack exchange,提问作者phil
相关产品推荐
相关产品推荐

