docker-cgourp技术
命名空间并不能够为我们提供物理资源上的隔离, 而Control Groups(简称 CGroups)能够隔离宿主机器上的物理资源。
Control Groups(cgroups)是一种由 Linux 内核提供的功能,用于限制、控制和监控进程组的资源使用。它允许系统管理员为一组进程分配资源,并设置资源使用限制,如 CPU、内存、I/O 资源等。通过 cgroups 技术,可以有效地管理系统资源,防止应用程序或服务过度占用资源而导致系统性能下降或崩溃。
cgroups 是通过一组内核功能和机制来实现的,包括:
1. 子系统(Subsystem):cgroups 包含多个子系统,每个子系统负责管理一种特定类型的资源,如 CPU、内存、设备、进程等。每个子系统都有自己的控制文件和参数,允许管理员对资源进行配置和限制。
2. 层次结构:cgroups 支持层次结构,允许创建多级 cgroups 组织结构。通过层次结构,可以对不同的进程或进程组设置不同的资源限制和管理策略,实现更细粒度的资源控制和管理。
3. 控制文件:cgroups 提供了一组控制文件,用于配置和管理每个 cgroup 的资源使用情况。这些控制文件通常位于 cgroup 虚拟文件系统中,允许管理员通过修改这些文件来调整资源使用限制和参数设置。
4. 命令行工具:Linux 提供了一组命令行工具,如 `cgcreate`、`cgexec`、`cgset` 等,用于创建、管理和监控 cgroups。通过这些工具,管理员可以方便地管理 cgroups,设置资源限制和监控资源使用情况。
通过 cgroups 技术,可以对系统资源进行有效的管理和分配,防止资源被滥用或过度使用,提高系统的稳定性和性能。这种技术在虚拟化、容器化和云计算等场景中得到广泛应用,为多租户环境和多任务处理提供了一种灵活、高效和可靠的资源管理解决方案。
每一个 CGroup 下面都有一个 tasks 文件,其中存储着属于当前控制组的所有进程的 pid。
docker 容器用到的大概只有下面六种:
第一个是 CPU,CPU 一般会去设置 cpu share 和 cupset,控制 CPU 的使用率。
第二个是 memory,是控制进程内存的使用量。
第三个 device ,device 控制了你可以在容器中看到的 device 设备。
第四个 freezer。它和第三个 cgroup(device)都是为了安全的。当你停止容器的时候,freezer 会把当前的进程全部都写入 cgroup,然后把所有的进程都冻结掉,这样做的目的是,防止你在停止的时候,有进程会去做 fork。这样的话就相当于防止进程逃逸到宿主机上面去,是为安全考虑。
第五个是 blkio,blkio 主要是限制容器用到的磁盘的一些 IOPS 还有 bps 的速率限制。因为 cgroup 不唯一的话,blkio 只能限制同步 io,docker io 是没办法限制的。
第六个是 pid cgroup,pid cgroup 限制的是容器里面可以用到的最大进程数量。

浙公网安备 33010602011771号