背景
一句话说明需求:
- Prometheus监控单台容器,而不是K8S集群时,推荐使用cAdvisor。
- 使用cAdvisor容器监控docker容器指标,需要拉取来自DockerHub或gcr.io的cAdvisor镜像。
- cAdvisor镜像的不同版本差异较大。
一句话说明解决:
- 拉取不同版本的cAdvisor镜像,创建监控容器后,并进行指标对比。
短话长说:
- 使用Prometheus监控非K8S的docker服务器有必要使用cadvisor。但Docker和Google两家公司之间不对付,因此Google已经停止在K8S中使用docker(这个是旧闻),而cadvisor在DockerHub上的镜像仓库也已经两年没更新,cadvisor镜像更是五年都没有更新,且已经在DockerHub仓库首页说明“已停用google/cadvisor仓库,使用cadvisor镜像请到gcr.io/cadvisor/cadvisor(谷歌自己家的镜像仓库)”。
参考链接
【Docker公司:DockerHub上的Google官方镜像仓库】
【Google公司:gcr.io上的cAdvisor镜像仓库】
【GitHub:Google官方cAdvisor代码仓库】
实际操作
从DockerHub拉取镜像,监控容器
- 在安装有DockerDesktop的Windows服务器上拉取cadvisor镜像,打包成tar文件。
Windows终端执行以下命令。
PS C:\Users\Czm> docker pull google/cadvisor
PS C:\Users\Czm> docker save google/cadvisor:latest -o d:/googleCadvisorLatest231010.tar
- 上传tar文件到Linux服务器,在Linux本地加载镜像。
docker load -i googleCadvisorLatest231010.tar
Loaded image: google/cadvisor:latest
- 手动创建cadviso容器监控其它docker容器。
参考官方说明【GitHub:Google官方cAdvisor代码仓库】,修改docker run命令。
docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk:/dev/disk:ro -p 8082:8080 -d --name=cadvisor google/cadvisor:latest
命令无误的话,可查看容器是否运行正常。
[root@control-plane prometheus]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a533a25351b6 google/cadvisor:latest "/usr/bin/cadvisor -…" 3 seconds ago Up 1 second 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp cadvisor
a85dd0af08d3 setzero/kubeadm-ha:1.22.4-amd64 "tini -- /bin/sh -c …" 7 months ago Up 2 months 0.0.0.0:12480->80/tcp, :::12480->80/tcp kubeadm-ha
访问web之前记得开放防火墙策略。
[root@control-plane prometheus]# firewall-cmd --zone=public --add-port=8082/tcp --permanent
success
[root@control-plane prometheus]# firewall-cmd --reload
success
- 访问web界面查看相关指标。
从gcr.io拉取镜像,监控容器
- 在安装有DockerDesktop的Windows服务器上拉取cadvisor镜像,打包成tar文件。
PS C:\Users\Czm> docker pull gcr.io/cadvisor/cadvisor:v0.47.2
PS C:\Users\Czm> docker save gcr.io/cadvisor/cadvisor:v0.47.2 -o d:/gcr.ioCadvisorV0.47.2_20230627.tar
- 上传tar文件到Linux服务器,在Linux本地加载镜像。
docker load -i gcr.ioCadvisorV0.47.2_20230627.tar
- 手动创建cadviso容器监控其它docker容器,指定不同的web端口。
docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk:/dev/disk:ro -p 8083:8080 -d --name=cadvisor-0472 gcr.io/cadvisor/cadvisor:v0.47.2
记得放通防火墙策略
firewall-cmd --zone=public --add-port=8083/tcp --permanent
firewall-cmd --reload
-
访问web界面查看相关指标,对比来自不同仓库、不同版本的cadvisor容器监控指标有何不同。
-
结合Prometheus创建job获取各个容器的监控指标。
(此处不讨论Prometheus,详情请参考我的其它文章)
cadvisor镜像文件下载地址
【gcr.ioCadvisorV0.47.2_20230627.tar】
【googleCadvisorLatest231010.tar】
结束
确实有些场景,比如docker-compose运行的Harbor服务器就并非K8S集群,需要通过cAdvisor监控容器。