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上。

file

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

山林不向四季起誓 荣枯随缘