Prometheus 之 Kubernetes節點的監控

1、方法分析

  • 每一個節點都須要監控,所以可使用DaemonSet類型來管理node_exporter
  • 添加節點的容忍配置(因當前master節點設置了污點)
  • 掛載宿主機中的系統文件信息(用以獲取每一個節點的主機的系統信息,node_exporter容器配置須要)

2、將node-exporter運行在每一個節點上

參考網址:https://github.com/prometheus/nodeexporternode

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: /

Prometheus  之  Kubernetes節點的監控

3、關於如何把各節點的監控數據對接到Prometheus

方法一:把每一個node-exporter的服務以靜態配置的方法添加到target列表中,如:

- job_name: 'k8s-slave1'
      static_configs:
      - targets: ['10.3.153.201:9100']

Prometheus  之  Kubernetes節點的監控

以上方法帶來的問題:

* 集羣節點的增刪,都須要手動維護列表
* target列表維護量隨着集羣規模增長

方法二:配置一個Service,後端掛載node-exporter的服務,把Service的地址配置到target中,如:

apiVersion: v1
kind: Service
metadata:
  name: node-svc
  namespace: monitor
spec:
  ports:
  - port: 9100
    protocol: TCP
    targetPort: 9100
  selector:
    app: node-exporter   #此處需與node-export的deployment的標籤選擇器一致
  type: ClusterIP

Prometheus  之  Kubernetes節點的監控

#配置job(即修改prometheus配置文件)linux

- job_name: 'nodes-exporter'
      static_configs:
      - targets: ['10.103.52.167:9100']

Prometheus  之  Kubernetes節點的監控

Prometheus  之  Kubernetes節點的監控

以上方法帶來問題:target中沒法直觀的看到各節點node-exporter的狀態

備註:以上兩種方法,均沒法很好實現node節點的監控需求,所以引生出服務發現服務功能。

4、服務自動發現功能

以前已經給Prometheus配置了RBAC,有讀取node的權限,所以Prometheus能夠去調用Kubernetes API獲取node信息,因此Prometheus經過與 Kubernetes API 集成,提供了內置的服務發現分別是:Node、Service、Pod、Endpoints、Ingressgit

一、簡單配置Job測試效果(在prometheus配置文件下增長以下內容)github

- job_name: 'kubernetes-sd-node-exporter'
      kubernetes_sd_configs:
        - role: node

Prometheus  之  Kubernetes節點的監控

Prometheus  之  Kubernetes節點的監控

二、爲何請求訪問的地址不是9100
默認訪問的地址是http://node-ip/10250/metrics,10250是kubelet API的服務端口,說明Prometheus的node類型的服務發現模式,默認是和kubelet的10250綁定的,而咱們是指望使用node-exporter做爲採集的指標來源,所以須要把訪問的endpoint替換成http://node-ip:9100/metrics。web

三、Prometheus提供了relabeling的能力(即更改Endpoint請求連接)
查看Target的Label列,能夠發現,每一個target對應會有不少Before Relabeling的標籤,這些__開頭的label是系統內部使用,不會存儲到樣本的數據裏,即:
Prometheus  之  Kubernetes節點的監控docker

四、修上面的JOB配置(經過正則重寫address)後端

- job_name: 'kubernetes-sd-node-exporter'
      kubernetes_sd_configs:
        - role: node
      relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):10250'
        replacement: '${1}:9100'
        target_label: __address__
        action: replace

五、檢查效果
Prometheus  之  Kubernetes節點的監控
已可自動發現各個節點,並可清晰展現各數據
Prometheus  之  Kubernetes節點的監控api

相關文章
相關標籤/搜索