Linux运维知识之如何做好Docker资源管控?
小标 2019-06-20 来源 : 阅读 922 评论 0

摘要:本文主要向大家介绍了Linux运维知识之如何做好Docker资源管控?通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之如何做好Docker资源管控?通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

Linux运维知识之如何做好Docker资源管控?

Docker资源管控配额原理


Docker同LXC一样,其对资源的隔离和管控是以Linux内核的namespaces和cgroups为基础。Docker的资源隔离使用了Linux内核 Kernel中的Namespaces功能来实现,隔离的对象包括:主机名与域名、进程编号、网络设备、文件系统的挂载点等,namespace中的IPC隔离docker并未使用,docker中使用TCP替代IPC。


在使用Namespaces隔离资源的同时,Docker使用了Linux内核Kernel提供的cgroups来对Container使用的CPU、内存、磁盘IO资源进行配额管控。换句话说,在docker的容器启动参数中,像—cpu、–memory和—blkio*的设置,实际上就是设置cgroups的相对应cpu子系统、内存子系统、磁盘IO子系统的配额控制文件,只不过这个修改配额控制文件的过程是docker实例代替我们做掉罢了。


因此,我们完全可以直接修改docker容器所对应的cgroup子系统中的配额控制文件来达到控制docker容器资源配额的同样目的,接下来将以IO控制为例,介绍一下具体实现过程。


物理部署架构图


实验测试环境物理部署图如下:


整体的部署思路如下:


1、 将物理磁盘进行分区操作(此步骤可选)

2、将分区创建为物理卷(PV)并添加到卷组(VG)中

3、从卷组(VG)中创建出逻辑卷(LV),并将该卷格式化后挂载供docker使用

4、将步骤3中逻辑卷挂载点再挂载到docker镜像容器中


管控配额过程


1、将磁盘设备/dev/sdb进行分区,分别为sdb1和sdb2


2、创建PV


pvcreate /dev/sdb2  #使用sdb2创建物理卷(PV)


3、创建VG


vgcreate datavg /dev/sdb2 #vg名称为datavg


4、创建LV,并格式化


lvcreate  -n  datalv  datavg  && mkfs.ext4 /dev/mapper/datavg-datalv


5、创建目录并挂载


mkdir /data && mount /dev/mapper/datavg-datalv /data


测试验证


1、使用docker镜像docker.io/learn/tutorial :jiangzt作为测试容器


2、不加配额参数的情况下启动容器


启动容器时不配额参数,并观察其所在的cgroups子系统的配置情况。


docker run -dit -h inner --name test -v /data:/data a36927dbb31f /bin/bash


根据容器ID观察cgroups下blkio子系统的配置情况,结果是文件blkio.throttle.write_bps_device中没有内容。


进入容器内,执行dd命令,测试观察此时默认的写入IO能力。


docker exec -it test  /bin/bash
time dd if=/dev/zero of=/data/test.out bs=1M count=1024 oflag=direct


可以得知写入的平均速度是 2.1GB/s


3、使用参数device-write-bps启动容器


启动容器增加配额参数device-write-bps,写入目标速度为1mb/s,并观察其所在的cgroups子系统的配置情况。


docker run -dit  -m 100m -h inner --name test --device-write-bps /dev/dm-6:1mb  -v /data:/data a36927dbb31f /bin/bash


说明:lv的设备名称/dev/dm-6可以通过dmsetup做查询


容器启动后根据容器id观察cgroups子系统中的配置情况。


在cgroups的blkio.throttle.write_bps_device文件中观察到了253:6 1048576 就是我们在启动docker时指定的–device-write-bps参数值,设备为253:6(/dev/dm-6),io能力为1048576byte(1mb)


进入容器内,执行dd命令,测试观察此时默认的写入IO能力


可以观察到此时的写入速度为1.0MB/s


4、直接修改cgroup中的参数配置


前面在原理介绍时提过,docker其实也是修改cgroup中的参数来控制资源的使用,那么我们直接修改blkio.throttle.write_bps_device,然后观察是否能直接作用于docker容器,还是使用上面的容器id进行操作,将blkio.throttle.write_bps_device中的内容修改为10MB/s。

echo 253:6 10485760 > blkio.throttle.write_bps_device

进入容器内,执行dd命令,测试观察此时默认的写入IO能力。


可以看到通过直接修改cgroup中的blkio.throttle.write_bps_device的速度值起到了作用。


5、对于其他参数的控制分析


细心的你可能已经发现在docker镜像时,还有个参数-m 100m,该参数是用来控制容器使用内存的配额,我们可以通过docker stats进行验证。


同样我们也是可以在cgroup的内存子系统中看到相应的参数配置。


总结


通过以上的分析测试,进一步熟悉了解了docker运行时的行为和所依赖的底层的技术原理,希望能够为docker的自动化运维开发提供解决思路和办法。


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程