当前位置:   article > 正文

node-exporter安装_node exporter

node exporter

node-exporter可以提供相当丰富的系统资源指标,在指标收集中有举足轻重的地位。编写文章之时所参考的文档和相关操作都是有效的,但是软件版本更新很快,不应完全照抄。

1. node-exporter部署:

参考博客:https://www.wqblogs.com/2020/04/17/k8s%E9%83%A8%E7%BD%B2node-exporter/#%E4%BA%A4%E4%BB%98node-exporter

  1. # node_exporter.yaml
  2. apiVersion: apps/v1
  3. kind: DaemonSet
  4. metadata:
  5. name: node-exporter
  6. namespace: default
  7. labels:
  8. name: node-exporter # 注意放在恰当的命名空间中
  9. spec:
  10. selector:
  11. matchLabels:
  12. name: node-exporter
  13. template:
  14. metadata:
  15. labels:
  16. name: node-exporter
  17. spec:
  18. hostPID: true
  19. hostIPC: true
  20. hostNetwork: true
  21. containers:
  22. - name: node-exporter
  23. image: prom/node-exporter:v1.0.1 # 注意用相对较新的版本
  24. ports:
  25. - containerPort: 9100
  26. resources:
  27. requests:
  28. cpu: 0.15
  29. securityContext:
  30. privileged: true
  31. args:
  32. - --path.procfs
  33. - /host/proc
  34. - --path.sysfs
  35. - /host/sys
  36. - --collector.filesystem.ignored-mount-points
  37. - '"^/(sys|proc|dev|host|etc)($|/)"'
  38. volumeMounts:
  39. - name: dev
  40. mountPath: /host/dev
  41. - name: proc
  42. mountPath: /host/proc
  43. - name: sys
  44. mountPath: /host/sys
  45. - name: rootfs
  46. mountPath: /rootfs
  47. tolerations:
  48. - key: "node-role.kubernetes.io/master"
  49. operator: "Exists"
  50. effect: "NoSchedule"
  51. volumes:
  52. - name: proc
  53. hostPath:
  54. path: /proc
  55. - name: dev
  56. hostPath:
  57. path: /dev
  58. - name: sys
  59. hostPath:
  60. path: /sys
  61. - name: rootfs
  62. hostPath:
  63. path: /

2. 查看node-exporter使用的IP

kubectl get pods -o wide # 查看node-exporter使用的ip,端口在上面的配置文件中写了:9100

3. Prometheus中配置node-exporter

目标是在scrape_configs中配置job

  1. - job_name: node-exporter
  2. honor_timestamps: true
  3. scrape_interval: 30s
  4. scrape_timeout: 10s
  5. metrics_path: /metrics
  6. scheme: http
  7. static_configs:
  8. - targets:
  9. - 192.168.39.170:9100 # 从第二步中获取

