8-2 通过Node-Exporter和Cadvisor收集指标数据

发布于:2022-10-17 ⋅ 阅读:(399) ⋅ 点赞:(0)

前言

Node_Exporter是我们最常用的exporter之一,用于收集宿主机的系统指标数据(包括CPU、内存和磁盘),导出的数据多数来源于/proc与/sys信息。默认绑定主机9100端口,并在路径/metrics显示实时信息。

Cadvisor(容器顾问)不仅可以搜集⼀台机器上所有运⾏的容器信息,还提供基础查询界⾯和http接⼝,⽅便其他组件如Prometheus进⾏数据抓取,cadvisor可以对节点机器上的容器进⾏实时监控和性能数据采集,包括容器的CPU使⽤情况、内存使⽤情况、⽹络吞吐量及⽂件系统使⽤情况。



Node_Exporter部署

Node_Exporter可以通过3种方式部署,如下:

  1. 二进制部署node-exporter,可参考 8-1 基于Operator和二进制安装Prometheus系统
  2. docker部署node-exporter
  3. daemonset部署node-exporter

docker部署node-exporter

node-exporter用来监视主机系统,不建议使用docker部署,因为要访问主机系统。docker部署时需要指定主机命名空间等:

docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host

daemonset部署node-exporter

准备镜像node-exporter:v1.3.1

docker pull quay.io/prometheus/node-exporter:v1.3.1
docker tag quay.io/prometheus/node-exporter:v1.3.1 easzlab.io.local:5000/prom/node-exporter:v1.3.1
docker push easzlab.io.local:5000/prom/node-exporter:v1.3.1

node-exporter的yaml文件:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitoring 
  labels:
    k8s-app: node-exporter
spec:
  selector:
    matchLabels:
        k8s-app: node-exporter
  template:
    metadata:
      labels:
        k8s-app: node-exporter
    spec:      
      tolerations:
        # master也安装
        - effect: NoSchedule
          key: node-role.kubernetes.io/master
      containers:
      - image: easzlab.io.local:5000/prom/node-exporter:v1.3.1 
        imagePullPolicy: IfNotPresent
        name: prometheus-node-exporter
        ports:
        - containerPort: 9100
          hostPort: 9100
          protocol: TCP
          name: metrics
        volumeMounts:
        - mountPath: /host/proc
          name: proc
        - mountPath: /host/sys
          name: sys
        - mountPath: /host
          name: rootfs
        args:
        - --path.procfs=/host/proc
        - --path.sysfs=/host/sys
        - --path.rootfs=/host
      volumes:
        # 3个挂载点收集信息
        - name: proc
          hostPath:
            path: /proc
        - name: sys
          hostPath:
            path: /sys
        - name: rootfs
          hostPath:
            path: /
      # 使用宿主机的网络与进程
      hostNetwork: true
      hostPID: true

---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: "true"
  labels:
    k8s-app: node-exporter
  name: node-exporter
  namespace: monitoring 
spec:
  type: NodePort
  ports:
  - name: http
    port: 9100
    # 上面使用了hostNetwork,该端口无效,仅做测试。
    nodePort: 39100
    protocol: TCP
  selector:
    k8s-app: node-exporter

通过浏览器访问节点9100端口查看部署情况:

在这里插入图片描述



Cadvisor部署

Cadvisor可以通过2种方式部署,如下:

  1. docker部署cadvisor
  2. daemonset部署cadvisor

docker部署cadvisor

准备镜像cadvisor-v0.39.2

docker load -i cadvisor-v0.39.2.tar.gz
docker tag gcr.io/cadvisor/cadvisor:v0.39.2 easzlab.io.local:5000/prom/cadvisor:v0.39.2
docker push easzlab.io.local:5000/prom/cadvisor:v0.39.2

运行docker,根据不同运行时挂载目录:

sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  # 使用docker运行时则挂载以下路径
  # --volume=/var/lib/docker/:/var/lib/docker:ro \
  # 使用containerd运行时则挂载以下路径
  --volume=/var/lib/containerd/:/var/lib/containerd:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  easzlab.io.local:5000/prom/cadvisor:v0.39.2

访问主机8080端口,查看部署情况:

在这里插入图片描述

访问8080/metrics显示文本界面。

在这里插入图片描述

daemonset部署cadvisor

cadvisor的yaml文件:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cadvisor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: cAdvisor
  template:
    metadata:
      labels:
        app: cAdvisor
    spec:
      tolerations:    #污点容忍,忽略master的NoSchedule
        - effect: NoSchedule
          key: node-role.kubernetes.io/master
      hostNetwork: true
      restartPolicy: Always   # 重启策略
      containers:
      - name: cadvisor
        image: easzlab.io.local:5000/prom/cadvisor:v0.39.2
        imagePullPolicy: IfNotPresent  # 镜像策略
        ports:
        - containerPort: 8080
        volumeMounts:
          - name: root
            mountPath: /rootfs
          - name: run
            mountPath: /var/run
          - name: sys
            mountPath: /sys
          - name: docker
            mountPath: /var/lib/containerd
      volumes:
      - name: root
        hostPath:
          path: /
      - name: run
        hostPath:
          path: /var/run
      - name: sys
        hostPath:
          path: /sys
      - name: docker
        hostPath:
          path: /var/lib/containerd

apply执行后,查看pod启动情况:

kubectl get pod -n monitoring

cadvisor-59w7q                         1/1     Running   0               20s
cadvisor-tksbk                         1/1     Running   0               20s
cadvisor-wqx6j                         1/1     Running   0               20s
cadvisor-x6pfx                         1/1     Running   0               20s
cadvisor-z5dk8                         1/1     Running   0               20s
cadvisor-zm9v4                         1/1     Running   0               20s

下一节,我们将Node-Exporter和Cadvisor导入Prometheus,并在Grafana展示。




网站公告

今日签到

点亮在社区的每一天
去签到