容器的基本原理详解
本节以Linux容器为例,讲解容器的实现原理,主要包括命名空间(Namespace)和控制组(cgroups)。 命名空间 命名空间是Linux操作系统内核的一种资源隔离方式,使不同的进程具有不同的系统视图。系统视图就是进程能够感知到的系统环境,如主机名、文件系统、网络协议栈、其他用户和进程等。使用命名空间后,每个进程都具备独立的系统环境,进程间彼此感觉不到对方的存在,进程之间相互隔离。目前,Linux中的命名空间共有6种,可以嵌套使用。
命名空间实现了在同一操作系统中隔离进程的方法,几乎没有额外的系统开销,所以是非常轻量的隔离方式,进程启动和运行的过程在命名空间中和外面几乎没有差别。 控制组 命名空间实现了进程隔离功能,但由于各个命名空间中的进程仍然共享同样的系统资源,如CPU、磁盘I/O、内存等,所以如果某个进程长时间占用某些资源,其他命名空间里的进程就会受到影响,这就是“吵闹的邻居(noisy neighbors)”现象。因此,命名空间并没有完全达到进程隔离的目的。为此,Linux内核提供了控制组(Control Groups,cgroups)功能来处理这个问题。 Linux把进程分成控制组,给每组里的进程都设定资源使用规则和限制。在发生资源竞争时,系统会根据每个组的定义,按照比例在控制组之间分配资源。控制组可设定规则的资源包括CPU、内存、磁盘I/O和网络等。通过这种方式,就不会出现某些进程无限度抢占其他进程资源的情况。
Linux系统通过命名空间设置进程的可见且可用资源,通过控制组规定进程对资源的使用量,这样隔离进程的虚拟环境(即容器)就建立起来了。 (编辑:我爱制作网_潮州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |