首页 理论教育 私有云架构设计与实践:容器隔离技术与实现

私有云架构设计与实践:容器隔离技术与实现

时间:2023-10-28 理论教育 版权反馈
【摘要】:早期的容器技术主要由chroot实现,其资源控制与安全性并不能有效地保障。表5-1Nam espace资源概览续表接下来笔者将模拟容器的基本实现,它拥有完整的根文件系统和隔离网络,源码及解析如下[1]。Linux内核在2.6.24版本中引入了Google工程师Paul Menage和Rohit Seth的容器隔离技术process container,后被命名为control group。

私有云架构设计与实践:容器隔离技术与实现

早期的容器技术主要由chroot实现,其资源控制与安全性并不能有效地保障。后来Linux Kernel中先后加入了MOUNT namespace、UTS namespace、PID namespace等六类namespace加强了资源隔离,又引入了Control Group(cgroup)这一重要的系统控制模块,才使得其后的各个容器实现被广泛应用。接下来笔者将就现代容器技术的关键两个点,即namespace和cgroup分别予以代码示例,以期读者能够在容器使用过程中遇到问题能快速定位和解决。

1.Namespace

Namespace是一种资源抽象封装(一般译作“命名空间”),它保证其内部的实例使用被隔离的、相对独立的资源,被广泛应用于各种容器实现中。使用namespace的API时,我们只需要关系3个系统调用(clone()、setns()、unshare()),以及/proc子文件系统中的部分内容即可。目前在Linux中有6类namespace,可在clone时使用不同的参数在子进程中分别创建,创建后可以在/proc/PID/ns/中查看。目前可用的资源如表5-1。

表5-1 Nam espace资源概览

续表

接下来笔者将模拟容器的基本实现,它拥有完整的根文件系统(来自Ubuntu Core项目)和隔离网络,源码及解析如下[1]

然后在主机中编译并运行,可以进入容器的shell。

(www.xing528.com)

接下来设置一对互联的虚拟接口,veth0位于主机的root net namespace,veth1位于子进程(容器)的root net namespace。以下代码也可写入上文代码,但为了方便我们将在shell中完成操作。

然后在容器中启用接口,尝试ping。

2.Control Group

使用namespace将资源隔离后,我们仍需要对这些资源在容器中的用度进行控制。Linux内核在2.6.24版本中引入了Google工程师Paul Menage和Rohit Seth的容器隔离技术process container,后被命名为control group(cgroup)。它与虚拟化也紧密相关,尤其是在使用libvirt限制虚拟机CPU、内存、硬盘I/O时。

笔者以限制CPU用度为例,讲解cgroup的简单使用方法,关于cgroup的详细内容可以参考《Control Group series by Neil Brown》(https://lwn.net/Articles/604609/)以及Linux内核文档(https://www.kernel.org/doc/Documentation/cgroup-v1/)。

首先我们编写一个循环,它会将CPU的单核利用率升至100%。

然后编译运行,我们在另一个终端中使用top命令可观察到loop_test进程的单核CPU利用率为100%。接下来我们利用cfs进程调度算法的quota与period参数将其设置成10%,即将cfs_period_us设置为1 000 000,cfs_quota_us设置为100 000,单位为μs。

此时便可观察到loop_test的CPU利用率降到10%。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