1. Análisis de métodos
- Cada nodo necesita ser monitoreado, por lo que el tipo DaemonSet se puede usar para administrar node_exporter
- Agregue la configuración de tolerancia del nodo (debido a la contaminación establecida en el nodo maestro actual)
- Monte la información del archivo del sistema en la máquina host (para obtener la información del sistema del host de cada nodo)
En segundo lugar, el archivo yaml del pod
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitor
labels:
app: node-exporter
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
hostPID: true
hostIPC: true
hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
containers:
- name: node-exporter
image: prom/node-exporter:v1.0.1
args:
- --web.listen-address=$(HOSTIP):9100
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --path.rootfs=/host/root
- --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+)($|/)
- --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$
ports:
- containerPort: 9100 #对外暴露接口
env:
- name: HOSTIP
valueFrom:
fieldRef:
fieldPath: status.hostIP
resources:
requests:
cpu: 150m
memory: 180Mi
limits:
cpu: 150m
memory: 180Mi
securityContext:
runAsNonRoot: true
runAsUser: 65534
volumeMounts:
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: root
mountPath: /host/root
mountPropagation: HostToContainer
readOnly: true
tolerations:
- operator: "Exists" #设置亏点
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: root
hostPath:
path: /
Tres, sobre cómo conectar los datos de monitoreo de cada nodo a Prometheus
Método 1: agregue el servicio de cada exportador de nodos a la lista de destino mediante configuración estática, como:
- job_name: 'k8s-slave1'
static_configs:
- targets: ['10.3.153.201:9100']
Los problemas causados por los métodos anteriores:
* 集群节点的增删,都需要手动维护列表
* target列表维护量随着集群规模增加
Método 2: configurar un servicio, montar el servicio exportador de nodos en el backend y configurar la dirección del servicio para el destino, como por ejemplo:
Trayendo nuevos problemas, el estado del exportador de nodos de cada nodo no se puede ver visualmente en el objetivo