Docker原理第三话--CGroups

来源:互联网 发布:勇士队球员数据 编辑:程序博客网 时间:2024/06/05 06:53

CGroups


上一话我们讲解了Docker使用了Namespace实现隔离性,OK,那么我们想象一下,由于Namespace的存在,黑客不能从A container中越权攻击B container和宿主机host,那么黑客换个思路,在A container中申请大量cpu和memory资源(死循环或fork炸弹等),直接导致资源耗尽,使得B container和host都不能正常服务……这样的话,也达到了攻击的效果。

所以,单有Namespace安全机制还不够,Docker为此加上了CGroups机制……CGroups是Control Groups的缩写,顾名思义就是资源控制机制,此机制实现了对每个容器/进程的资源控制,从而使操作系统可以稳定安全地运行。

本质上来说,cgroups是内核附加在程序上的一系列钩子(hooks),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的……下面我们就来体验一下CGroups吧 ^_^


我们先开启一个终端,查看此bash的pid:

这里写图片描述


然后再开启一个终端,输入top命令监控每个进程的信息:

这里写图片描述


现在我们在3104的那个bash中输入以下死循环:

这里写图片描述

可以看到3104的那个进程CPU使用率立即飙到了97.7%,系统已经变得很卡了,无法正常服务 :-(


接下来我们来使用CGroups…….

cgroups的API以一个伪文件系统的方式实现,即用户可以通过文件操作实现cgroups的组织管理。这些文件在/sys/fs/cgroup下:

这里写图片描述


在cpu路径下新建一个testcpu文件夹:

这里写图片描述


惊奇地发现,刚创建完的testcpu目录下会自动生成各种cpu的配置文件,现在我们只需对cpu.cfs_quota_us和tasks进行修改:

这里写图片描述

我们首先设置了监控的进程pid(3104),然后设置最大的CPU使用率为30%


OK,配置完成,现在再来让那个3104的进程开启死循环:

这里写图片描述

可以看到,3104的进程最大的CPU使用率已经超不过30%了,CGroups成功对此进程进行了CPU资源控制……


如果想将这些控制策略应用到一个docker容器中,只需在启动容器时添加以下参数就行啦 :-)

这里写图片描述

原创粉丝点击