VMware是金牌赞助商。今年大会的关注点是如何更好地用Docker技术来解决应用的可移植性问题,如何将更多的传统应用迁移到容器环境,如何在生产环境中使用容器技术。VMware在主题演讲中介绍了如何利用NSX和VSAN为容器环境提供更好的的网络、安全与存储服务。
香港开源年会https://2016.opensource.hk/
VMware是金牌赞助商,我的同事Fabio做了题为“开源世界与云原生基础架构软件“的演讲,参会者对VMware的解决方案表示出了浓厚的兴趣。
我最近也参加了一些市场活动和用户交流,感觉疑问最多的还是虚拟机与容器之间的关系,下面我就借着这个话题来谈一谈VMware容器相关解决方案的一些新进展。
当我们谈到容器时,经常会把它和虚拟机进行比较,容器更轻量,更快捷,有更好的可移植性,实际上它们没有优劣之分,是为了满足不同需求而存在的,有着各自的应用场景。在Docker官网上有一篇文章,把虚拟机和容器比喻成别墅和公寓,有兴趣可以读一下:https://blog.docker.com/2016/03/containers-are-not-vms/
VMware在这方面所做的努力主要是将两种技术有机的结合,发挥各自的长处,取长补短。容器是一种非常好的应用封装方式,有效地解决了应用的可移植性问题。但是作为应用的运行环境,它所提供的服务还不够完善。而这恰好是虚拟机技术所擅长的。 在2015年的 VMworld 和 vForum 上,我们发布了容器相关的解决方案,主要内容包括以下几个部分:
-
第一是开发者工作站 App Catalyst;
-
第二是通过增强vSphere来支持容器,即vSphere Integrated Containers;
-
第三是单纯的容器支撑环境Photon Platform;
-
第四是容器和存储、网络、安全和管理服务;
-
第五是基于容器和虚拟机的 DevOps 解决方案。
我和我的同事Henry之前写过一些文章来介绍上述方案,如果你有兴趣,请访问我们的个人公众号(疯云时代和亨利笔记)或 VMware 中国的公众号来进行查阅。其中比较容易混淆的是第二项和第三项,之前我在比较这两个方案的时候使用的是下面的这张表格:在过去的一年里,我们在产品策略上做了一些微调,上面的描述已经不能准确地概括这两个方案的区别。因此我准备利用这个机会重新介绍一下它们的区别。
用一句话概括Photon Platform(以下简称PP)路线:Containers in VM,即把容器跑在虚拟机里,旨在通过虚拟化技术来提供一个易于管理和维护的容器运行环境,PP支持多租户。适用于想独立于虚拟化环境构建容器云的用户。
用一句话概括vSphere Integrated Containers(以下简称VIC)路线:Container as VM,即虚拟机一样的容器,适用于那些对虚拟机非常熟悉,希望在一个平台上同时使用虚拟机和容器的用户。
下面将对两个方案进行具体进行说明:
首先我们来谈谈PP一些用户会在虚拟机里安装容器的宿主OS,然后在上面跑多个容器。PP也是这样做的,我们开发了一个深度定制的宿主OS——Photon OS,它是一个开源项目,目前Github上的最新版本是v1.0。因为虚拟化层抽象了硬件,用于运行容器的Photon OS可以非常精简。但是如何管理这些运行 Photon OS 的虚拟机呢?我们开发了另一款开源产品:Photon Controller,Github上的最新版本是v0.9。与 vSphere 的主控 vCenter Server不同,PP的目标用户是开发者和自动化运维人员,因此它的管理接口主要是命令行和API,图形界面是辅助的,用于监控功能。下面几张图分别展示了PP的 Restful-API,命令行和图形界面。有了PP,我们就可以把多台ESXi服务器上硬件资源加以整合,再加上Photon OS的支持,它就成了一个 Cluster/Container as a Service 平台,现有组件提供的功能并不包括容器的管理与编排服务,要实现这一部分功能,需要借助于Kubernetes,Mesos,Swarm 或是 Cloud Foundry 等,目前PP与这些方案都做了集成,可以快速简便地加以部署。下面再来看看VIC它的理念颠覆了常规意义上的容器用法,容器通过共享更多资源以实现它的效率,但同时也牺牲了一些虚拟化能够带来的好处,最明显的就是安全性,在开放环境或是公共环境中使用容器时要特别注意这一点。VIC 则为每个容器构建一个“虚拟机”环境。同时你不需要在虚拟机内安装和维护宿主OS,vSphere 帮你搞定这一切,这里面提到的虚拟机不是传统意义上的虚拟机,我们称之为 Container VM 或是 Micro VM(后面支撑它的技术主要是Instant Clone)。
下图是通过传统方法在虚拟机运行容器(左)与VIC模式(右)的对比,最大的区别是隔离性,左边容器与虚拟机是多对一,运行在同一个虚拟机内的容器之间靠 namespace 隔离,右边容器与虚拟机是一对一的,运行在微虚拟机内部容器靠微虚拟机来提供隔离保护。
基础架构管理员只需要建立一个“虚拟容器主机”,即将集群中的一部分或全部资源指定给容器使用。这个虚拟容器主机类似于Swarm的集群。然后应用管理员和开发者就可以通过原生的Docker命令和工具使用这部分资源来运行容器了。 下面是VIC的架构图,通过与vSphere之上的网络(NSX)和存储(VSAN)方案进行集成,可以为容器提供完善的网络与安全服务和持续数据存储服务。VIC也是一个开源项目,目前Github上的最新版本是v0.4。了解了上述内容之后,我们可以再延展一点,讨论一下通过虚拟化来构建容器环境的必要性和益处。Docker提供了物理机部署(Docker Machine)和集群管理方案(Docker Swarm),还有一些基于Docker官方组件开发的容器解决方案也是基于物理机的。
在虚拟化平台之上提供CaaS服务,概括起来主要有下述优势:1开发者与基础架构管理团队分工界面明确支持容器的虚拟机有两面性,对于开发者而言,它是一台具有弹性的“物理主机”,上面部署了容器宿主OS,可以通过命令行或API执行各种操作,包括调用虚拟化层提供的网络与存储服务。对于基础架构管理员来说,这个虚拟机是个黑盒子,管理员只需要负责为这个黑盒子分配相应的计算、存储和网络资源即可,不需要关心这些资源是如何被使用的。
2安全的多租户环境有了虚拟机的支持,我们可以提供完美的多租户服务,管理界面和相应的资源与服务都将被很好地隔离。在这方面容器是有架构缺陷的,只能借助于虚拟化或沙箱技术来实现隔离与保护,自身无法解决。
3技能、一致性与效率相对于容器,基础架构团队对虚拟化平台有着更多的管理经验,管理工具也很丰富。通过将容器与虚拟化相结合,原有的技能可以沿用。此外,虚拟化平台在资源管理与调配上具有很高的自动化水平,效率很高,集群服务的服务水平也较高,有更好的弹性与可用性。
4兼容性借助虚拟化,在一个平台之上我们可以运行多种不同的容器环境,如 Linux 和 Windows等。也可以服务于不同类型的应用,如适用于虚拟机的传统应用,和适用于容器的云原生应用。不同安全等级和不同存储服务等级和应用也可以部署在一起。
本文作者@VMware架构师臧铁军,同时也是微信公众号“疯云时代”的运营和维护者。