我们前面说了,容器实现封闭的环境主要要靠两种技术,一种是“看起来是隔离”的技术 Namespace,另一种是用起来是隔离的技术 CGroup。
上一节我们讲了“看起来隔离“的技术 Namespace,这一节我们就来看一下“用起来隔离“的技术 CGroup。
CGroup 全称是 Control Group,顾名思义,它是用来做“控制”的。控制什么东西呢?当然是资源的使用了。那它都能控制哪些资源的使用呢?我们一起来看一看。
首先,cgroups 定义了下面的一系列子系统,每个子系统用于控制某一类资源。
cpu 子系统,主要限制进程的 cpu 使用率。
cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。
cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
memory 子系统,可以限制进程的 memory 使用量。
blkio 子系统,可以限制进程的块设备 io。
devices 子系统,可以控制进程能够访问某些设备。
net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
freezer 子系统,可以挂起或者恢复 cgroups 中的进程。