Docker基础: Linux内核之Cgroups(1)

本文探讨了Docker与Linux内核中Cgroups的关系,Cgroups作为资源限制和统计工具,用于实现更高效资源利用。通过介绍Cgroups的历史、作用,以及在CentOS中的应用,阐述其在系统隔离和控制方面的功能。文章还简述了Cgroups的SubSystem、在CentOS的安装和配置,并展示了其在systemd中的应用。
摘要由CSDN通过智能技术生成

作为开源Container技术代表的Docker,它跟Linux内核的Namespace和Cgroup两大特性密不可分。物有本末,事有终始。知所先后,则近道矣。理解Linux的这两大特性将有助于我们更深入的理解Docker。
在本文中我们将会简要介绍一下Cgroups是什么。

Cgroups的历史

Cgroups是Control Groups的缩写, 它是Linux 内核的一个特征,在2.6.24被引入. Cgroups用于提供对Linux的进程组进行资源上的限制/统计/隔离等操作的这样一种功能.

时间 具体发展
2006 Google的工程师(Paul Menage and Rohit Seth等)发起的Process containers
2007 由于术语container容易引起理解上的混乱,改名为Control Groups
2007 合并入Linux内核2.6.24
2007以后 诸如防火墙的支持,hierarchy的引入等不断完善和增强功能

Why Cgroups

我们在说LXC构建在Linux的Namesapce和Cgroups之上,而且在前面的一些文章中我们也简单使用unshare去模拟了六种隔离的情况,了解到隔离能给我们带来的便利。但是为什么还要Cgroups呢,而且Cgroups也提到了对进程组的隔离,它们是重复的功能特性麽?抱着这些问题我们需要首先再问:Why Cgroups?它的应用场景在哪儿?
答案千千万万,最为容易被人所接受的是钱的原因。企业级用户掏出大把的银子进行投资,而架构和设计也必须服从经济规律给他们计算ROI等,花的钱多长时间才能收回来,花这分钱相当于省多少钱,比如你有一台强大的UNIX小机,平时大部分时候CPU/存储/IO/内存等都是在闲置的状态,但是你如果整个center的机器都是在20%左右的水线上运转,就如同你有一条10车道宽的马路只用2车道一样,那是对客户投资的一种浪费。
怎样更为简单有效合理地利用资源,一直是IT最为核心的内容之一。这个问题其实很简单,Resouce有富余,用就可以了麽。怎么用?把一台资源剩余的物理机进行切分,用到不富余就可以了。其实这里面就有隔离和控制。先说隔离,再想想虚拟机运行起来是什么样的呢,虽然在一台机器上,但是相互之间不影响,这就是隔离的效果之一。在说控制,同时可以设定某台机器使用多余的多少Resource,比如某个container中使用多少CPU/多少内存。在HPE的IVM这款产品中,只需要简单的”hpvmmodify -P 虚拟机名称 -c cpu个数”就可以指定在HPUX上跑起来的VM使用几个CPU了,其他产品也是一样简单易用。但是虚拟机太重,好用的除了virtualbox基本上都是收费的,而且价格不菲,同时没有统一标准,Docker针对这几个特点,开源免费/社区驱动/统一标准/轻量快捷等特点,快速征服了众多开发者。
当然这只是Cgroups中的一个作用–limit(限制),限制CPU/内存/IO/网络等的使用量。除此之外还可以进行使用的统计等操作,这在云服务提供时时不可或缺的功能。

SubSystem详细

Subsystem即为Cgroups所能控制的Resource,主要的Subsystem如下所示。

项番 Subsystem 说明
No.1 Cpusets 限制分配CPU
No.2 cpuacct 统计CPU使用报告
No.3 memory 限制内存使用量
No.4 blkio 限制磁盘/USB等物理设备
No.5 net_cls 控制网络数据包
No.6 freezer 挂起或者恢复进程
No.7 devices 设备访问控制

Centos版本

虽然Cgroups是Linux内核,但是不同的发型版在使用上还有细小的区别。由于RHEL或者CentOS使用Systemd进行服务的管理,而Systemd本身就是使用了Cgroups的特性,所以我们将会使用CentOS来简单介绍一下Cgroups的使用。

[root@liumiaocn ~]# uname -a
Linux liumiaocn 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@liumiaocn ~]#

事前准备

CentOS上为了支持cgroups,需要安装libcgroups,不同的linux发型版稍有不同,CentOS下可以使用如下进行安装。不过default一般都是会安装。
命令:yum install libcgroup

Subsystem确认

CentOS中将所有Cgroup的subsystem挂载到/sys/fs/cgroup目录下。使用mount命令可以进行确认

[root@liumiaocn ~]# mount -t cgroup
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freeze
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值