【问题标题】:difference between cgroups and namespacescgroups 和命名空间的区别
【发布时间】:2016-04-21 14:34:14
【问题描述】:

我最近开始学习 docker,似乎大部分繁重的工作都是由 Linux 内核完成的,使用命名空间和 cgroup。

我发现一些令人困惑的事情是:

  1. 命名空间和 cgroup 有什么区别?他们解决了哪些不同的用例?

  2. docker 在这些基础上实施了什么来获得人气?

  3. 我想知道这些功能的内部原理以及它们是如何实现的。

【问题讨论】:

标签: linux docker cgroups


【解决方案1】:

这两个概念的正确链接已在PR 14307 中修复:

在底层,Docker 建立在以下组件之上:

Linux 内核的 cgroupsnamespaces 功能

与:

  • cgroup:控制组提供了一种机制,用于将任务集及其所有未来子代聚合/划分为具有特殊行为的分层组。
  • 命名空间:将全局系统资源包装在抽象中,使命名空间内的进程看起来拥有自己的全局资源隔离实例。

简而言之:

  • Cgroups = 限制您可以使用的数量;
  • 命名空间 = 限制您可以看到(并因此使用)的内容

Jérôme Petazzoni的“Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic”上查看更多信息。

Cgroups 涉及资源计量和限制:

  • 内存
  • CPU
  • 块 I/O
  • 网络

命名空间为进程提供自己的系统视图

多个命名空间:

【讨论】:

【解决方案2】:

cgroups 限制一个进程或一组进程可以使用的资源这些资源可以是 CPU、内存、网络 I/O 或对文件系统的访问,而命名空间限制进程组对系统其余部分的可见性。

更多详情请访问How Linux Kernel Cgroups And Namespaces Made Modern Containers Possible

【讨论】:

    【解决方案3】:

    Cgroups(控制组)进行资源管理。
    它决定了将多少主机资源分配给容器。

    例如:- 我们在 docker-compose yaml 文件中定义资源来创建服务,例如:

    资源: 限制: CPU:“0.1”(100 毫核) 内存:50M

    在此示例中,我们明确要求 cgroup 将这些资源分配给特定容器。


    Namespaces:提供进程隔离、容器完全隔离、独立文件系统。


    命名空间有 6 种类型:
    1. mount ns - 用于文件系统。
    2. UTS(Unique timesharing) ns- 检查正在运行的容器的不同主机名
    3. IPC ns - 进程间通信
    4. 网络 ns- 负责为不同的容器分配不同的 ip
    5. PID ns - 进程ID隔离
    6.用户ns-不同的用户名(uid)
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2016-05-28
    相关资源
    最近更新 更多