Kubernetes基础——Cgroups理解
一、cgroups的组织结构
了解cgroup、task、subsystem以及hierarchy四者间的相互关系及其基本规则。
二、图解cgroups组成
1、规则1: 同一个hierarchy可以附加一个或多个subsystem。
如下图1,cpu和memory的subsystem附加到了一个hierarchy。

图1 同一个hierarchy可以附加一个或多个subsystem
2、规则2: 一个subsystem可以附加到多个hierarchy,当且仅当这些hierarchy只有这唯一一个subsystem。
如下图2,小圈中的数字表示subsystem附加的时间顺序,CPU subsystem附加到hierarchy A的同时不能再附加到hierarchy B,因为hierarchy B已经附加了memory subsystem。如果hierarchy B与hierarchy A状态相同,没有附加过memory subsystem,那么CPU subsystem同时附加到两个hierarchy是可以的(一个Cgroup Hierarchy内存层级下,只能附加一类subsystem子系统,subsystem子系统分类CPU和memory)。

图2 一个已经附加在某个hierarchy上的subsystem不能附加到其他含有别的subsystem的hierarchy上
3、规则3:一个task不能属于同一个hierarchy的不同cgroup(例如:Cgroup Hierarchy A有两个cg:cg1和cg2)
系统每次新建一个hierarchy时,该系统上的所有task默认构成了这个新建的hierarchy的初始化cgroup,这个cgroup也称为root cgroup。对于你创建的每个hierarchy,task只能存在于其中一个cgroup中,即一个task不能存在于同一个hierarchy的不同cgroup中,但是一个task可以存在在不同hierarchy中的多个cgroup中。如果操作时把一个task添加到同一个hierarchy中的另一个cgroup中,则会从第一个cgroup中移除。在下图3中可以看到,httpd进程已经加入到hierarchy A中的/cg1而不能加入同一个hierarchy中的/cg2,但是可以加入hierarchy B中的/cg3。实际上不允许加入同一个hierarchy中的其他cgroup野生为了防止出现矛盾,如CPU subsystem为/cg1分配了30%,而为/cg2分配了50%,此时如果httpd在这两个cgroup中,就会出现矛盾。

图3 一个task不能属于同一个hierarchy的不同cgroup
4、规则4: 进程(task)在fork自身时创建的子任务(child task)默认与原task在同一个cgroup中,但是child task允许被移动到不同的cgroup中。即fork完成后,父子进程间是完全独立的。如下图4中,小圈中的数字表示task 出现的时间顺序,当httpd刚fork出另一个httpd时,在同一个hierarchy中的同一个cgroup中。但是随后如果PID为4840的httpd需要移动到其他cgroup也是可以的,因为父子任务间已经独立。总结起来就是:初始化时子任务与父任务在同一个cgroup,但是这种关系随后可以改变。

图4 刚fork出的子进程在初始状态与其父进程处于同一个cgroup
三、cgroups实现方式和工作原理
cgroups的实现本质上是给系统进程挂上钩子(hooks),当task运行的过程中涉及到某个资源时就会触发钩子上所附带的subsystem进行检测,最终根据资源类别的不同使用对应的技术进行资源限制和优先级分配。
带着问题去学习:
这些钩子hooks是怎样附加到进程上?
下面我们将对照结构体的图表进行分析:

引用
http://www.sel.zju.edu.cn/blog/2015/04/22/docker%E8%83%8C%E5%90%8E%E7%9A%84%E5%86%85%E6%A0%B8%E7%9F%A5%E8%AF%86-cgroups%E8%B5%84%E6%BA%90%E9%99%90%E5%88%B6/
参考
https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/
# Docker cgroups的memory部分
https://www.cnblogs.com/charlieroro/p/10180827.html
# K8S中cgroups问题
https://zhuanlan.zhihu.com/p/540587167
# cgroups功能详解
https://zhuanlan.zhihu.com/p/540587167
https://www.cnblogs.com/sctb/p/17576082.html

浙公网安备 33010602011771号