许多人认为在容器和虚拟机之间只能选择其中一种,但事实并非如此——下面将详细介绍其中的原因。
IT专家一直在尝试解决一个问题:应该怎样在容器和虚拟机之间做出选择,而现在的解决方案是同时使用两种技术。
虚拟机和容器技术是实现虚拟化的两种不同方式,二者都能够实现多种应用程序共享相同硬件资源,但是其技术特点、优势以及劣势却完全不同,这周Container World的与会者尤为深刻地感受到了这一点。
从易于使用和自动化的角度来看,容器技术似乎更加占据优势。
“相比于虚拟机,容器技术要简单的多,”服务器虚拟化提供商Odin的前CTO James Bottomley表示,他同时也是一名Linux内核维护人员。“虚拟机使得流程控制问题变得更加复杂。”
的确,在某些情况当中虚拟机能够满足企业在控制和安全方面的需求,谷歌的高级工程师兼Kubernetes的首席工程师Brenden Burns表示, Kubernetes是谷歌针对Docker容器推出的开源集群管理器。他说,“内核调优需要在虚拟机当中进行。”
总体来说,谷歌在没有使用虚拟机的情况下依然能够实现内部系统的高效运行,谷歌并没有依赖于容器技术和Borg(Borg是谷歌内部自行研发的容器管理系统,也就是Kubernetes的前身)。在Google Compute Engine发布之后,基础架构即服务(IaaS)使得谷歌迅速进入了服务器虚拟化领域。
但是在某些情况下,必须一套系统当中同时使用容器和虚拟机。比如Netflix,虽然将所有基础架构都运行在以虚拟机为基础的AWS(Amazon Web Services)当中,但是在上层仍然需要使用容器技术。Netflix的平台技术经理Tim Bozarth表示,这样做主要出于两种原因:规范开发者体验并且降低运营开销,
“开发人员说,‘我所需要详细说明的就是为何要运行某个进程——而不是思考它该如何兼容一台适用于所有环境的虚拟机,’”Bozarth说,这导致了“基础架构的透明化。”
如果能够实现容器封装格式的标准化,那么从开发人员笔记本电脑到生产环境的持续性开发和云部署也将变为可能。
同时,运维部门不希望自己管理这些集群。
“这绝对是一项非常繁重的任务,”Bozarth表示。如果使用容器技术,他们可以使用集群管理系统来实现资源分配和负载定位。
综合来说,容器技术为NetFlix带来的这两种好处“足够说服其选择使用容器技术,并且在基础架构当中进行底层变动,”他说。得益于系统密度的提升,Netflix获得了之前从未拥有过的运营性能方面的优势。
“我们向亚马逊支付了大量费用,”他说。“如果能节省一点当然很好——但是这并不是我们考虑的主要因素。”
另外一个应该关注的重点是运行哪种类型的容器——应用程序容器(Docker)还是操作系统或者机器容器(Solaris Zones 或 FreeBSD Jails)。应用程序容器通常只包含一个单独进程,非常适合于无状态化的、以微服务为基础的应用程序。而系统容器则会启动整个操作系统,通常被用于运行状态化应用程序,比如数据库等,任职于Ubuntu产品和战略团队的Dustin Kirkland表示。
无论企业更喜欢使用哪种格式,容器也不会完全取代虚拟机,CoreOS公司CEO Alex Polvi表示,其是Rocket容器格式的创造者,这是一种基于Kubernetes的容器管理系统。
“这就好像是说Puppet将会替代虚拟机一样——从根本上来说它们并不属于相同种类,”他说。
最后,不要凭空思考应该使用哪种技术——还要综合考虑你的设计目标,社交协作软件公司Lithium Technologies的云平台团队主管Lachlan Evenson建议。
“一切都要以需要解决什么问题为基础。如果没有问题,那么就不要进行变动。”