3.Docker基础Cgroup

可配额/可度量:Docker基础Cgroup

在一个容器,如果不做任何资源限制,则苏书记允许其占用无限大的内存空间,有时候会因为代码Bug程序会一直申请内存,直到把宿主机内存占满;为避免此类状况的出现,宿主机内有必要对容器进行资源分配限制,比如CPU、内存等;Linux Cgroup的全程是Linux Control Groups,它最主要的作用是限制一个进程能够使用的资源上线,包括CPU、内存、磁盘、网络带宽等等。此外还能够对进程进行优先级设置,以及进程挂起和恢复等操作。

docker pause就是基于Cgroup的进程挂起操作

验证系统cgroups

Cgroup在内核层默认已经开启

Centos

]# cat /boot/config-4.4.206-1.el7.elrepo.x86_64 | grep CGROUP 
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_CGROUP_WRITEBACK=y
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y


# cat /boot/config-3.10.0-957.el7.x86_64 | grep CGROUP 
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y

Ubantu

]# cat /boot/config-4.15.0-55-generic | grep CGROUP
CONFIG_CGROUPS=y
CONFIG_BLK_CGROUPS=y
# CONFIG_CGROUP_DEBUG_BLK_CGROUP is not set
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_BPRF=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_SOCK_CGROUP_DATA=y
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y

cgroup中内存模块:

]#  cat /boot/config-4.4.206-1.el7.elrepo.x86_64  | grep MEM | grep CG
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y is not set
CONFIG_MEMCG_KMEM=y

查看系统cgroups

~]# ll /sys/fs/cgroup/
total 0
dr-xr-xr-x 4 root root  0 Jun  1 15:55 blkio
lrwxrwxrwx 1 root root 11 Jun  1 15:55 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jun  1 15:55 cpuacct -> cpu,cpuacct
dr-xr-xr-x 4 root root  0 Jun  1 15:55 cpu,cpuacct
dr-xr-xr-x 2 root root  0 Jun  1 15:55 cpuset
dr-xr-xr-x 4 root root  0 Jun  1 15:55 devices
dr-xr-xr-x 2 root root  0 Jun  1 15:55 freezer
dr-xr-xr-x 2 root root  0 Jun  1 15:55 hugetlb
dr-xr-xr-x 4 root root  0 Jun  1 15:55 memory
lrwxrwxrwx 1 root root 16 Jun  1 15:55 net_cls -> net_cls,net_prio
dr-xr-xr-x 2 root root  0 Jun  1 15:55 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Jun  1 15:55 net_prio -> net_cls,net_prio
dr-xr-xr-x 2 root root  0 Jun  1 15:55 perf_event
dr-xr-xr-x 4 root root  0 Jun  1 15:55 pids
dr-xr-xr-x 4 root root  0 Jun  1 15:55 systemd

有了以上chroot、namespace、cgroup就具备了基础的容器运行环境,但是还需要有相应的创建于删除的管理工具,以及如何把容器运行起来,容器数据怎么处理,如何进行启动、关闭

cgroup具体实现

Name
blkio 块设备IO限制
cpu 使用调度程序为Cgroup任务提供cpu的访问
cpuacct 产生cgroup任务的cpu资源报告。
cpuset 如果是多核心cpu,这个子系统会为cgroup任务分配单独的cpu和内存
devices 允许或拒绝cgroup任务对设备的访问
freezer 暂停和恢复cgroup任务
memory 设置每个cgroup的内存限制以及产生内存资源报告
net_cls 标记每个网络包以供cgroup方便实用
ns 命名空间子系统
perf_event 增加对每group的监控跟踪的能力,可以检测属于某个特定的group的所有线程以及运行在特定CPU上的线程

猜你喜欢

转载自www.cnblogs.com/Gmiaomiao/p/13172555.html