cgroup、命名空间与容器

这页讲的是:容器不是一个神秘黑盒,它很大程度上是 Linux 内核现有隔离与资源控制能力的组合。学这页的关键,是把“看起来像独立系统”背后的内核机制拆开看。

这块是什么

命名空间负责“看起来彼此隔离”,cgroup 负责“资源怎么限制和统计”,而容器则把这些能力拼起来,让一组进程看起来像在一个独立小环境里运行。它不是“又造了一个操作系统”,而是在同一个内核上做视图隔离和资源治理。

你可以把容器先理解成:同住一栋楼,但每户人家看到的门牌、房间边界、能用的资源额度都被单独划出来了。

它负责什么

做视图隔离

  • 让进程看到不同的进程树、网络视图、挂载视图等
  • 让“环境看起来像独立系统”
  • 减少互相干扰
  • 帮助多租户或多服务共存

做资源控制

  • 限制 CPU、内存、I/O 等资源
  • 统计资源使用
  • 防止某一组进程无限制吃掉机器
  • 让资源分配更有秩序

支撑容器运行时

  • 为上层容器工具提供内核能力基础
  • 把隔离和治理做成可组合机制
  • 服务于云原生和多服务部署场景
  • 让容器不只是“打包”,而是可运行、可治理

容器看起来像独立环境,靠的是什么

能力你现在怎么理解主要作用
命名空间给不同进程组展示不同的系统视图。让它们看起来彼此独立,不会直接看到全部系统状态。
cgroup把一组进程放进同一资源控制盒子里。让 CPU、内存、I/O 等资源能被限制、统计和治理。
文件系统视图进程看到的根目录和挂载结构可以被重新组织。让容器像在自己的文件世界里工作。
网络隔离不同进程组可以看到不同网络接口和配置。帮助容器像“有自己的网络环境”一样运行。

关键概念

概念现在怎么理解
cgroup对一组进程做资源限制、统计和治理的机制。
命名空间让不同进程看到不同系统视图的隔离机制。
容器建立在命名空间、cgroup、文件系统和网络组织方式之上的运行环境。
资源配额某组进程最多能使用多少资源,不再完全自由争抢。
多租户隔离让不同服务或工作负载共用一个内核时,仍能尽量互不干扰。

为什么重要

常见误解

它不负责什么

和其他模块的关系

相关模块关系
调度器CPU 资源控制和配额最终仍然要落到调度行为上。
内存管理容器内存限制、回收压力和 OOM 行为都与内存子系统密切相关。
文件系统挂载视图、根文件系统组织和镜像使用都离不开文件系统基础。
网络网络命名空间和虚拟网络组织让容器拥有相对独立的网络世界。

你现在先把容器拆成“看见什么”和“能用多少”

问题主要是谁在回答为什么这样拆最清楚
这个进程看见哪些 PID、挂载点、网络接口命名空间在回答。它更像在决定“世界长什么样”。
这组进程最多能吃多少 CPU、内存和 I/Ocgroup 在回答。它更像在决定“资源额度有多大”。
容器里的根文件系统和进程入口怎么被组织文件系统与运行时工具一起参与。这样你就不会把内核能力和上层容器工具混成一个盒子。
出了 OOM 或性能抖动该怪谁往往要把 cgroup、内存管理和调度一起看。这解释了为什么容器问题常常不是单一模块能单独讲清。

读完这页后,你应该能回答

后面适合继续问:命名空间和虚拟机本质差别是什么?cgroup 为什么会影响性能和稳定性?容器里的 OOM 和系统 OOM 有什么关系?