三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Docker容器技术原理【第四课】

Docker容器技术原理【第四课】

CGroup

1. 作用背景

Namespace 只完成资源隔离,但不能限制 CPU、内存等物理硬件资源。多个容器同时运行,高负载容器会抢占宿主机硬件,影响其他业务,CGroups 用来解决这个资源争抢问题。

2. CGroups 是什么

CGroups(Control Groups)是 Linux 内核机制,对进程做分组管理,为分组设置资源限制,实现资源的限制、控制、监控,是容器核心技术之一。

核心功能

  1. 限制进程资源使用上限(CPU、内存),防止资源耗尽。
  2. 设置不同分组的资源优先级。
  3. 统计监控各组资源使用情况。
  4. 对进程执行挂起、恢复等操作。
  5. 支持层级嵌套,分组可以树形结构嵌套。

3. 子系统 subsystem

不同子系统管控不同硬件资源,挂载在/sys/fs/cgroup:

  • cpu:限制 CPU 使用率,分配 CPU 时间片
  • memory:限制内存、交换分区上限
  • blkio:磁盘 IO 读写限制
  • devices:管控设备访问权限
  • freezer:挂起 / 恢复进程
  • net_cls:网络流量标记控制
  • pids:限制进程数量

4. 内存限制实验要点

  1. 在/sys/fs/cgroup/memory下创建子目录,就生成一个 cgroup 控制组,内核自动生成配置文件。
  2. 修改memory.limit_in_bytes设置内存上限;tasks文件写入进程 PID,把进程加入该控制组。
  3. 当进程内存消耗到达阈值,内核会终止进程。
  4. 删除控制组目录即可释放,前提 tasks 内没有残留进程。

5. 版本发展

  • CGroup v1:早期版本,各个子系统独立目录。
  • CGroup v2:内核 4.5 引入,架构重新设计,管理更高效。

Docker、K8s 大量使用 CGroups 对容器做 CPU、内存、IO 资源管控。


简短总结

Namespace 负责隔离看得见的资源视图,CGroups 负责限制硬件资源用量。CGroups 通过子系统管理各类资源,把进程加入控制组实现配额限制,是容器必不可少的技术。

← 返回列表