跳到主要内容

实战-prometheus监控k8s集群外的机器-2026.4.8(静态方式)(测试成功)

最后更新于:

实战-prometheus监控k8s集群外的机器-2026.4.8(静态方式)(测试成功)

1centos7.x机器上如何安装node-exporter呢?我想利用k8s里部署的prometheus来监控自己pve里一台frp虚机(192.168.1.11)呢?

要实现 K8s 中 Prometheus 监控 PVE 里的 CentOS 7 虚拟机(192.168.1.11),分两步:在 CentOS 7 安装 node-exporter在 K8s 中配置 Prometheus 抓取该外部节点


前置条件

1有k8s环境;
2已经把prometheus应用部署到k8s环境里;

关于如何将prometheus应用部署到k8s环境里,请查看我的另一篇文章,获取完整的部署方法!。

《实战-prometheus部署到k8s-2022.4.29(测试成功)》https://onedayxyy.cn/topic/fhkgp

一、在 CentOS 7(192.168.1.11)安装 node-exporter

1. 下载并安装(推荐手动二进制,稳定可控)

1# 下载最新版(可去 https://prometheus.io/download/ 查最新版本)
2cd /usr/local/bin
3#wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
4#我已存到自己七牛云对象存储里了
5wget https://file.onedayxyy.cn/source/node_exporter-1.9.1.linux-amd64.tar.gz
6
7tar -zxvf node_exporter-1.9.1.linux-amd64.tar.gz
8mv node_exporter-1.9.1.linux-amd64/node_exporter .
9chmod +x node_exporter

2. 配置 systemd 服务(开机自启)

1vim /etc/systemd/system/node_exporter.service

写入:

 1[Unit]
 2Description=Node Exporter
 3After=network.target
 4
 5[Service]
 6User=root
 7ExecStart=/usr/local/bin/node_exporter \
 8  --web.listen-address=0.0.0.0:9100 \
 9  --web.telemetry-path=/metrics
10
11Restart=always
12RestartSec=5
13
14[Install]
15WantedBy=multi-user.target

3. 启动并设置开机自启

1systemctl daemon-reload
2systemctl start node_exporter
3systemctl enable node_exporter
4systemctl status node_exporter

4. 开放防火墙 9100 端口

防火墙如果关闭的话,次步骤可忽略。

1firewall-cmd --permanent --add-port=9100/tcp
2firewall-cmd --reload

5. 验证

1# 看端口监听
2ss -tulnp | grep 9100
3
4# 看指标(在本机或 K8s 节点上执行)
5curl http://192.168.1.11:9100/metrics

能返回文本指标即正常。


二、K8s 中 Prometheus 配置抓取外部 node-exporter

假设你用 Prometheus Operator(kube-prometheus-stack) 部署在 monitoring 命名空间。

方案 A:Service + Endpoints + ServiceMonitor(推荐,Operator 标准方式)(本次忽略)

  1. 创建 Service(无 selector)+ Endpoints(指向 192.168.1.11)

external-node-exporter.yaml

 1apiVersion: v1
 2kind: Service
 3metadata:
 4  name: external-node-exporter
 5  namespace: monitoring
 6  labels:
 7    app: external-node-exporter
 8spec:
 9  type: ClusterIP
10  ports:
11  - name: metrics
12    port: 9100
13    targetPort: 9100
14    protocol: TCP
15
16---
17apiVersion: v1
18kind: Endpoints
19metadata:
20  name: external-node-exporter
21  namespace: monitoring
22  labels:
23    app: external-node-exporter
24subsets:
25- addresses:
26  - ip: 192.168.1.11  # 你的PVE虚机IP
27  ports:
28  - name: metrics
29    port: 9100
  1. 创建 ServiceMonitor
 1apiVersion: monitoring.coreos.com/v1
 2kind: ServiceMonitor
 3metadata:
 4  name: external-node-exporter
 5  namespace: monitoring
 6  labels:
 7    release: prometheus  # 对应你 helm install 的 release name
 8spec:
 9  selector:
10    matchLabels:
11      app: external-node-exporter
12  namespaceSelector:
13    matchNames:
14    - monitoring
15  endpoints:
16  - port: metrics
17    interval: 15s
18    path: /metrics
19    scrapeTimeout: 10s
  1. 应用
1kubectl apply -f external-node-exporter.yaml

方案 B:直接在 Prometheus 配置静态目标(不推荐,Operator 会覆盖)(本次使用)😎

如果你是直接部署 Prometheus Deployment(非 Operator),修改 prometheus.yml

1    # 新增:监控集群外机器
2    - job_name: 'external-nodes'
3      static_configs:
4        - targets:
5            - '192.168.1.11:9100'  # 外部机器1 frp
6      metrics_path: '/metrics'
7      scheme: 'http'

完整配置:

 1# prometheus-cm.yaml
 2apiVersion: v1
 3kind: ConfigMap
 4metadata:
 5  name: prometheus-config
 6  namespace: monitor
 7data:
 8  prometheus.yml: |
 9    global:
10      scrape_interval: 15s
11      scrape_timeout: 15s
12
13    scrape_configs:
14    - job_name: 'prometheus'
15      static_configs:
16        - targets: ['localhost:9090']
17
18    # 新增:监控集群外机器
19    - job_name: 'external-nodes'
20      static_configs:
21        - targets:
22            - '192.168.1.11:9100'  # 外部机器1 frp
23      metrics_path: '/metrics'
24      scheme: 'http'
25
26
27
28    - job_name: 'nodes'
29      kubernetes_sd_configs:
30      - role: node
31      relabel_configs:
32      - source_labels: [__address__]
33        regex: '(.*):10250'
34        replacement: '${1}:9100'
35        target_label: __address__
36        action: replace
37      - action: labelmap
38        regex: __meta_kubernetes_node_label_(.+)
39
40    - job_name: 'kubelet'
41      kubernetes_sd_configs:
42      - role: node
43      scheme: https
44      tls_config:
45        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
46        insecure_skip_verify: true
47      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
48      relabel_configs:
49      - action: labelmap
50        regex: __meta_kubernetes_node_label_(.+)  
51
52    - job_name: 'kubernetes-apiservers'
53      kubernetes_sd_configs:
54      - role: endpoints
55      scheme: https
56      tls_config:
57        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
58        insecure_skip_verify: true
59      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
60      relabel_configs:
61      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
62        action: keep
63        regex: default;kubernetes;https
  • 然后滚动更新 Prometheus:
1#部署
2kubectl apply -f prometheus-cm.yaml
3
4#查看
5kubectl exec prometheus-648d9cc6b4-5mwjz -nmonitor -- cat /etc/prometheus/prometheus.yml
6
7#热更新
8curl -X POST "http://192.168.1.25:31639/-/reload"
  • 验证

首页左上角切换到external-nodesjob:

FAQ

验证与排查

  1. Prometheus UI 查看 Targets

    • 访问 Prometheus service:9090 → Status → Targets
    • 应看到 pve-frp-vm (或 external-node-exporter) 状态为 UP
  2. 网络连通性(在 K8s 节点测试)

    1curl http://192.168.1.11:9100/metrics

    不通:检查 防火墙、路由、FRP 穿透是否放行 9100、PVE 网络是否互通

  3. Grafana 展示

    • 导入 Node Exporter 仪表盘:1860 (Node Exporter Full)
    • 数据源选 Prometheus,即可看到该虚拟机 CPU/内存/磁盘/网络。

FRP 环境注意事项

  • 若 K8s 与 192.168.1.11 不在同一局域网,需在 FRP 客户端配置 穿透 9100 端口
  • 确保 K8s 节点能访问到 192.168.1.11:9100(或 FRP 映射后的公网地址:端口)。

需要我帮你生成 一键安装 node-exporter 的脚本,并根据你的 K8s Prometheus 环境给出可直接 kubectl apply 的完整 YAML 吗?

帮我生成 一键安装 node-exporter 的脚本

下面给你一个 CentOS 7 专用、一键全自动安装 node-exporter 的脚本,复制到服务器上直接运行即可。

扩展:一键安装脚本:install_node_exporter.sh

次脚本自己未亲自测试,仅仅留存。

 1#!/bin/bash
 2
 3# 定义版本
 4VERSION="1.9.1"
 5BINARY="node_exporter-${VERSION}.linux-amd64"
 6TAR_FILE="${BINARY}.tar.gz"
 7DOWNLOAD_URL="https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/${TAR_FILE}"
 8
 9# 下载并解压
10cd /usr/local/src
11echo "下载 node_exporter ${VERSION}..."
12wget -q --show-progress ${DOWNLOAD_URL}
13
14tar zxf ${TAR_FILE}
15cp ${BINARY}/node_exporter /usr/local/bin/
16chmod +x /usr/local/bin/node_exporter
17
18# 清理
19rm -rf ${BINARY} ${TAR_FILE}
20
21# 创建 systemd 服务
22cat > /etc/systemd/system/node_exporter.service <<EOF
23[Unit]
24Description=Node Exporter
25After=network.target
26
27[Service]
28User=root
29ExecStart=/usr/local/bin/node_exporter \
30  --web.listen-address=:9100 \
31  --web.telemetry-path=/metrics
32
33Restart=always
34RestartSec=5
35LimitNOFILE=65536
36
37[Install]
38WantedBy=multi-user.target
39EOF
40
41# 重载服务并启动
42systemctl daemon-reload
43systemctl enable node_exporter
44systemctl start node_exporter
45
46# 防火墙放行 9100
47if systemctl is-active --quiet firewalld; then
48  firewall-cmd --permanent --add-port=9100/tcp
49  firewall-cmd --reload
50fi
51
52# 检查状态
53echo -e "\n=== node_exporter 安装完成 ==="
54systemctl status node_exporter --no-pager
55
56echo -e "\n测试指标接口:"
57curl -s http://localhost:9100/metrics | head -5

😎使用方法

  1. 192.168.1.11 这台 CentOS 7 上新建文件:
1vi install_node_exporter.sh
  1. 粘贴上面全部内容,保存退出。

  2. 加权限并运行:

1chmod +x install_node_exporter.sh
2./install_node_exporter.sh

😎安装完成后验证

1# 查看状态
2systemctl status node_exporter
3
4# 测试指标
5curl http://192.168.1.11:9100/metrics

正常返回一堆 metrics 文本就说明可以被 Prometheus 抓取了。

需要我顺便把 K8s 里抓取这个节点的 ServiceMonitor YAML 也给你生成好吗?直接复制就能用。

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 个人网站:https://onedayxyy.cn/

image-20250109220325748

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

如果你还有疑惑,可以去我的网站查看更多内容或者联系我帮忙查看。

如果你有更好的方式,评论区留言告诉我。谢谢!

好了,本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

结束。

最新文章

文档导航