docker综合应用
1.容器资源限制
官网文档
https://docs.docker.com/config/containers/resource_constraints/

2.docker内存限制

-m或者--memory= 容器可以使用的最大内存量。如果设置此选项,则允许的最小值为6m(6 兆字节)。也就是说,您必须将该值设置为至少 6 兆字节。
--oom-kill-disable 默认情况下,如果发生内存不足 (OOM) 错误,内核会终止容器中的进程。要更改此行为,请使用该--oom-kill-disable选项。仅在您还设置了该-m/--memory选项的容器上禁用 OOM 杀手。如果-m未设置该标志,主机可能会耗尽内存,内核可能需要终止主机系统的进程以释放内存。
下载性能压测工具
1.安装
docker pull lorel/docker-stress-ng
2.查看压测工具帮助信息
[root@docker-200 ~]#docker run --name mem_test -it --rm lorel/docker-stress-ng |grep 'mem'
--cache-flush flush cache after every memory write (x86 only)
--memcpy N start N workers performing memory copies
--memcpy-ops N stop when N memcpy bogo operations completed
--vm-hang N sleep N seconds before freeing memory
--vm-keep redirty memory instead of reallocating
--vm-locked lock the pages of the mapped region into memory
3.创建一个没有资源限制的容器任务
[root@docker-200 ~]#
[root@docker-200 ~]#docker run --name mem_test -it lorel/docker-stress-ng |grep 'vm'
-m N, --vm N start N workers spinning on anonymous mmap
--vm-bytes N allocate N bytes per vm worker (default 256MB)
--vm-hang N sleep N seconds before freeing memory
--vm-keep redirty memory instead of reallocating
--vm-ops N stop when N vm bogo operations completed
--vm-locked lock the pages of the mapped region into memory
--vm-method m specify stress vm method m, default is all
--vm-populate populate (prefault) page tables for a mapping
Example: stress-ng --cpu 8 --io 4 --vm 2 --vm-bytes 128M --fork 4 --timeout 10s
内存压测结果

创建容器且限制内存
[root@docker-200 ~]#docker run --rm --name mem_test_www.yuchaoit.cn -m 200m -it lorel/docker-stress-ng --vm 2
stress-ng: info: [1] defaulting to a 86400 second run per stressor
stress-ng: info: [1] dispatching hogs: 2 vm

3.容器CPU限制

https://docs.docker.com/config/containers/resource_constraints/#cpu
--cpus=<value> 指定容器可以使用多少可用 CPU 资源。例如,如果主机有两个 CPU,并且您设置--cpus="1.5"了 ,则容器最多可以保证一个半的 CPU。这相当于设置--cpu-period="100000"和--cpu-quota="150000"。
限制CPU实践
1.看宿主机CPU数量
[root@docker-200 ~]#lscpu |grep cpu -i
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
On-line CPU(s) list: 0-3
CPU family: 6
CPU MHz: 2112.001
NUMA node0 CPU(s): 0-3
[root@docker-200 ~]#
2.压测命令
指定使用4个CPU,注意这是该工具提供的 --cpu参数,和容器无关
[root@docker-200 ~]#docker run --name cpu_test_www.yuchoait.cn --rm lorel/docker-stress-ng --cpu 4
stress-ng: info: [1] defaulting to a 86400 second run per stressor
stress-ng: info: [1] dispatching hogs: 4 cpu

工具指定用2个CPU压测
[root@docker-200 ~]#docker run --name cpu_test_www.yuchoait.cn --rm lorel/docker-stress-ng --cpu 2
stress-ng: info: [1] defaulting to a 86400 second run per stressor
stress-ng: info: [1] dispatching hogs: 2 cpu

top查看容器进程状态

docker提供的CPU使用限制

top查看限制

4.docker资源监控
注意ntp时间问题,时序数据库很关注这个。
4.1 docker自带监控
docker ps # 运行着的容器进程列表
docker top container_id # 查看容器内进程
docker stats container_id # 查看容器内cpu,mem,io情况
通过 docker stats 命令可以很方便的看到当前宿主机上所有容器的CPU,内存,以及网络流量等数据。
但 docker stats 命令的缺点是只是统计当前宿主机的所有容器,获取的数据是实时的,没有地方存储,也没有报警功能。
4.2 cADvisor、prometheus、grafana容器监控方案
1.CAdvisor出自Google,优点是开源产品,监控指标齐全,部署方便,而且有官方的docker镜像,采集容器的CPU,内存,网络,文件系统等信息
2. cAdvisor主要用于采集数据,并且导出数据交给其他展示软件即可。
3.可以用CAdviror结合很多其他工具实现容器资源监控+展示;
Prometheus是主流方案之一。
4.是什么
CAdvisor
CAdvisor是一个容器资源监控工具,包括容器的内存,CPU,网络IO,磁盘IO等,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机,不过,CAdvisor提供了很多数据集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。
CAdvisor功能主要有两点,展示Host,容器两个层次的监控数据和展示历史变化
4.3 prometheus是什么
官网:https://prometheus.io
github地址:https://github.com/prometheus

