Dokcer资源限制及监控
Docker资源限制介绍
官网:TP
带有内存、CPU 和 GPU 的运行时选项
默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker 提供了控制容器可以使用多少内存或 CPU 的方法,设置docker run命令的运行时配置标志。本节提供有关何时应该设置此类限制以及设置这些限制的可能影响的详细信息。
其中许多功能需要您的内核支持 Linux 功能。要检查支持,您可以使用该 docker info命令。如果您的内核中禁用了某个功能,您可能会在输出的末尾看到如下警告:
WARNING: no swap limit support
Docker内存限制
## 启动一个没有内存限制的容器
[root@db02 ~]# docker run --name mem_test -it --rm lorel/docker-stress-ng --vm 2
[root@db02 ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
112a99a9e21b cool_wu 0.00% 56KiB / 2.934GiB 0.00% 746B / 0B 1.16MB / 0B 1
e448c744d4ad mem_test 0.09% 514.2MiB / 2.934GiB 17.11% 746B / 0B 0B / 0B 5
## 启动一个做内存限制的容器
docker run --name mem_test_v2 -it --rm -m 200m lorel/docker-stress-ng --vm 2
Docker CPU限制
## 启动一个没有限制CPU的容器
[root@db02 ~]# docker run --name cpu_test -it --rm lorel/docker-stress-ng --cpu 8
## 启动一个做了限制的容器
[root@db02 ~]# docker run --name cpu_test_v2 -it --cpus 1 --rm lorel/docker-stress-ng --cpu 8
## 查看资源使用情况
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ade046ee58a6 cpu_test 440.04% 32.57MiB / 2.919GiB 1.09% 656B / 0B 0B / 0B 9
6a22a8315e9a cpu_test_v2 146.80% 17.85MiB / 2.919GiB 0.60% 656B / 0B 0B / 0B 9
我们资源限制不是目的,目的是我们要随时监控到我们的资源,能看到容器对宿主机资源的使用,才能更好的做限制,不要盲目限制,不知道资源使用的情况下,就对容器资源限制,就是在作死。
Docker监控
docker自带监控命令
docker container ps: 查看正在运行的容器
docker container top:知道某个容器运行了哪些进程
docker container stats:显示每个容器的资源情况
有了上面的命令,我们就可以使用zabbix来监控docker容器了,但是问题就是,zabbix-agent
的端口,我们在宿主机上只能映射出来一个。
解决方案:
1.起多块网卡
2.每个容器装一个zabbix-server
3.修改不同容器的agent端口
4.映射容器的相关文件,然后监控宿主机上的对应文件
5.不用zabbix
CAdvisor + Promethuse + Grafana
cAdvisor介绍
cAdvisor是谷歌开发的容器监控工具,cAdvisor会显示当前host资源使用情况,包括CPU、内存、网络、文件系统等。
不过cAdvisor提供的操作界面略显简陋,而且要在不同的页面之间跳转,并且只能监控一个host,不免让人质疑它的实用性,但是cAdvisor有一个亮点,就是将监控数据导出给其他第三方工具,而且它兼容很多第三方工具,所以我们把它定位成是一个监控数据收集器
,收集和导出是它的强项,而非展示
dokcer stats 可以查看运行的 Docker 镜像的运行状态,例如:这种方式比较原始,因为你无法通过 http 的方式来获取数据,而且没有界面,数据可视化还需要做大量的工作。
由于 dokcer stats 有这些问题,所以 cadvisor 诞生了。 cadvisor 不仅可以搜集一台机器上所有运行的容器信息还提供基础查询界面和 http 接口,方便 Prometheus 进行数据抓取。
prometheus介绍
官网:TP
prometheus是一个非常优秀的监控工具,提供了监控数据的收集、存储、处理、可视化、和告警等一系列完整的监控体系。
组件包含:
Node Exporter:负责收集host硬件和操作系统数据,以容器的形式运行在所有的host上。
cAdvisor:负责收集容器数据,以容器的形式运行在所有的host上。
grafana介绍
grafana是一个支持多种数据源的图形展示工具
支持:
1.MySQL,Oracle,Postgre,es等数据库
2.zabbix,prometheus等监控系统
promethues配置
[root@db01 ~]# cat prometheus.yml
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- 10.0.0.51:8080
- 10.0.0.52:8080
- job_name: prometheus
scrape_interval: 5s
static_configs:
- targets:
- 10.0.0.51:9090
- job_name: node_exporter
scrape_interval: 5s
static_configs:
- targets:
- 10.0.0.51:9100
- 10.0.0.52:9100
第一台docker compose
[root@db01 ~]# cat docker-compose.yml
version: '3.2'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- cadvisor
node-exporter:
image: prom/node-exporter:latest
container_name: node_exporter
ports:
- 9100:9100
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- 3000:3000
第二台 docker compose
[root@db02 ~]# cat docker-compose.yml
version: '3.2'
services:
node-exporter:
image: prom/node-exporter:latest
container_name: node_exporter
ports:
- 9100:9100
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
web页面操作
访问grafana:http://10.0.0.51:3000
用户:admin
密码:admin
添加数据源,选择promethues
## 监控面板文件
https://grafana.com/api/dashboards/10619/revisions/1/download
Comments | 1 条评论
博主 jl
sb