參考網址: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: /
- job_name: 'k8s-slave1' static_configs: - targets: ['10.3.153.201:9100']
* 集羣節點的增刪,都須要手動維護列表 * 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
#配置job(即修改prometheus配置文件)linux
- job_name: 'nodes-exporter' static_configs: - targets: ['10.103.52.167:9100']
以前已經給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
二、爲何請求訪問的地址不是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是系統內部使用,不會存儲到樣本的數據裏,即: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
五、檢查效果
已可自動發現各個節點,並可清晰展現各數據api