跳到主要内容

Kubernetes

2024年12月24日
柏拉文
越努力,越幸运

一、认识


Kubernetes 中部署 Node Exporter 是通过以 DaemonSet 的形式运行它,使其在集群中的每个节点上都能采集指标。以下是基于 Kubernetes 部署 Node Exporter 的详细步骤。

通过在 Kubernetes 中部署 Node Exporter,您可以轻松收集集群中每个节点的主机级别监控数据。结合 PrometheusGrafana,可以实现高效的系统性能监控和可视化展示。

二、操作


2.1 同步时间

Chrony 是一款高效且现代化的时间同步工具,适合在虚拟化、容器化或高网络波动的环境中使用。它是 ntpd 的替代方案,并在许多主流发行版中默认提供。ChronyNTP 的轻量级替代品,适合快速时间同步,并且在容器化环境中表现良好。

# 安装 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 ExporterDaemonSetService 配置。例如,命名为 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-exporterscrape_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 中的指标:

  1. Prometheus Web UI 中,转到 Status -> Targets 页面,检查 node-exporter 是否为 UP 状态。

  2. Prometheus 的查询页面,尝试查询以下指标:

    node_memory_MemAvailable_bytes
    node_cpu_seconds_total
    node_filesystem_size_bytes

四、查看


Grafana 中添加 Node Exporter 数据:

  1. 添加 Prometheus 数据源。

  2. 导入现成的 Node Exporter 仪表盘:打开 Dashboards -> Import; 在 Grafana Dashboards 搜索 Node Exporter; 使用社区提供的 Dashboard ID,例如 1860,导入后即可查看所有主机的监控指标。