Cadvisor部署
cadvisor项目地址:https://github.com/google/cadvisor
cadvisor可以对节点上的容器进行实时监控和数据采集,包括容器的cpu、内存使用情况、网络吞吐量和文件系统使用量等。
可以通过下面这两种方式来部署cadvisor:
- 以容器方式直接运行在节点上
- 以daemonset方式部署,仅限k8s环境
容器部署cadvisor
docker run -it -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
coolstar007/cadvisor-amd64:v0.46.0
#如果主机上直接使用containerd没有docker,可以将/var/lib/docker卷替换为/var/lib/containerd
--volume=/var/lib/containerd:/var/lib/containerd:ro
容器启动之后,访问主机8080端口测试
daemonset部署cadvisor
部署yaml文件如下:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: cadvisor
namespace: monitoring
spec:
selector:
matchLabels:
app: cadvisor
template:
metadata:
labels:
app: cadvisor
spec:
hostNetwork: true
restartPolicy: Always
containers:
- name: cadvisor
image: harbor-server.linux.io/prometheus/cadvisor-amd64:v0.46.0
imagePullPolicy: IfNotPresent
volumeMounts:
- name: root
mountPath: /rootfs
- name: run
mountPath: /var/run
- name: sys
mountPath: /sys
- name: containerd
mountPath: /var/lib/containerd
volumes:
- name: root
hostPath:
path: /
- name: run
hostPath:
path: /var/run
- name: sys
hostPath:
path: /sys
- name: containerd
hostPath:
path: /var/lib/containerd
将其创建到集群上,然后等待Pod就绪
通过k8s集群中每个节点8080端口访问cadvisor测试
如果都可以访问就表示cadvisor已经运行
Prometheus配置
修改Pormetheus配置,添加job 收集node-exporter和sadvisor数据
$ vim /usr/local/prometheus/prometheus.yml
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
#添加两个job配置
-job_name: "prometheus node-exporter"
static_configs:
- targets: ["192.168.122.21:9100", "192.168.122.22:9100", "192.168.122.23:9100"]
- job_name: "k8s-node-cadvisor"
static_configs:
- targets: ["192.168.122.5:8080", "192.168.122.6:8080", "192.168.122.7:8080", "192.168.122.11:8080", "192.168.122.12:8080", "192.168.122.13:8080"]
重新加载配置
#发送POST请求重载配置,需要prometheus启用--web.enable-lifecycle选项
curl -X POST http://192.168.122.21:9090/-/reload
#或者重启服务也可以,二选1
systemctl restart prometheus
prometheus界面上查看targets状态
Grafana展示数据
grafana配置node-exporter模板
grafana官网已经提供了许多模板,我们可以下载自己需要的模板,然后导入本地grafana。官网地址:https://grafana.com/grafana/dashboards/
以node-exporter模板为例,首先在官网搜索
然后选择需要的模板,点击查看详情
下载此模板对应的json文件,然后导入grafana
模板导入支持3种方式:
- 下载模板对应的json文件,然后上传json文件导入
- 使用模板ID在线导入,需要Grafana连接外网
- 直接编辑模板的json字符串然后导入
导入成功就会跳转到监控数据页面来查看数据
grafana配置cadvisor模板
在官网寻找合适的模板,这里选择的模板是下面这个,ID是15798
下载模板对应的json文件,然后导入Grafana
或者使用ID为14282的模板也可以