什么是容器?
容器是一个 Linux 上的概念,它为一个应用提供一个独立的用户空间,这个用户空间包含了支持应用运行所需要用到的所有系统资源,包括系统调用、运行库、文件系统等等。每个容器都把应用和它所依赖的运行环境打成一个包,叫作容器的镜像 (Image)。容器镜像存放在注册服务器 (Registry) 上,可以选择公共的注册服务器,如 Docker Hub;也可以选择私有的注册服务器,如 Harbor。
容器本质上跟虚拟化技术是一样的,都是为应用提供一个隔离的运行空间,只是两者的隔离粒度不一样而已。类比一下,每个人都想有自己的办公电脑,但是为了节约成本,需要几个人共享一台电脑的话,我们可以在 Windows 上为每个人建一个帐号,每个人登录后也可以接近于拥有自己电脑的效果,尽管操作系统和应用软件是共享的,但是桌面和数据都是个人独享的,每个人都有自己的用户空间,这个就是容器的概念。也可以为每个人创建一个虚拟机,虚机就隔离得更彻底一些,虚机里所有内容都是个人独占的。
容器天生就要比虚拟化更节省资源,具有启动速度更快,占用内存空间少的特点;但是虚拟化在隔离程度上要更为彻底,传统应用不用做任何改动就可以迁移到虚机环境里去运行。两者可以说是各有优缺点,可以根据应用架构的实际情况来选择,现在很多云端应用都采用了基于容器的微服务架构,所以容器也成为了云原生应用 (Cloud Native Application) 的标志性技术。
怎样在 vSphere 平台上运行容器
运行容器的话需要有一个容器引擎,大家经常听到的 Docker 就是一个开源的应用容器引擎,Docker 需要运行在 Linux 系统中,既可以部署在物理机上,也可以部署在虚拟机上。容器技术从诞生起就是为开发人员所准备的,所以使用容器最常用的方法就是命令行方式,开发人员利用 Docker 命令来快速地创建、启动、删除容器。
想要在vSphere 平台上运行容器非常简单,只要建一个 Linux 虚机,安装 Docker 容器引擎后就可以在上面运行容器环境了,这是最直接的方式,但是这种方式的效率不太高:
- 需要开一个IT服务请求让管理员来创建一个 Linux 虚机;
- 在创建虚机时就要预估虚机的大小,容量不够时还需要对虚机扩容;
- 当容器被删除时,释放的资源却仍然被虚机保留着,没有及时回收利用;
- 开发人员需要花费一定的精力来创建和管理这些运行容器的虚机环境,安装或升级容器软件等等。
为了更好地支持在 vSphere 平台上运行容器,VMware 专门开发了基于 vSphere 的容器运行平台vSphere Integrated Containers (VIC):
- 管理员负责创建 Virtual Container Host (VCH),VCH 本质上就是一个 vApp,容器在 VCH 上运行。
- 每个容器对于一个虚机,创建一个容器就相当于增加一个虚机,删除容器就是删除它所对应的虚机。
- VIC 提供了兼容 Docker 的命令,开发人员只需要像往常那样使用 Docker 容器命令就可以创建容器和使用容器了。
可能有人会问在虚机中运行容器,会不会有额外的资源开销呢?其实大家不必担心,VIC 采用了两项 VMware 的独门技术来达到跟普通容器同等水平的资源消耗。
- Photon OS:光子操作系统是 VMware 为容器量身定制的 Linux 操作系统,专门针对 vSphere 环境进行了优化,因为运行在虚机上,只需要包含少数几种虚拟硬件驱动就可以了,占用的空间非常少。
- Instant Clone:是 vSphere 6.0 开始新增的功能,它可以把现有正在运行的虚机做一个即时克隆,新生成的虚机完全重用原虚机的内存镜像,只有对内存写操作时才会做针对那块内存做一个复制。即时克隆生成虚机的速度是秒级的,能够达到跟容器生成同样快的速度,同时需要额外占用的内存空间也非常少。
小知识:vApp
vApp 是 vSphere 环境中管理多层应用 (Multi-Tiered Application) 的一种概念或对象。一个复杂应用往往是由多个虚机组成的,如数据库、应用服务器、Web服务器等,vApp 可以把这些虚机组成一组,作为一个整体来进行管理。管理员可以给 vApp 分配资源,把 vApp 作为一个整体来启动或关闭等,当然需要指定 vApp 中各个虚机的启动顺序。
vSphere Integrated Containers
在 VIC 的管理下,容器的使用和管理变得更加简便高效:
- 首先是管理员和开发人员的职责完全隔离开了,管理员负责创建 VCH 来管理和维护 Container Host,开发人员感觉不到也不需要关心容器究竟是在物理还是虚拟化环境中运行。
- 因为VCH 实际上是由 vApp 来实现的,创建一个容器就相当于增加一个虚机;当容器被删除时,它所对应的虚机资源也会被及时释放。
- 可以利用 vSphere 环境中成熟的安全性、高可靠、运维管理、容灾等功能,来为容器运行提供一个更加安全可靠的环境;管理员还是可以使用熟悉的 vSphere 管理平台来管理容器运行环境。
VIC 是 vSphere 企业增强版才支持的功能,只要你的 vSphere 版本在6.0以上就可以使用了,不需要另外购买;另外你所购买的 vSphere 产品支持和订阅服务 (SnS – Support and Subscription) 中也附带了对于 VIC 的支持。要使用 VIC 的话,只需要在 My VMware 下载 vSphere Integrated Containers OVA,把它导入到 vSphere 环境中就可以了。
VIC 也是一个开源项目,源代码可以在 github 上下载 (http://github.com/vmware/vic-product),VIC 共有三个组件:
- VIC Engine:VIC 的核心组件,通过 Virtual Container Host 来支持容器运行,提供 REST API 来为开发人员提供熟悉的容器开发环境,把通常的 Docker 命令转换成相应的虚机和容器操作。
- Harbor:企业级的容器注册 (Registry) 服务器,是容器镜像的“仓库”,提供了安全性、身份认证和访问权限管理等企业级的功能。
- Admiral:容器管理 Portal,提供 GUI界面来对容器进行管理,包括显示容器实例的状态和信息、管理 VCH (Virtual Container Host) 的容量配额、工作流审批等等;还可以跟 vRealize Automation 相集成,实现容器环境的自动化部署和调配,实现企业级的容器即服务Containers-as-a-Service。
VIC 在性能和资源消耗方面跟普通的容器技术差不多,但是可以充分利用 vSphere 平台现有的安全性、可靠性、运维管理、容灾等方面的解决方案,来弥补容器在这方面的短板。对于已经是 vSphere 的用户来说,VIC 是尝试容器技术的最佳选择。另一方面,虚拟化已经成了很多企业级用户的标准,他们已经建立了以服务器虚拟化为基础的标准运维流程,不太可能为了在物理服务器上运行容器而另外建立一套运维体系,对这些用户来说,VIC 是开始尝试容器技术的一个最好选择。