Kubernetes
一、认识
在 Kubernetes
中部署 Node Exporter
是通过以 DaemonSet
的形式运行它,使其在集群中的每个节点上都能采集指标。以下是基于 Kubernetes
部署 Node Exporter
的详细步骤。
通过在 Kubernetes
中部署 Node Exporter
,您可以轻松收集集群中每个节点的主机级别监控数据。结合 Prometheus
和 Grafana
,可以实现高效的系统性能监控和可视化展示。
二、操作
2.1 同步时间
Chrony
是一款高效且现代化的时间同步工具,适合在虚拟化、容器化或高网络波动的环境中使用。它是 ntpd
的替代方案,并在许多主流发行版中默认提供。Chrony
是 NTP
的轻量级替代品,适合快速时间同步,并且在容器化环境中表现良好。
# 安装 Chrony
sudo yum install -y chrony # CentOS / RHEL
sudo apt install -y chrony # Ubuntu / Debian
# 启动并启用 Chrony 服务
sudo systemctl enable chronyd
sudo systemctl start chronyd
# 同步时间
sudo chronyc sources
sudo chronyc tracking
2.2 创建配置
创建一个 YAML
文件来定义 Node Exporter
的 DaemonSet
和 Service
配置。例如,命名为 node-exporter.yaml
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-exporter
namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-exporter
rules:
- apiGroups: [""]
resources: ["nodes", "nodes/proxy", "services", "endpoints", "pods", "metrics"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: node-exporter
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: node-exporter
subjects:
- kind: ServiceAccount
name: node-exporter
namespace: monitoring
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitoring
labels:
app: node-exporter
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
serviceAccountName: node-exporter
containers:
- name: node-exporter
image: prom/node-exporter:v1.6.1
imagePullPolicy: IfNotPresent
args:
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --collector.filesystem.ignored-mount-points
- "^/(dev|proc|sys|var/lib/docker|var/lib/containerd)($|/)"
ports:
- name: metrics
containerPort: 9100
protocol: TCP
resources:
limits:
cpu: 100m
memory: 50Mi
requests:
cpu: 50m
memory: 30Mi
volumeMounts:
- name: proc
mountPath: /host/proc
readOnly: true
- name: sys
mountPath: /host/sys
readOnly: true
- name: root
mountPath: /rootfs
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
- name: root
hostPath:
path: /
---
apiVersion: v1
kind: Service
metadata:
name: node-exporter
namespace: monitoring
labels:
app: node-exporter
spec:
selector:
app: node-exporter
ports:
- protocol: TCP
port: 9100
targetPort: 9100
type: ClusterIP
2.3 部署服务
将上面的配置文件应用到 Kubernetes
集群中:
kubectl apply -f node-exporter.yaml
2.4 验证状态
1. 检查 Pod
状态
kubectl get pods -n monitoring -o wide
2. 检查 DaemonSet
是否运行正常
kubectl get daemonset -n monitoring
三、配置
3.1 获取指标
配置 Prometheus
抓取 Node Exporter
的指标: 在 Prometheus
的配置文件中(通常是 prometheus.yaml
),添加 node-exporter
的 scrape_configs
:
scrape_configs:
- job_name: "node-exporter"
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
action: keep
regex: node-exporter
- source_labels: [__address__]
target_label: __address__
replacement: $1:9100
重启 Prometheus
,以使其加载新的配置。
3.2 验证指标
验证 Prometheus
中的指标:
-
在
Prometheus Web UI
中,转到Status -> Targets
页面,检查node-exporter
是否为UP
状态。 -
在
Prometheus
的查询页面,尝试查询以下指标:node_memory_MemAvailable_bytes
node_cpu_seconds_total
node_filesystem_size_bytes
四、查看
在 Grafana
中添加 Node Exporter
数据:
-
添加
Prometheus
数据源。 -
导入现成的
Node Exporter
仪表盘:打开Dashboards -> Import
; 在Grafana Dashboards
搜索Node Exporter
; 使用社区提供的Dashboard ID
,例如1860
,导入后即可查看所有主机的监控指标。