ad

《基于Kubernetes的容器云平台实战》_了解最新技术前沿_1.4.2 Docker 原理

admin 163 2023-10-25

【摘要】 本书摘自《基于Kubernetes的容器云平台实战》一书中第1章,第4节,由陆平、左奇、付光和张晗等编著。

1.4.2 Docker 原理

《基于Kubernetes的容器云平台实战》_了解最新技术前沿_1.4.2 Docker 原理

Docker是基于操作系统虚拟化技术实现的,这一点与基于硬件虚拟化的各种虚拟机产 品有很大不同,但是两者所要解决的问题在很多方面却有相似之处,比如,都希望为应用 提供一个虚拟、完整和独占的运行环境,都希望能够提高这些虚拟环境之间的隔离度,也 都希望能够从管理的角度对这些虚拟环境占用的宿主机资源进行方便的管控。在解释为何 使用Docker的时候已经提到, Docker解决这些问题的途径是在共享宿主机内核的基础上 包装内核提供的一系列API。 具体到Linux操作系统上,内核所提供的相关API 涉及很多 方面,其中被大家关注得最多也是最主要的是 CGroup 和namespace。 另外,在实现分层镜 像和容器的根文件系统视图时, Docker使用了与虚拟文件系统相关的挂载和绑定挂载 API, 这些都不是新内容,只是Docker这类容器化产品将它们进行包装并推动了操作系统已有虚 拟化能力的大众化而已。

下面就对这几个 Docker中应用到的主要技术分别进行简单的介绍。

CGroup是Control Group的缩写,它是Linux中的特有功能,首先由Google公司提交 的内核补丁实现。顾名思义,这个功能与控制、分组有关。其实,如果单从功能角度来看的话,也许叫做Group Control更好一些。这主要是因为该功能的核心在于对进程进行层次 化分组,并能够以每个组的粒度实现诸如资源限制和策略控制功能,而这正是前面提到的 虚拟化目标的基础。每一个虚拟环境(或者称之为“容器”)中的应用进程,以及后续加入 该环境中的其他进程都应该受到同样的策略管控,这是很容易理解的;但是在没有这个基 础设施之前,单从已有的操作系统功能上看是无法实现的。而有了这种分层的分组功能之 后,不仅是容器运行时,包括系统管理员,也可以方便地实现对容器中进程占用的CPU、 内存等资源的限制。而这种控制功能,在CGroup 中是由很多控制器来完成的,主要的控制 器 包 括blkio、cpu、cpuacct、cpuset、devices、freezer、hugetlb、memory、net cls、net prio 和perf event等。

这些控制器和不同的进程组之间的关系在第一个版本的CGroup 实现中是很灵活的。 每个控制器可以对应到单独的一个组,以及由该组的子组所构成的所谓“层次结构”。这 也是目前Docker 所支持的实现方式。但是这种实现被认为过于复杂,带来了很多技术上 的障碍,因此在第二个版本的实现中将这种“层次结构”限定为只有一个。但是版本二的 CGroup 功能直到在4.15版本内核中才完整实现,目前可能还不成熟。

不管是哪一个版本的CGroup 实现,对进程分组的控制都是通过一个虚拟文件系统下 的目录节点和其中的节点文件来实现的,而各种控制器功能也是通过一些节点文件来实现。 整个CGroup 功能模块的对外接口就是通过这个虚拟文件系统来暴露。在使用了systemd 作为init 的 Linux系统上,这个CGroup 虚拟文件系统的挂接点路径为/sys/fs/cgroup。 在 下面的目录列表中, cpu 和 cpuacct是指向 “cpu,cpuacct”的符号链接, systemd 目录节点 是systemd 自己创建的一个“层次结构”,与任何控制器无关,只利用到CGroup 核心的进 程分组管理功能。其他目录节点和其下的子节点基本上每个都对应着一种控制器。下面是 systemd 管理下默认的CGroup 层次结构的根列表。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:打开《Python入门与实战》_一步步学会Python_4.3 return 语句
下一篇:看《Excel人力资源管理实操全流程演练》如何教你做更好的表格_4.2 招聘成本表格设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×