Cgroups 和 Namespaces 一块使用,被用于创建容器。
Namespace提供了系统资源的隔离,Cgroups允许对这些资源进行细粒度的控制和限制。
Namespace(命名空间)
Namespaces 是一种内核机制。它从进程的视角对资源进行了划分,通过限制进程可以看到的资源从而限制其可以只用的资源。
# 查看系统中的命名空间
lsns
NS TYPE NPROCS PID USER COMMAND
4026531835 cgroup 100 2442 lvgg /lib/systemd/systemd --user
4026531836 pid 102 2442 lvgg /lib/systemd/systemd --user
4026531837 user 103 2442 lvgg /lib/systemd/systemd --user
4026531838 uts 100 2442 lvgg /lib/systemd/systemd --user
4026531839 ipc 100 2442 lvgg /lib/systemd/systemd --user
4026531840 mnt 100 2442 lvgg /lib/systemd/systemd --user
4026532000 net 99 2442 lvgg /lib/systemd/systemd --user
4026532411 pid 1 23340 lvgg /usr/share/browser/browser --type=zygote
4026532413 net 1 23340 lvgg /usr/share/browser/browser --type=zygote
# 查看当前进程的命名空间,可以用于setns系统调用
ls -al /proc/$$/ns
Control groups (控制组)
Cgroups 是用于限制和监测一组进程所使用的系统资源的一种内核机制。通过cgroup类型的文件系统实现。
特性:
- 资源限制 – 限制进程所使用的系统资源的份额;
- 比例划分 – 分配不同控制组之间资源使用的比例;
- 统计 – 在控制组中可以查看系统的资源划分和使用情况;
- 控制 – 一个控制组中的所有进程状态可以通过一条命令进行切换;
# 查看已挂载的控制组目录
mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
每个组下有对应的可调节参数。