轻松监控 —— node-exporter使用

很多刚接触 Kubernetes 的朋友,搭建完集群后都会遇到一个难题:不知道集群里每一台服务器的真实运行状态。
CPU 是否过载、内存是否溢出、磁盘是否快满、网络是否卡顿,这些服务器底层的核心监控数据,K8s 本身是无法直接采集的。想要实现集群节点全方位监控,node-exporter 是必不可少的核心组件。
本文摒弃晦涩术语、老旧过时配置,用纯新手能看懂的大白话,完整讲解 node-exporter 的作用、工作原理、YAML 配置含义以及通用部署流程,零基础也能轻松上手。
一、node-exporter 是什么?核心作用详解
简单来说,node-exporter 是 K8s 集群节点的专属监控采集工具,隶属于 Prometheus 监控生态,是集群监控的“数据采集员”。
我们可以把每一台 K8s 节点(服务器)想象成一台独立的电脑,node-exporter 就是安装在每台电脑上的探子,专门负责收集服务器底层硬件与系统的运行数据,包含 CPU、内存、磁盘、磁盘IO、网络流量、系统负载、文件句柄等核心指标。
这里纠正一个新手最大的误区:node-exporter 不存数据、不画图表、不做告警。它唯一的工作就是:实时采集服务器数据,以标准化文本格式对外输出,为后续监控组件提供数据源。
完整的 K8s 节点监控链路非常清晰:
node-exporter(采集原始数据)→ Prometheus(存储时序数据)→ Grafana(可视化图表展示)
二、为什么必须用 DaemonSet 部署?
K8s 中有多种资源控制器,新手很容易选错部署方式,这里做通俗区分:
-
Deployment:仅保证集群中 Pod 总数量固定,会随机调度节点,无法做到每台节点部署一个,完全不适合节点监控组件
-
DaemonSet:集群核心专属控制器,核心特性是集群每一个节点,自动运行且仅运行一个 Pod
我们需要监控集群所有节点(包括管理节点 master)的状态,因此 node-exporter 必须使用 DaemonSet 部署,这是行业通用标准方案。
三、通用版 node-exporter 完整 YAML
将以下代码保存为 node-exporter.yaml 文件即可:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitor
labels:
name: node-exporter
spec:
selector:
matchLabels:
name: node-exporter
template:
metadata:
labels:
name: node-exporter
spec:
# 共享宿主机网络、进程、IPC空间,获取真实服务器数据
hostPID: true
hostIPC: true
hostNetwork: true
# 容忍控制节点污点,让master节点也部署监控
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: node-exporter
# 通用官方镜像,国内环境可替换为国内镜像源
image: prom/node-exporter:v1.8.2
ports:
- containerPort: 9100
# 轻量资源限制,避免占用服务器过多性能
resources:
requests:
cpu: 0.15
memory: 128Mi
limits:
cpu: 0.5
memory: 256Mi
# 开启特权权限,读取宿主机硬件信息
securityContext:
privileged: true
# 配置数据读取路径,过滤无效挂载点
args:
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker|var/lib/kubelet)($|/)
# 挂载宿主机核心系统目录
volumeMounts:
- name: dev
mountPath: /host/dev
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: rootfs
mountPath: /rootfs
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
四、逐行通俗解析 YAML 核心配置(新手必看)
很多新手部署只会复制粘贴,出问题完全不会排查。下面拆解所有核心配置,看完彻底理解每一行代码的作用。
1. 基础属性配置
通过 kind: DaemonSet 声明资源类型,指定专属命名空间 monitor,将所有监控组件统一归类管理,避免资源混乱。
2. 三大核心共享配置(重中之重)
hostPID: true、hostIPC: true、hostNetwork: true 是 node-exporter 正常工作的核心:
-
默认 Pod 是独立隔离的“虚拟小盒子”,只能看到自身内部的少量资源,无法读取服务器真实硬件信息
-
开启这三项配置后,Pod 放弃独立的网络、进程、通信空间,直接复用宿主机真实环境
-
最终效果:Pod IP 等同于服务器节点 IP,9100 端口直接暴露在节点,无需额外配置 Service 即可采集数据
3. 污点容忍配置
新版 K8s 的 master 控制节点默认带有污点,会拒绝普通 Pod 部署。配置容忍规则后,node-exporter 可以正常运行在 master 节点,实现控制节点和工作节点的全覆盖监控。
注:老旧教程的 master 污点参数已失效,本文为最新通用配置。
4. 特权权限与目录挂载
Linux 系统的 CPU、内存、磁盘、进程等所有硬件数据,都存储在 /proc、/sys、/dev 三个系统目录中。
容器默认无法访问宿主机这些核心目录,因此通过 hostPath 将宿主机目录挂载到容器内部,同时开启特权模式,让 node-exporter 拥有读取硬件数据的权限。
5. 过滤无效监控指标
K8s 节点会生成大量容器虚拟挂载目录,如果不过滤,系统会采集数万条无效指标,占用大量存储和性能。配置 ignored-mount-points 可自动屏蔽无用数据,让监控数据更精准、系统更流畅。
五、一步步实操部署流程
1. 创建监控专属命名空间
统一管理所有监控相关组件,规范集群资源:
kubectl create ns monitor
2. 部署资源文件
执行命令应用 YAML 配置,完成 node-exporter 部署:
kubectl apply -f node-exporter.yaml
3. 验证部署结果
查看监控命名空间下的 Pod 运行状态:
kubectl get pods -n monitor -o wide
正常部署结果:集群每一个节点(含 master)都会生成一个 Running 状态的 Pod,且 Pod IP 与节点 IP 一致。
六、手动验证监控数据是否正常采集
node-exporter 通过 9100 端口对外输出原始监控数据,我们可以通过 curl 命令直接访问接口验证:
# 替换为你的集群任意节点IP
curl http://节点IP:9100/metrics
执行后会输出大量标准化文本数据,每一行都是一项服务器监控指标,代表采集功能完全正常。
七、新手必须掌握的两种核心指标类型
所有 node-exporter 采集的指标,都可以归为两类,看懂这两个就能读懂 90% 的监控数据:
1. Counter 计数器(只增不减)
类比汽车里程表,数据只会持续累加,不会下降、不会清零。主要用于统计累计数据。
典型指标:node_cpu_seconds_total,代表 CPU 累计运行时长。无法直接查看实时使用率,需要通过 Prometheus 计算速率得出。
2. Gauge 仪表盘(可增可减)
类比汽车转速表,数据随实时状态波动,用来反映当前瞬间的真实状态。
典型指标:node_load1,代表服务器1分钟系统负载,直接体现当前服务器繁忙程度。
八、新手高频踩坑总结
-
镜像拉取失败:官方境外镜像国内访问超时,替换为国内镜像源即可解决
-
数据采集虚假不准:大概率未开启主机共享配置(host系列参数)或目录挂载失败,读取的是容器内部虚拟资源
-
master 节点无 Pod:污点容忍配置过时,使用本文最新配置即可修复
-
监控指标过多、冗余卡顿:未配置无效挂载点过滤,导致采集大量垃圾数据
九、后续监控完整流程
部署完成后,node-exporter 会持续采集节点数据,想要实现可视化监控,只需完成两步配套操作:
-
部署 Prometheus,配置数据抓取任务,定时采集 node-exporter 输出的指标并持久化存储
-
部署 Grafana,导入 node-exporter 专用监控模板,生成 CPU、内存、磁盘、网络可视化大屏,配置异常告警
写在最后
node-exporter 作为 K8s 集群监控的基石,核心逻辑并不复杂。新手不用死记硬背配置,只要理解“共享宿主机环境、读取系统核心目录、全节点部署采集”这三个核心逻辑,就能彻底掌握该组件的使用方法,轻松应对日常集群监控运维工作。
by 兰佳林

1620

被折叠的 条评论
为什么被折叠?



