Cgroups

2006 年,Google 的工程师发明了 Linux 控制组,缩写为 cgroups。这是 Linux 内核的一项功能,可隔离和控制用户进程的资源使用情况。这些进程可以放入命名空间,实质上是共享相同资源限制的进程集合。计算机可以有多个命名空间,每个命名空间都具有内核强制执行的资源属性。

我们可以管理每个命名空间的资源分配,以便限制一组进程可以使用的总 CPU,RAM 等的数量。例如,后台日志聚合应用程序可能需要限制其资源,以免意外地压倒它正在记录的实际服务器。虽然不是原始功能,但 Linux 中的 cgroup 最终被重新设计为包含命名空间隔离的功能。命名空间隔离本身并不新鲜,Linux 已经有多种命名空间隔离。一个常见的例子是进程隔离,它将每个单独的进程分开并防止诸如共享内存之类的事情。

cgroup 隔离是一种更高级别的隔离,可确保 cgroup 命名空间中的进程独立于其他命名空间中的进程。

  • PID(进程标识符)命名空间:这可确保一个命名空间内的进程不知道其他命名空间中的进程。

  • 网络命名空间:隔离网络接口控制器,iptables,路由表和其他低级网络工具。

  • 挂载命名空间:已挂载文件系统,因此命名空间的文件系统范围仅限于已挂载的目录。

  • 用户名空间:将命名空间内的用户限制为仅限该命名空间,并避免跨命名空间的用户 ID 冲突。