文章目录
前言
Node_Exporter是我们最常用的exporter之一,用于收集宿主机的系统指标数据(包括CPU、内存和磁盘),导出的数据多数来源于/proc与/sys信息。默认绑定主机9100端口,并在路径/metrics显示实时信息。
Cadvisor(容器顾问)不仅可以搜集⼀台机器上所有运⾏的容器信息,还提供基础查询界⾯和http接⼝,⽅便其他组件如Prometheus进⾏数据抓取,cadvisor可以对节点机器上的容器进⾏实时监控和性能数据采集,包括容器的CPU使⽤情况、内存使⽤情况、⽹络吞吐量及⽂件系统使⽤情况。
Node_Exporter部署
Node_Exporter可以通过3种方式部署,如下:
- 二进制部署node-exporter,可参考 8-1 基于Operator和二进制安装Prometheus系统
- docker部署node-exporter
- 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种方式部署,如下:
- docker部署cadvisor
- 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展示。