普罗米修斯
2、Prometheus 特点
• 多维数据模型:由度量名称和键值对标识的时间序列数据
• PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
• 不依赖分布式存储,单个服务器节点可直接工作
• 基于HTTP的pull方式采集时间序列数据
• 推送时间序列数据通过PushGateway组件支持
• 通过服务发现或静态配置发现目标
• 多种图形模式及仪表盘支持(grafana)
主要组件是
node exporter:用于采集主机硬件,系统,应用等运行数据,以容器的形式运行在目标主机上。
cAdvisor,负责采集容器数据,以容器的形式运行在所有目标机器上。
什么是node_exporter
Node Exporter 是 Prometheus 官方提供的一个节点资源采集组件,可以用于收集服务器节点的数据,如 CPU频率信息、磁盘IO统计、剩余可用内存 等等。
Node Exporter 会将收集到的信息转换为 Prometheus 可识别的 Metrics 数据。
Prometheus 可以从 Node Exporter 中对这些指标进行收集与存储,并且可以根据这些数据的实时变化进行服务器节点资源监控。

普罗米修斯工作原理流程
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。
不需要任何SDK或者其他的集成过程。
这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。
目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
grafana
Grafana 是一个分析平台,可用于查询和可视化数据,然后根据可视化结果创建和共享仪表板。
4.4 实践部署
10.0.0.200 部署cAdvisor + node exporter + prometheus + grafana
10.0.0.201 部署 cAdvisor + node exporter
docker-200机器
编写普罗米修斯配置文件
cat > prometheus.yml <<'EOF'
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- 10.0.0.200:8080
- 10.0.0.201:8080
- job_name: prometheus
scrape_interval: 5s
static_configs:
- targets:
- 10.0.0.200:9090
- job_name: node_exporter
scrape_interval: 5s
static_configs:
- targets:
- 10.0.0.200:9100
- 10.0.0.201:9100
EOF
docker-compose配置文件
cat > docker-compose.yml << 'EOF'
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
EOF
文件列表
[root@docker-200 /www.yuchaoit.cn/compose_prometheus]#ll
total 8
-rw-r--r-- 1 root root 736 Aug 31 02:58 docker-compose.yml
-rw-r--r-- 1 root root 389 Aug 31 02:44 prometheus.yml
安装
docker-compose -f docker-compose.yml up -d
访问cAdvisor

可以传递给prometheus的指标
http://10.0.0.200:8080/metrics

访问node_exporters节点采集

docker-201配置
docker-compose配置
cat > docker-compose.yml << 'EOF'
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
EOF
安装
yum install docker-compose -y
docker-compose -f docker-compose.yml up -d
4.5 访问grafana
10.0.0.200:3000
默认admin
admin
新密码
www.yuchaoit.cn

数据采集架构

添加数据源

添加普罗米修斯

打开数据展示仪表盘

使用如下模板
https://grafana.com/grafana/dashboards/8919-1-node-exporter-for-prometheus-dashboard-cn-0413-consulmanager/

展示主机数据监控情况)

继续添加采集容器的数据
cAdvisor采集到容器的数据,已经交给Prometheus了
只需要通过一个模板展示即可
https://grafana.com/grafana/dashboards/11600-docker-container/
再跑一个容器,压测试试,查看监控情况
[root@docker-201 ~]#docker run --name www.yuchaoit.cn -d -p 81:80 nginx
ef9e26cec58a7c2f0d97db75a894d22836b7099748028c1eaeeff73e5e9e9515
[root@docker-201 ~]#
[root@docker-201 ~]#
[root@docker-201 ~]#
[root@docker-201 ~]#ab -c 100 -n 1000000 http://10.0.0.201:81/

