容器 (Container) 是目前非常流行的一种技术,它跟传统的虚拟化技术一样,都为应用提供了操作系统级的隔离。利用容器技术,可以很方便地把应用在开发、测试、生产环境中进行快速部署,实现 DevOps 流程。但是容器技术还比较新,在安全性、高可靠、运维管理、容灾等方面还很不完善,所以有些客户直接利用现有的 vSphere 虚机来运行 Docker 等容器环境。
在 vSphere 中创建一个 Linux 虚机就可以在上面运行容器环境了,这是最直接的方式,但是这种方式对于资源的利用率不高:
- 在创建虚机时就要预估虚机的大小,容量不够时还需要对虚机扩容;
- 当容器被删除时,释放的资源却仍然被虚机保留着,没有及时回收利用;
- 开发人员需要花费一定的精力来创建和管理这些运行容器的虚机环境,安装或升级容器软件等等。
vSphere 6.5 中新增了内置的容器支持 - vSphere Integrated Containers (VIC):
- 管理员负责创建 Virtual Container Host (VCH),VCH 本质上就是一个 vApp,其中可以有多个 Linux 虚机,每个虚机对应一个容器。
- 开发人员不再需要维护容器的虚机环境,他只需要像往常那样使用容器命令来创建容器就可以了,VIC Engine 提供了 REST API 接口来接收并执行开发人员的命令。
在 VIC 的管理下,容器的使用和管理变得更加简便高效:
- 首先是管理员和开发人员的职责完全隔离开了,管理员负责创建 VCH 来管理和维护 Container Host,开发人员感觉不到也不需要关心容器究竟是在物理还是虚拟化环境中运行。
- 管理在创建 VCH vApp 时就给它分配了可用的资源,这些资源是可以动态分配和回收的,当容器被删除时,它所对应的虚机资源也会被及时释放。
- 可以利用 vSphere 环境中成熟的安全性、高可靠、运维管理、容灾等功能,来为容器运行提供一个更加安全可靠的环境;管理员还是可以使用熟悉的 vSphere 管理平台来管理容器运行环境。
小知识:vApp
vApp 是 vSphere 环境中管理多层应用 (Multi-Tiered Application) 的一种概念或对象。一个复杂应用往往是由多个虚机组成的,如数据库、应用服务器、Web服务器等,vApp 可以把这些虚机组成一组,作为一个整体来进行管理。管理员可以给 vApp 分配资源,把 vApp 作为一个整体来启动或关闭等,当然需要指定 vApp 中各个虚机的启动顺序。
VIC 使用样例
以下用一个简单的例子来说明如何使用 VIC 来创建容器。
1.下图是 vSphere Web Client 的界面,管理员已经建好了一个 VIC_Demo 的 Virtual Container Host,在注释 (Notes) Porlet 中也指明了 DOCKER_HOST 的取值为 tcp://10.21.136.7:2376。
2. 开发人员只需要设置好 DOCKER_HOST 变量,就可以使用 docker 命令来创建和管理容器了。在下面的例子中,开发人员运行了一个 hello-world 的容器,并且使用 ps 命令查看了容器的运行状态。
3. 在管理员的控制台上,注意 VIC_Demo (Virtual Container Host) 下多了一个虚机 9cd7b447a9ee,它对应的就是刚才创建的 hello-world 容器,在 Container Porlet 中也可以看到对应的容器名字和相关信息。
VIC 开源项目
VIC 对于 vSphere 用户是免费的,大家可以去 github 上下载 (http://github.com/vmware/vic-product)。
VIC 共有三个组件:
- VIC Engine
VIC 的核心组件,通过 Virtual Container Host 来支持容器运行,提供 REST API 来为开发人员提供熟悉的容器开发环境,把通常的 docker 命令转换成相应的虚机和容器操作。 - Harbor
企业容器 Registry,是容器镜像的“仓库”,提供容器镜像的下载服务。(PS:这是 VMware 中国研发团队开发的哦。) - Admiral
容器管理 Portal,提供 GUI、API 和命令接口来对容器进行调配、管理和监控。
虽然 VIC 用起来这么简单,可能有人会问在虚机中运行的容器,会不会有额外的资源开销呢?其实大家不必担心,VIC 采用了两项 VMware 的独门技术来达到跟普通容器同等水平的资源消耗。
- Photon OS:光子操作系统是 VMware 为容器量身定制的 Linux 操作系统,专门针对 vSphere 环境进行了优化,因为运行在虚机上,只需要包含少数几种虚拟硬件驱动就可以了,最精简的版本占用的空间只有25M。
- Instant Clone:是 vSphere 6.0 开始新增的功能,它可以把现有正在运行的虚机做一个即时克隆,新生成的虚机完全重用原虚机的内存镜像,只有对内存写操作时才会做针对那块内存做一个复制。即时克隆生成虚机的速度是秒级的,能够达到跟容器生成同样快的速度;同时需要额外占用的内存空间也非常少。
VIC 在性能和资源消耗方面跟普通的容器技术差不多,但是在安全性、高可靠、运维管理、容灾等方面提供了更完善的运行环境和解决方案,对于已经是 vSphere 的用户来说,VIC 是尝试容器技术的最佳选择。而且 vSphere 的支持服务中也包含了对于 VIC 的支持,大家尽可以放心地使用这一新功能。