这是Prometheus的yaml配置文件整体,除了node-exporter的job是自行田间,其他都是istio提供的Prometheus配置文件默认内容。下面是配置文件的整体:

  1. # prometheus.yaml
  2. ---
  3. # Source: prometheus/templates/server/serviceaccount.yaml
  4. apiVersion: v1
  5. kind: ServiceAccount
  6. metadata:
  7. labels:
  8. component: "server"
  9. app: prometheus
  10. release: prometheus
  11. chart: prometheus-11.16.2
  12. heritage: Helm
  13. name: prometheus
  14. namespace: istio-system
  15. annotations:
  16. {}
  17. ---
  18. # Source: prometheus/templates/server/cm.yaml
  19. apiVersion: v1
  20. kind: ConfigMap
  21. metadata:
  22. labels:
  23. component: "server"
  24. app: prometheus
  25. release: prometheus
  26. chart: prometheus-11.16.2
  27. heritage: Helm
  28. name: prometheus
  29. namespace: istio-system
  30. data:
  31. alerting_rules.yml: |
  32. {}
  33. alerts: |
  34. {}
  35. prometheus.yml: |
  36. global:
  37. evaluation_interval: 1m
  38. scrape_interval: 1m
  39. scrape_timeout: 10s
  40. rule_files:
  41. - /etc/config/recording_rules.yml
  42. - /etc/config/alerting_rules.yml
  43. - /etc/config/rules
  44. - /etc/config/alerts
  45. scrape_configs:
  46. - job_name: prometheus
  47. static_configs:
  48. - targets:
  49. - localhost:9090
  50. - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  51. job_name: kubernetes-apiservers
  52. kubernetes_sd_configs:
  53. - role: endpoints
  54. relabel_configs:
  55. - action: keep
  56. regex: default;kubernetes;https
  57. source_labels:
  58. - __meta_kubernetes_namespace
  59. - __meta_kubernetes_service_name
  60. - __meta_kubernetes_endpoint_port_name
  61. scheme: https
  62. tls_config:
  63. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  64. insecure_skip_verify: true
  65. - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  66. job_name: kubernetes-nodes
  67. kubernetes_sd_configs:
  68. - role: node
  69. relabel_configs:
  70. - action: labelmap
  71. regex: __meta_kubernetes_node_label_(.+)
  72. - replacement: kubernetes.default.svc:443
  73. target_label: __address__
  74. - regex: (.+)
  75. replacement: /api/v1/nodes/$1/proxy/metrics
  76. source_labels:
  77. - __meta_kubernetes_node_name
  78. target_label: __metrics_path__
  79. scheme: https
  80. tls_config:
  81. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  82. insecure_skip_verify: true
  83. - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  84. job_name: kubernetes-nodes-cadvisor
  85. kubernetes_sd_configs:
  86. - role: node
  87. relabel_configs:
  88. - action: labelmap
  89. regex: __meta_kubernetes_node_label_(.+)
  90. - replacement: kubernetes.default.svc:443
  91. target_label: __address__
  92. - regex: (.+)
  93. replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
  94. source_labels:
  95. - __meta_kubernetes_node_name
  96. target_label: __metrics_path__
  97. scheme: https
  98. tls_config:
  99. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  100. insecure_skip_verify: true
  101. - job_name: kubernetes-service-endpoints
  102. kubernetes_sd_configs:
  103. - role: endpoints
  104. relabel_configs:
  105. - action: keep
  106. regex: true
  107. source_labels:
  108. - __meta_kubernetes_service_annotation_prometheus_io_scrape
  109. - action: replace
  110. regex: (https?)
  111. source_labels:
  112. - __meta_kubernetes_service_annotation_prometheus_io_scheme
  113. target_label: __scheme__
  114. - action: replace
  115. regex: (.+)
  116. source_labels:
  117. - __meta_kubernetes_service_annotation_prometheus_io_path
  118. target_label: __metrics_path__
  119. - action: replace
  120. regex: ([^:]+)(?::\d+)?;(\d+)
  121. replacement: $1:$2
  122. source_labels:
  123. - __address__
  124. - __meta_kubernetes_service_annotation_prometheus_io_port
  125. target_label: __address__
  126. - action: labelmap
  127. regex: __meta_kubernetes_service_label_(.+)
  128. - action: replace
  129. source_labels:
  130. - __meta_kubernetes_namespace
  131. target_label: kubernetes_namespace
  132. - action: replace
  133. source_labels:
  134. - __meta_kubernetes_service_name
  135. target_label: kubernetes_name
  136. - action: replace
  137. source_labels:
  138. - __meta_kubernetes_pod_node_name
  139. target_label: kubernetes_node
  140. - job_name: kubernetes-service-endpoints-slow
  141. kubernetes_sd_configs:
  142. - role: endpoints
  143. relabel_configs:
  144. - action: keep
  145. regex: true
  146. source_labels:
  147. - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
  148. - action: replace
  149. regex: (https?)
  150. source_labels:
  151. - __meta_kubernetes_service_annotation_prometheus_io_scheme
  152. target_label: __scheme__
  153. - action: replace
  154. regex: (.+)
  155. source_labels:
  156. - __meta_kubernetes_service_annotation_prometheus_io_path
  157. target_label: __metrics_path__
  158. - action: replace
  159. regex: ([^:]+)(?::\d+)?;(\d+)
  160. replacement: $1:$2
  161. source_labels:
  162. - __address__
  163. - __meta_kubernetes_service_annotation_prometheus_io_port
  164. target_label: __address__
  165. - action: labelmap
  166. regex: __meta_kubernetes_service_label_(.+)
  167. - action: replace
  168. source_labels:
  169. - __meta_kubernetes_namespace
  170. target_label: kubernetes_namespace
  171. - action: replace
  172. source_labels:
  173. - __meta_kubernetes_service_name
  174. target_label: kubernetes_name
  175. - action: replace
  176. source_labels:
  177. - __meta_kubernetes_pod_node_name
  178. target_label: kubernetes_node
  179. scrape_interval: 5m
  180. scrape_timeout: 30s
  181. - honor_labels: true
  182. job_name: prometheus-pushgateway
  183. kubernetes_sd_configs:
  184. - role: service
  185. relabel_configs:
  186. - action: keep
  187. regex: pushgateway
  188. source_labels:
  189. - __meta_kubernetes_service_annotation_prometheus_io_probe
  190. - job_name: kubernetes-services
  191. kubernetes_sd_configs:
  192. - role: service
  193. metrics_path: /probe
  194. params:
  195. module:
  196. - http_2xx
  197. relabel_configs:
  198. - action: keep
  199. regex: true
  200. source_labels:
  201. - __meta_kubernetes_service_annotation_prometheus_io_probe
  202. - source_labels:
  203. - __address__
  204. target_label: __param_target
  205. - replacement: blackbox
  206. target_label: __address__
  207. - source_labels:
  208. - __param_target
  209. target_label: instance
  210. - action: labelmap
  211. regex: __meta_kubernetes_service_label_(.+)
  212. - source_labels:
  213. - __meta_kubernetes_namespace
  214. target_label: kubernetes_namespace
  215. - source_labels:
  216. - __meta_kubernetes_service_name
  217. target_label: kubernetes_name
  218. - job_name: kubernetes-pods
  219. kubernetes_sd_configs:
  220. - role: pod
  221. relabel_configs:
  222. - action: keep
  223. regex: true
  224. source_labels:
  225. - __meta_kubernetes_pod_annotation_prometheus_io_scrape
  226. - action: replace
  227. regex: (.+)
  228. source_labels:
  229. - __meta_kubernetes_pod_annotation_prometheus_io_path
  230. target_label: __metrics_path__
  231. - action: replace
  232. regex: ([^:]+)(?::\d+)?;(\d+)
  233. replacement: $1:$2
  234. source_labels:
  235. - __address__
  236. - __meta_kubernetes_pod_annotation_prometheus_io_port
  237. target_label: __address__
  238. - action: labelmap
  239. regex: __meta_kubernetes_pod_label_(.+)
  240. - action: replace
  241. source_labels:
  242. - __meta_kubernetes_namespace
  243. target_label: kubernetes_namespace
  244. - action: replace
  245. source_labels:
  246. - __meta_kubernetes_pod_name
  247. target_label: kubernetes_pod_name
  248. - action: drop
  249. regex: Pending|Succeeded|Failed
  250. source_labels:
  251. - __meta_kubernetes_pod_phase
  252. - job_name: kubernetes-pods-slow
  253. kubernetes_sd_configs:
  254. - role: pod
  255. relabel_configs:
  256. - action: keep
  257. regex: true
  258. source_labels:
  259. - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow
  260. - action: replace
  261. regex: (.+)
  262. source_labels:
  263. - __meta_kubernetes_pod_annotation_prometheus_io_path
  264. target_label: __metrics_path__
  265. - action: replace
  266. regex: ([^:]+)(?::\d+)?;(\d+)
  267. replacement: $1:$2
  268. source_labels:
  269. - __address__
  270. - __meta_kubernetes_pod_annotation_prometheus_io_port
  271. target_label: __address__
  272. - action: labelmap
  273. regex: __meta_kubernetes_pod_label_(.+)
  274. - action: replace
  275. source_labels:
  276. - __meta_kubernetes_namespace
  277. target_label: kubernetes_namespace
  278. - action: replace
  279. source_labels:
  280. - __meta_kubernetes_pod_name
  281. target_label: kubernetes_pod_name
  282. - action: drop
  283. regex: Pending|Succeeded|Failed
  284. source_labels:
  285. - __meta_kubernetes_pod_phase
  286. scrape_interval: 5m
  287. scrape_timeout: 30s
  288. - job_name: node-exporter
  289. honor_timestamps: true
  290. scrape_interval: 30s
  291. scrape_timeout: 10s
  292. metrics_path: /metrics
  293. scheme: http
  294. static_configs:
  295. - targets:
  296. - 127.0.0.1:9100
  297. - 192.168.39.170:9100
  298. recording_rules.yml: |
  299. {}
  300. rules: |
  301. {}
  302. ---
  303. # Source: prometheus/templates/server/clusterrole.yaml
  304. apiVersion: rbac.authorization.k8s.io/v1
  305. kind: ClusterRole
  306. metadata:
  307. labels:
  308. component: "server"
  309. app: prometheus
  310. release: prometheus
  311. chart: prometheus-11.16.2
  312. heritage: Helm
  313. name: prometheus
  314. rules:
  315. - apiGroups:
  316. - ""
  317. resources:
  318. - nodes
  319. - nodes/proxy
  320. - nodes/metrics
  321. - services
  322. - endpoints
  323. - pods
  324. - ingresses
  325. - configmaps
  326. verbs:
  327. - get
  328. - list
  329. - watch
  330. - apiGroups:
  331. - "extensions"
  332. - "networking.k8s.io"
  333. resources:
  334. - ingresses/status
  335. - ingresses
  336. verbs:
  337. - get
  338. - list
  339. - watch
  340. - nonResourceURLs:
  341. - "/metrics"
  342. verbs:
  343. - get
  344. ---
  345. # Source: prometheus/templates/server/clusterrolebinding.yaml
  346. apiVersion: rbac.authorization.k8s.io/v1
  347. kind: ClusterRoleBinding
  348. metadata:
  349. labels:
  350. component: "server"
  351. app: prometheus
  352. release: prometheus
  353. chart: prometheus-11.16.2
  354. heritage: Helm
  355. name: prometheus
  356. subjects:
  357. - kind: ServiceAccount
  358. name: prometheus
  359. namespace: istio-system
  360. roleRef:
  361. apiGroup: rbac.authorization.k8s.io
  362. kind: ClusterRole
  363. name: prometheus
  364. ---
  365. # Source: prometheus/templates/server/service.yaml
  366. apiVersion: v1
  367. kind: Service
  368. metadata:
  369. labels:
  370. component: "server"
  371. app: prometheus
  372. release: prometheus
  373. chart: prometheus-11.16.2
  374. heritage: Helm
  375. name: prometheus
  376. namespace: istio-system
  377. spec:
  378. ports:
  379. - name: http
  380. port: 9090
  381. protocol: TCP
  382. targetPort: 9090
  383. selector:
  384. component: "server"
  385. app: prometheus
  386. release: prometheus
  387. sessionAffinity: None
  388. type: "ClusterIP"
  389. ---
  390. # Source: prometheus/templates/server/deploy.yaml
  391. apiVersion: apps/v1
  392. kind: Deployment
  393. metadata:
  394. labels:
  395. component: "server"
  396. app: prometheus
  397. release: prometheus
  398. chart: prometheus-11.16.2
  399. heritage: Helm
  400. name: prometheus
  401. namespace: istio-system
  402. spec:
  403. selector:
  404. matchLabels:
  405. component: "server"
  406. app: prometheus
  407. release: prometheus
  408. replicas: 1
  409. template:
  410. metadata:
  411. annotations:
  412. sidecar.istio.io/inject: "false"
  413. labels:
  414. component: "server"
  415. app: prometheus
  416. release: prometheus
  417. chart: prometheus-11.16.2
  418. heritage: Helm
  419. spec:
  420. serviceAccountName: prometheus
  421. containers:
  422. - name: prometheus-server-configmap-reload
  423. image: "jimmidyson/configmap-reload:v0.4.0"
  424. imagePullPolicy: "IfNotPresent"
  425. args:
  426. - --volume-dir=/etc/config
  427. - --webhook-url=http://127.0.0.1:9090/-/reload
  428. resources:
  429. {}
  430. volumeMounts:
  431. - name: config-volume
  432. mountPath: /etc/config
  433. readOnly: true
  434. - name: prometheus-server
  435. image: "prom/prometheus:v2.21.0"
  436. imagePullPolicy: "IfNotPresent"
  437. args:
  438. - --storage.tsdb.retention.time=60d
  439. - --config.file=/etc/config/prometheus.yml
  440. - --storage.tsdb.path=/data
  441. - --web.console.libraries=/etc/prometheus/console_libraries
  442. - --web.console.templates=/etc/prometheus/consoles
  443. - --web.enable-lifecycle
  444. ports:
  445. - containerPort: 9090
  446. readinessProbe:
  447. httpGet:
  448. path: /-/ready
  449. port: 9090
  450. initialDelaySeconds: 0
  451. periodSeconds: 5
  452. timeoutSeconds: 30
  453. failureThreshold: 3
  454. successThreshold: 1
  455. livenessProbe:
  456. httpGet:
  457. path: /-/healthy
  458. port: 9090
  459. initialDelaySeconds: 30
  460. periodSeconds: 15
  461. timeoutSeconds: 30
  462. failureThreshold: 3
  463. successThreshold: 1
  464. resources:
  465. {}
  466. volumeMounts:
  467. - name: config-volume
  468. mountPath: /etc/config
  469. - name: storage-volume
  470. mountPath: /data
  471. subPath: ""
  472. securityContext:
  473. fsGroup: 65534
  474. runAsGroup: 65534
  475. runAsNonRoot: true
  476. runAsUser: 65534
  477. terminationGracePeriodSeconds: 300
  478. volumes:
  479. - name: config-volume
  480. configMap:
  481. name: prometheus
  482. - name: storage-volume
  483. emptyDir:
  484. {}

4. 端口暴露:

端口暴露要注意,使用 minikube tunnel暴露集群的服务,都可以在主机上访问。

但是使用端口转发时,因为有些本身是只通过tunnel访问的(没有外在的负载均衡器),再通过ssh的隧道转发,是无法在本地访问的——如Prometheus

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &

使用如上命令将Prometheus的服务转发出来后,可以用local forward将localhost:9090或者PROMETHEUS_IP:9090进行转发,这样可以在本地访问的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/378678
推荐阅读
相关标签
  

闽ICP备14008679号