带NoExecute污点的K8s工作节点部分Prometheus指标未采集
问题解答
是这个NoExecute污点导致的问题,原因如下:
先明确两个指标的来源差异:
machine_memory_bytes:这个指标是通过Kubernetes API获取的节点注册元数据(比如节点上报的内存规格),不需要在节点上运行任何采集Pod,只要节点在集群中正常注册就能拿到数据,完全不受节点污点影响。node_memory_*_bytes系列指标:这些是节点的系统级实时内存指标,由node-exporter采集。而node-exporter通常是以DaemonSet方式部署,需要在每个节点上运行Pod。
污点
nodeType=runner-node:NoExecute的核心作用是:驱逐所有未配置对应容忍度的Pod,并且拒绝没有容忍度的Pod调度到该节点。如果你的node-exporterDaemonSet没添加对这个污点的容忍配置,那么arc-worker-4节点上要么没有node-exporterPod,要么Pod被直接驱逐。没有采集Pod自然拿不到任何node_memory_*_bytes系列指标。快速验证方式:
- 执行
kubectl get pods -n <node-exporter所在命名空间> -o wide | grep arc-worker-4,查看该节点是否有node-exporterPod运行。 - 查看
node-exporter的DaemonSet配置,检查spec.template.spec.tolerations字段,确认是否包含对nodeType=runner-node:NoExecute的容忍规则。
- 执行
如果验证后确实是这个原因,给node-exporter的DaemonSet添加对应容忍度即可,示例配置:
tolerations: - key: "nodeType" operator: "Equal" value: "runner-node" effect: "NoExecute"
内容的提问来源于stack exchange,提问作者Joseph Gagnon
相关产品推荐
相关产品推荐

