CGroup Namespace
基本信息
CGroup命名空间是Linux内核的一个功能,为在命名空间内运行的进程提供对cgroup层次结构的隔离。Cgroups,即控制组,是一个内核功能,允许将进程组织成分层组,以管理和强制执行对系统资源(如CPU、内存和I/O)的限制。
虽然CGroup命名空间不像我们之前讨论的其他命名空间类型(PID、挂载、网络等)那样是一个单独的命名空间类型,但它与命名空间隔离的概念相关。CGroup命名空间虚拟化了cgroup层次结构的视图,因此在CGroup命名空间中运行的进程与在主机或其他命名空间中运行的进程对层次结构的视图不同。
工作原理:
创建新的CGroup命名空间时,它从基于创建进程的cgroup的cgroup层次结构视图开始。这意味着在新的CGroup命名空间中运行的进程只会看到整个cgroup层次结构的子集,限于创建进程cgroup根目录下的cgroup子树。
在CGroup命名空间中的进程将将自己的cgroup视为层次结构的根。这意味着从命名空间内部进程的角度来看,他们自己的cgroup会显示为根目录,他们无法看到或访问自己子树之外的cgroup。
CGroup命名空间不直接提供资源隔离;它们仅提供cgroup层次结构视图的隔离。资源控制和隔离仍由cgroup子系统(例如cpu、内存等)本身执行。
有关CGroups的更多信息,请查看:
CGroups实验:
创建不同的命名空间
CLI
通过挂载一个新的 /proc
文件系统实例,如果使用参数 --mount-proc
,可以确保新的挂载命名空间对该命名空间特定的进程信息具有准确和隔离的视图。
Docker
检查您的进程位于哪个命名空间
查找所有CGroup命名空间
```bash nsenter -C TARGET_PID --pid /bin/bash ``` 此外,**只有root用户才能进入另一个进程命名空间**。而且,**没有指向其他命名空间的描述符**(比如`/proc/self/ns/cgroup`),**无法进入**其他命名空间。
参考资料
最后更新于