轻松监控 —— node-exporter使用

轻松监控 —— 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: truehostIPC: truehostNetwork: 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 会持续采集节点数据,想要实现可视化监控,只需完成两步配套操作:

  1. 部署 Prometheus,配置数据抓取任务,定时采集 node-exporter 输出的指标并持久化存储

  2. 部署 Grafana,导入 node-exporter 专用监控模板,生成 CPU、内存、磁盘、网络可视化大屏,配置异常告警

写在最后

node-exporter 作为 K8s 集群监控的基石,核心逻辑并不复杂。新手不用死记硬背配置,只要理解“共享宿主机环境、读取系统核心目录、全节点部署采集”这三个核心逻辑,就能彻底掌握该组件的使用方法,轻松应对日常集群监控运维工作。

by 兰佳林

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值