【IT168 评论】近日,Linux Journal上发布了一篇文章,“Containers—Not Virtual Machines—Are the Future Cloud”,引起了业内的广泛讨论。作者David Strauss是Pantheon公司(一家做Drupal PaaS服务的供应商)的CTO,他认为,VM的好处在于可以上下扩展,可控的计算资源,安全隔离,并可以通过API进行部署;但其缺点在于,每一台VM都消耗了一部分资源用于运转一个完整的操作系统。所以,另一种方式更适合一个云平台,就是Linux Containers。
Containers可以作为OS层面的虚拟化的一个替代方案,你可以在一个宿主机上运行多个隔离的系统。在单一的操作系统下运行container更加高效,因此,container将会替代VM,成为未来云计算基础架构中的主导技术。
Container并不是一项新鲜技术。根据2009年在IBMdW上的“LXC: Linux container tools”一文当中的介绍:
Container这项技术发展已久,Solaris Zones和BSD jails都是非Linux系统上的containers实现。Linux上的container技术也已经有很多实现,如Linux-Vserver,OpenVZ和FreeVPS。虽然以上这些技术都进入了成熟期,但他们都没有打入Linux内核的mainstream。
另一方面,由IBM开发者Daniel Lezcano研发并维护的Linux Resource Containers项目则通过大量努力进入了Linux内核的mainstream,从而为更加成熟的Linux container解决方案提供了一个公共的支持平台。
Oracle Technology Network上在2012~2013年间发布了一个系列文章,The Role of Oracle Solaris Zones and Linux Containers in a Virtualization Strategy,内容比较新一些。其中对Linux Containers是这样介绍的:
Linux Containers从根本上提供了原生的性能,你可以实时进行资源分配的管理。Linux Container当中运行的二进制程序实际上是直接在宿主机的内核上运行的一个普通的进程,跟其他进程没什么两样。这同时也意味着CPU和I/O的规划更加公平,而且可以进行微调。Container下拿到的磁盘I/O性能是系统虚拟化所无法比拟的(即使在Xen下使用paravirt模式也无法达到)。你可以在Linux Container当中运行磁盘I/O较重的应用,如数据库。
跟系统虚拟化和Oracle Solaris Zones不同的是,LXC无法运行其他非Linux系统。不过,你可以在同一个宿主机内核下的不同containers里面运行不同的Linux发行版。
这个名为lxc的项目是这样描述自己的:
lxc Linux Containers
container namespace cgroup virtualisation
LXC是针对Linux Containers的用户空间控制包。这是一个轻量级的系统虚拟化机制,有时被描述为“chroot on steroids”(类固醇上的chroot,意思是功能类似chroot,但比chroot提供了更多的隔离功能)
LXC基于chroot实现了完整了系统虚拟化,并在Linux现有的进程管理架构上添加了资源管理和隔离的机制。
lxc的实现为:
通过cgroup实现的“进程管理组”进行资源管理;
通过为clone(2)系统请求添加的flag实现资源隔离,可以为PID、网络路由等创建数种新的命名空间;
提供了数种不同的隔离机制,如devpts文件系统下可以使用“-o newinstance”的flag。