www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

内核,隔离机制,它用于虚拟化进程对 cgroup 文件系统的视图

 

它让容器内的进程“看到”一个独立的、被隔离的 cgroup 层次结构,而不是宿主机的真实 cgroup 树。

Cgroup(Control Group): 是 Linux 内核功能,用于限制、记录和隔离进程组使用的物理资源(如 CPU、内存、I/O 等)

  • Namespace: 是另一种内核功能,用于隔离系统资源视图(如 PID、网络、挂载点等),使一组进程拥有独立的“系统视野”。

解决不同的问题,但又协同工作

Namespace = "隔离墙" - 让你看不到墙外的其他房间(隔离视图)
Cgroup = "资源配额券" - 限制你能用多少水电煤(限制资源使用)

维度NamespaceCgroup
主要目的 隔离 - 让进程拥有独立的系统视图 限制 - 对进程组进行资源限制和统计
工作层面 "视角"层面 - 隔离进程能"看到"什么 "资源"层面 - 控制进程能"使用"多少
解决的问题 "我在哪里?我能看到谁?" "我能用多少CPU/内存?"
操作对象 系统资源(PID、网络、文件系统等)的视图 物理资源(CPU、内存、IO等)的分配
隔离性 强隔离 - 互相看不见 弱隔离 - 主要是配额限制,不禁止访问
内核版本 从 2.4.19 开始逐步引入 从 2.6.24 开始引入

 

Namespace 的隔离能力 加上 Cgroup 的资源控制能力,才共同造就了现代容器技术既安全又高效的特性。

  1. 可以只有 Cgroup,没有 Namespace:

    bash
    # 限制一个普通进程的资源,但不进行视图隔离
    echo 1000000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
    echo $$ > /sys/fs/cgroup/cpu/mygroup/cgroup.procs
    # 这个进程被限制CPU使用,但能看到系统所有其他进程



    1. 可以只有 Namespace,没有 Cgroup:

      bash
      # 创建一个有完整Namespace隔离但无资源限制的进程
      unshare --pid --mount --net --uts --ipc --user --map-root-user --fork bash
      # 这个进程有完整的隔离,但可能耗尽系统资

      查看容器pid docker top container-id

      # 最实用的组合命令
      echo "=== 当前运行的容器 ==="
      docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}" | \
      while read line; do
      if [[ $line == "NAME"* ]]; then
      echo "$line 宿主机PID"
      else
      name=$(echo $line | awk '{print $1}')
      pid=$(docker inspect --format '{{.State.Pid}}' $name 2>/dev/null || echo "N/A")
      echo "$line $pid"
      fi
      done

      image

       

       

posted on 2025-12-18 11:46  秦瑞It行程实录  阅读(3)  评论(0)    收藏  举报
www.cnblogs.com/ruiyqinrui