OVF协议:虚拟机的MP3格式(1)
第一篇章 OVF协议诞生记
所谓万物皆有源,在介绍OVF协议之前,我们不能不提虚拟器件,而在提虚拟器件之前,我们还得从当前应用所面临的困境谈起。
应用的三大困境
虽然与应用相关的困境很多,但是总体看来,有三个方面的问题是比较突出的:
一是开发麻烦。最明显的例子就是,在一个普通应用的整个开发和测试过程中,不仅需要兼顾多个平台,例如Windows、Linux等,而且还要注意每个平台的多个版本,例如Ubuntu 9.10、Ubuntu 8.04 LTS,等等。
二是部署麻烦。因为一个应用的安装是很难离开艰涩的教程和繁琐的步骤, 而且缺乏完善的安全和许可证的管理,这将导致使用者的利益很难得到保护,同时开发者的权益更难以捍卫。
三是维护麻烦。原因是一个应用不仅包括ISV(独立软件开发商)开发的软件,还包括其他供应商的操作系统、中间件和数据库等,这些因素都将为应用升级带来潜在的麻烦,寻求技术支持时则有可能遭遇被厂商“踢皮球”的命运。
虚拟器件与OVF协议
那么,在云时代,有哪些云计算技术能帮助解决应用的困境呢?当然有很多,但其中最有代表性的莫过于虚拟器件(Virtual Appliance)。虚拟器件,是一个预配置的软件堆栈,包括1个或多个虚拟机,而且其中每个虚拟机都可以自运行,而且自带操作系统和相关的应用,并明确其所需的虚拟资源。虚拟器件和普通的虚拟机相比,它在跨平台、对多层架构的支持、预配置和预优化等方面都具有一定的优势。
在对应用的支持方面,虚拟器件是非常有帮助的,它能逐一化解当前应用部署的三个困境:
一是开发简单。因为开发人员能限定应用自带的操作系统、中间件和数据库等软件的版本,例如SLES 11、WAS 7和DB2 9.7等,这样将有效缩小开发和测试的范围,从而极大地降低应用开发和测试的难度与复杂度。
二是部署简单。首先,如果使用虚拟器件方式部署的话,能将本来需要几天的工作缩短到几分钟,能将本来几十步操作精简到轻轻一击。其次,能非常简单地将应用部署或者迁移到公有云上,以应对突发情况。
三是维护简单。因为整个虚拟器件都是来自于同一个ISV,所以任何软件升级和技术支持,都只要和一个ISV联系就可以了,不仅避免了常见的扯皮现象,而且还简化了相关流程。
虽然虚拟器件这个想法不错,但是大家都知道“无以规矩不成方圆”的道理,所以,VMware带领众虚拟化技术提供商提出了Open Virtualization Format (简称“OVF”)协议来规范虚拟器件的发展。
因此,OVF协议就是用于发布和部署虚拟器件的开放标准。它是一种开放、安全、可迁移、有效、跨平台以及可扩展的格式,以用于封装和分发将在虚拟机上运行的软件。
OVF协议被VMware CTO Steve Herrod喻为虚拟机的MP3格式,由业界著名DMTF(Distributed Management Task Force,分布式管理任务组) 协会制定和发布,同时隶属于志在推动云计算互操作性的VMAN(Virtualization Management,虚拟化管理) 计划,并且在2010年9月份正式被ANSI(American National Standards Institute、美国国家标准学会)定为美国国家标准。
虽然OVF协议发起人和主要负责人都是来自于VMware的,但因为其开放性和重要性,使得越来越多厂商开始支持此协议,甚至VMware的竞争对手Xen、思杰,以及虚拟化的开创者 IBM也参与了协议的制定。同时有一系列支持OVF的工具已经发布了,或者正处于测试阶段,例如VMware的VMware Studio、思杰的Project Kensho、IBM的IBM OVF Toolkit,等等。
除了上面这些支持OVF的工具,VMware为了加速虚拟器件的传播和OVF协议的推广,还推出一个用于分发虚拟器件的在线市场,叫做“Virtual Appliance Marketplace”,简称“VAM”。它提供类似于苹果App Store 的用户体验,来帮助用户购买和试用上千种各式各样的基于OVF格式的虚拟器件,从应用程序到操作系统,应有尽有。此外,VAM还包括一些工具和推荐信息来帮助用户做正确的决定。令人欣慰的是, VAM 已经是VMware 公司旗下最受欢迎的站点之一。
第二篇章:OVF协议详解
设计理念
众所周知,对于一个软件而言,它的设计理念将会对它的发展起着非常重要的影响,而对于一个协议来讲,更是如此。在谈到OVF的设计理念时,它主要体现在下面这六个方面:
1. 便于分发:支持虚拟器件的认证和完整性检验等安全措施,并提供软件许可的管理机制。
2. 支持多种架构:包括单个虚拟机、多个虚拟机或者多层(Multi-Tier)架构。
3. 跨平台:OVF协议不依赖于特定的虚拟化平台,例如 VMware 或者 Xen。
4. 开放协议:OVF协议是业界几大虚拟化技术供应商之间合作的产物,并且鼓励更多的企业参与其中。
5. 可扩展:OVF协议不仅能满足现有的要求,而且为了满足虚拟器件技术不断发展和某些特殊的需要,它还支持一定程度的扩展。
6. 支持本地化:这将能帮助那些非英语国家的用户便利地使用。
可以看出,在这六点中,便于分发、支持多种架构和跨平台这三个特点对于应用都非常有帮助。
OVF格式
图1:OVF包的结构
OVF协议常用的发布格式是基于POSIX 1003.1 ustar标准的以“.ova”为后缀名的压缩包,简称为“OVF包”。如图1所示,一个OVF包主要有五种文件组成:
1. OVF 描述文件:通常称为“OVF信封”,是一个XML文档,用于定义整个虚拟器件的组成部分(例如虚拟机),以及每个组成部分的特性和资源需求,后缀名为“.ovf”。
2. 虚拟磁盘文件:即虚拟机的二进制磁盘镜像。
3. 清单文件:清单包含OVF包中各文件的 SHA-1 摘要(也称“校验和”),其作用是确保包的完整性,后缀名为“.mf”。
4. 证书文件:作用是通过对清单文件进行数字签名来确保整个虚拟器件的可信性,以 base64编码的X.509 证书形式存储,后缀名为“.cert”。
5. OVF环境(Environment)文件:一个键值(Key-Value)形式的XML文档,用于设定和维护虚拟机上软件的配置,后缀名为“.env”。
在上述五种文件中,OVF信封是整个虚拟器件的核心文件,因为它定义了所有重要的元数据,主要包括以下几个模块:
◇ 磁盘(Disk)模块:用于描述存放在OVF包内的虚拟磁盘的信息,例如磁盘的大小和格式。
◇ 网络(Network)模块:用于描述OVF包内虚拟机的网络拓扑结构。
◇ 启动(Startup)模块:用于定义OVF包内多个虚拟机之间的启动顺序。
◇ 虚拟系统(Virtual System)模块:用于描述一个虚拟机,并且作为一个容器,来包含多个隶属于这个虚拟机的模块,例如许可协议(Eula)模块、资源分配(Resource Allocation)模块、操作系统(Operating System)模块和产品(Product)模块等(各模块特性参见表1)。整个OVF信封可包括多个虚拟系统模块以支持多虚拟机的部署。
表1 虚拟系统子模块
模块名称 描述
资源分配模块 定义虚拟机所需要的资源量,例如vCPU的个数和内存的大小等。
许可协议模块 包含与这个虚拟机相关的许可协议和法律条款,并且这些协议和条款都将在部署时被使用者确认。
产品模块 用于描述安装在虚拟机上软件的信息,例如软件的名字、版本号和供应商等,并定义一些重要的软件配置信息,例如Web服务器和数据库的开放端口等。此外,还将指定哪些配置是使用默认值,哪些配置是需要在部署时输入的。
操作系统模块 定义虚拟机内部操作系统的版本信息,例如Microsoft Windows Server 2008。
另一个值得一提的是OVF 环境文件。OVF 环境文件则常常用在部署阶段,里面主要存放并维护来自OVF信封内的,产品模块里面的配置信息。也就是说,信封文件的产品模块里会定义有哪些值需要在部署之前输入,而这些值实际存储在环境文件中。此文件在部署时具体的使用流程是:首先,部署工具会让用户回答并确认信封的产品模块内的软件配置选项,例如Linux 系统的IP地址等。接着,部署工具会通过刚才的输入生成新的OVF环境文件,并通过虚拟光驱或者虚拟软驱将环境文件传入虚拟机中。最后,虚拟机上软件会读取这个文件,并执行相关的操作。