至此,就完成了基于Prometheus + grafana完成了对 linux服务器,以及docker容器的数据采集+展示。
更多普罗米修斯的玩法,还得继续学习,这是一块非常大的知识点。
学习如普罗米修斯查询语句等。
docker综合应用的更多相关文章
- docker容器的实践——综合项目一
Docker 综合实验 实验拓扑: [调度器] Keepalived + nginx 一.Keepalived服务的安装配置: 关闭LVS服务器的ipv4代理和 ...
- docker配置与实践#可以好好看看
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 L ...
- [转帖]龙芯:Docker 配置与实践清单
Docker 配置与实践清单 http://www.sohu.com/a/254904706_198222 文章对来官方文档及 Docker Links[1] 中链接内容进行归档整理,包含了日常工作中 ...
- KVM和Docker的对比
虚拟化技术对比: KVM:全虚拟化,需要模拟各种硬件 docker:严格来说不算是虚拟化技术,只是进程隔离和资源限制 实例启动进程对比: 在kvm虚拟机中执行top命令,看宿主机进程树,根本看不到to ...
- docker对数据卷容器进行备份
转载请注明出处 官网的数据以及各大博客都没有对这个的具体说明,本人也是理解了好久. 我们使用docker的过程中,使用共享的数据卷是经常的,那么.我们要怎么进行备份呢? 首先,我们得了解下面4个命 ...
- Docker的单主机容器网络
作者:杨冬 欢迎转载,也请保留这段声明.谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 本篇文章主要探索Do ...
- docker note
docker --bip="10.1.42.1/16" -d 挂载宿主机目录 Docker支持挂载宿主机目录,支持宿主机目录和容器之间文件目录进行映射,彼此共享: docker r ...
- 对Docker的价值和应用场景分析
近年来,Docker在IT界可谓风光十足,各大技术论坛上赚足了眼球,公司内外也有相当多的介绍和尝试,看上去如此高大上的技术,貌似会给云.服务部署.运维等领域带来颠覆性的创新. 近期查阅了一些文档,较深 ...
- 【原创】Docker容器及Spring Boot微服务应用
Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
前面我们已经介绍了ps/top/stats.Sysdig.Weave Scope.cAdvisor 和 Prometheus 多种容器监控工具和方案,是时候做一个比较了.下面将从五个方面来对比它们之间 ...
随机推荐
- Python静态类型解析工具简介和实践
简介: Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型,但类型不匹配的操作是不被允许的.动态类型帮助开发者写代码轻松愉快,然而,俗话说:动态一时爽,重构火葬场.动态类型也带来了许 ...
- [FAQ] IDE: Goland 注释符后面添加空行
如图所示,Code Style 对应语言 Go 勾选上注释空行的选项. Refer:Goland官网 Goland下载 Link:https://www.cnblogs.com/farwish/p/1 ...
- 使用 Data Assistant 快速创建测试数据集
使用 Data Assistant 快速创建测试数据集 Data Assistant 提供超过 100 种数据类型,为任何开发.测试或演示目的生成大量.异构.真实的数据. 官网地址:http://ww ...
- ruby 常用代码片段
# 文件的当前目录 puts __FILE__ # string.rb # 文件的当前行 puts __LINE__ # 6 #文件的当前目录 puts __dir__ #/media/haima/3 ...
- three.js教程5-几何体顶点UV坐标、纹理贴图TextureLoader
1.纹理贴图 纹理贴图,是给MeshLambertMaterial等材质一些纹理图片,以达到更好的视觉效果. 使用方法:通过纹理贴图加载器TextureLoader的load()方法加载一张图片可以返 ...
- NETCore中实现一个轻量无负担的极简任务调度ScheduleTask
至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...
- 预见预判_AIRIOT智慧交通管理解决方案
随着机动车保有量的逐步增加,城市交通压力日益增大.同时,新能源车辆的快速发展虽然带来了环保效益,但也因不限号政策而进一步加剧了道路拥堵问题.此外,各类赛事和重大活动的交通管制措施也时常导致交通状况复杂 ...
- redis持久化存储数据(rdb和aof)
rdb持久化存储数据 总的 redis持久化 防止数据丢失,持久化到本地,以文件形式保存 持久化的方式 ,两种 aof和 rdb模式 1.触发机制, - 手动执行save命令 - 或者配置触发条件 s ...
- 『手撕Vue-CLI』处理不同指令
前言 在上一篇『手撕Vue-CLI』添加自定义指令中,已经实现了自定义指令的添加,但是指令还是比较简单的,只是简单的打印一句话,那么在实际运用场景中,可能会有更多的需求,比如可能需要在指令中传递参数, ...
- 无需重新学习,使用 Kibana 查询/可视化 SLS 数据
1. 场景 现在通过 SLS 的 ES 兼容能力,可以很方便地实现用 Kibana 来查询和可视化 SLS 的数据.对于从 ES 迁移到 SLS 的用户可以继续保留原来的 Kibana 使用习惯.下面 ...