内容


虚拟设备和 Open Virtualization Format

跨越不同管理程序的格式和工具包

Comments

虚拟设备 是通过虚拟化支持的一种软件交付形式,它促进了高效和优化的应用程序的交付,推动了快速成长的云计算浪潮。本文将探索虚拟化和虚拟设备背后的理念,虚拟设备对操作系统的影响,以及将简化虚拟设备软件部署的未来标准。

虚拟设备的关键因素

我们首先快速讨论一下虚拟设备背后的关键因素:虚拟化平台。操作系统代表针对各种应用程序的虚拟化平台(共享对处理器和资源的访问),而管理程序(hypervisor)则代表针对各个操作系统的虚拟化平台。管理程序很重要,因为它支持在同一个系统上运行多个不同的操作系统。对于桌面用户而言,这种能力很重要,因为它允许桌面用户同时运行 Windows® 和 Linux®。对于服务器而言,这种能力支持托管多个操作系统,这些操作系统能够同时运行各种服务器应用程序,如 Web 服务器、电子邮件程序、数据库和其他有用的服务。另外,各个操作系统之间都是相互独立的,一个操作系统中的故障不会影响另一个操作系统。

我们首先快速讨论一下虚拟设备背后的关键因素:虚拟化平台。操作系统代表针对各种应用程序的虚拟化平台(共享对处理器和资源的访问),而管理程序(hypervisor)则代表针对各个操作系统的虚拟化平台。管理程序很重要,因为它支持在同一个系统上运行多个不同的操作系统。对于桌面用户而言,这种能力很重要,因为它允许桌面用户同时运行 Windows® 和 Linux®。对于服务器而言,这种能力支持托管多个操作系统,这些操作系统能够同时运行各种服务器应用程序,如 Web 服务器、电子邮件程序、数据库和其他有用的服务。另外,各个操作系统之间都是相互独立的,一个操作系统中的故障不会影响另一个操作系统。

对于服务器应用程序,虚拟化非常重要。美国环保局最近一份研究表明,典型服务器的利用率通常只有 5%。因此,服务器上还有许多空间、许多潜力可以挖掘,可以节约大量成本。虚拟化技术能够解决这个问题,它能够创建虚拟服务器,虚拟服务器上可以运行多个操作系统及其应用程序。这样,10 个或更多的物理服务器能够减少为一个运行 10 个或多个虚拟服务器的物理服务器(见图 1)。

图 1. 服务器虚拟化的好处
服务器虚拟化的好处
服务器虚拟化的好处

图 1 显示,每个软件堆栈(操作系统和应用程序)都是一个独立的虚拟机(VM)。一个虚拟机失败并不意味着所有虚拟机都会失败。但是,图 1 中最重要的部分是每个堆栈的顶部。每个软件堆栈的最终目的都与应用程序有关:应用程序是软件堆栈的真正价值所在。从这个意义上讲,虚拟设备只是应用程序的容器。应用程序有其自身的依赖项(如操作系统或库),但应用程序是关键因素。

虚拟设备剖析

因此,一个虚拟设备只是应用程序及其所有依赖项(操作系统、第三方库、配置等)的一个容器。下面让我们深入探讨虚拟设备及其替代品。

虚拟设备容器是一个 VM 映像(VMI),VMI 是一个包含 VM 的硬盘映像(包括内核、引导分区和引导文件系统)的文件。这个文件通常采用压缩格式 — 尤其是,该文件并不是根据 VM 的硬盘容量确定的,它的大小随着 VMI 的内容变化。从兼容性角度看,VMI 的格式很重要,我将稍后介绍这个主题。

您可以将虚拟设备视为一个软件堆栈,这个软件堆栈包含目标应用程序、库、服务配置、相关数据和操作系统。另外,虚拟设备不仅仅是一组合并的元素,它还针对特定应用程序进行了配置和优化(见图 2)。

图 2. 虚拟设备剖析
虚拟设备剖析
虚拟设备剖析

但说到底,虚拟设备只不过是一个大文件,管理程序可以用它创建一个 VM 实例。作为一个文件,虚拟设备拥有一些有用的特性 — 比如,复制(以便备份)和在多个管理程序之间移动(称为 VM 迁移)。

虚拟设备的优势是,关注点在应用程序上。VMI 包含在虚拟环境中运行应用程序所需的所有组件,它针对应用程序进行配置和优化,从而简化了应用程序的部署。现在,考虑一下一种替代方法:同样的应用程序可以在一个 VMI 之外分发并在任意操作系统上运行,这需要编译应用程序及其所有依赖库和服务,然后配置和调优应用程序和环境。应用程序也可以有特定的操作系统要求。这个过程很常见,其复杂性取决于应用程序本身,但这个过程会耗费大量时间,而且容易出错。

这两种方法之间的根本区别在于对应用程序的关注点不同。例如,一个应用程序安装可能已根据特定操作系统(或特定文件系统)量身定做,也可能需要安装某些服务(如数据库)和库(以满足这些服务的依赖项),而且,这些元素可能都需要配置和调优。一旦该应用程序部署到一个特定系统后,它也就被绑定到那个系统之上了。

VMI 依赖一个兼容的管理程序,而且可能需要对该管理程序的设备模拟进行一些配置,但其关注点还是在应用程序上。但是,除了配置简单外,虚拟设备还有别的价值。现在,让我们看看虚拟设备的一个关键特性。

虚拟设备的含义

当您开始从应用程序角度看待虚拟设备时,您可以开始调整并调优应用程序周围的整个环境。考虑一下操作系统。对于特定应用程序,某个操作系统服务可能不是必须的,但其他服务对于目标应用程序的性能可能很重要。这个上下文中提到的操作系统称为 Just Enough Operating System,或 JeOS(发音与 juice 相同)。VMware 首先提出这个术语,表示针对虚拟设备的理想构造。

尽管 VMware 创造了这个术语,但实践却花了很长时间。基于 Linux 的嵌入式系统通常采用一个规模更小的内核和应用程序堆栈,这比提供的嵌入式设置更适合受限制的环境。然而,VMware 的应用不仅仅是最小化服务以支持一个受限制的环境。服务器空间中的硬盘空间和内存通常很充足,但实际上很多硬盘空间和内存都处于闲置状态。更少的服务和驱动程序意味着给定系统上需要维护的软件更少,从管理角度看,这意味着更新操作系统需要的补丁更少(更新需要的带宽和存储空间也就更少)。

从可靠性角度看,JeOS 提供了一些好处。通过排除给定系统不需要的软件,您减少了故障发生的几率并提高了稳定性。这还将最小化系统遭受攻击的几率(更少的服务意味着攻击系统的路径更少),从而提高软件堆栈的安全性。

Linux(一个单片内核)提供通过模块动态调整操作系统的方法,但更大程度的架构最小化只能通过内核编译实现。相比之下,微核操作系统提供动态抛出功能的方法,从而提供伸缩性更好的环境。为实现上述目标,微核创建一个只包含基本服务(如内存管理和调度)的内核并将其他功能推到内核之外。除了提供伸缩性更好的环境之外,微核还能提供稳定性优势。特权空间中运行的代码越少,操作系统失败的可能性也就越小。

构建虚拟设备

要最小化 Linux 内核,您可以采用两种完全不同的方法。第一种方法是通过内核构建流程手动配置内核。尽管这也许是(针对特定应用程序)最小化内核的最精确的方法,但还有简单得多的方法。大多数 Linux 发布版供应商提供 JeOS 版本,这些操作系统版本专门针对在一个管理程序上运行的虚拟设备配置(参见 参考资料 的链接获取更多信息)。

Ubuntu JeOS 是针对在 VMware ESXi、VMware Server 或 Kernel-based Virtual Machine (KVM) Linux 管理程序上的运行而优化的 Ubuntu 版本。它不包含图形环境,在内存低于 380MB 的 Intel® 或 AMD x86 架构上运行。Ubuntu JeOS 还包含 ubuntu-vm-builder 实用程序,它用于根据用户定义的规范构建虚拟设备。

SUSE Linux 也提供一个 JeOS 环境,名为 SUSE Appliance Program。这个环境与 Ubuntu 的发布版类似,但也有一些明显的差别。这个 SUSE 版本使用 SUSE Linux 内核并根据您的特定需求提供几个虚拟设备构建工具。SUSE 提供 Kiwi,这是一个支持通过 XML 创建设备规范的基于命令行的工具。通过 Kiwi,您可以以各种格式构建虚拟设备,这些格式包括 LiveCD、可引导 USB 映像和 OVF。最后,SUSE Studio 提供一个易用的基于 Web 的设备创建工具,该工具提供点选式构造方法。

另外两个软件 — Oracle Enterprise Linux JeOS 和 OpenSolaris JeOS project— 提供类似的功能以构建小规模的虚拟设备。但一个最早的商业解决方案 —— 来自 rPath 的 rBuilder —— 可以用于构建在线虚拟设备。rBuilder 使用一个基于 Web 的前端,允许使用 rPath 的 Linux 发行版、CenOS 或 Ubuntu 构建公共虚拟设备。

最后,OVF Toolkit 是一组 Eclipse 插件和一个 Java™ API,可以用于构建 OVF 格式的虚拟设备包。参考资料 部分提供了一个链接,链接到一个介绍这个工具的用法的优秀教程。

虚拟设备和 OVF

虚拟设备只有具备可移植性才有用。获得一个虚拟设备并在 VMware 上运行(正如您在 Xen 或 KVM 上所做的那样)的能力意味着该设备有更多利用机会。这就是 OVF(以前称为 Open Virtual Machine Format)的作用所在。OVF 是一个针对 VM(这里为虚拟设备)的可移植的(意味着中立于管理程序)分发方法的规范。使用 OVF,您可以安全有效地打包并分发虚拟设备。OVF 甚至可以表示单个包中的多个 VM。OVF 是可扩展的,允许随着虚拟化的发展进行扩展。

OVF 是一种 XML 格式,描述一个 VM(磁盘格式)的所有特性,包括组成 VM 的磁盘,VM 的网络配置,VM 需要的处理器和内存资源,描述虚拟设备创建程序的各种元数据,VM 的目标以及操作系统描述。参考资料 部分提供了一份 VMware OVF 白皮书的链接,该白皮书包含一个 OVF 的完整示例。

另外,有一些工具可以将旧格式的 VM 转换为 OVF。例如,可以使用 ovftool 将旧格式的 .vmx VM 文件转换为 OVF。您还可以发现一些将 VMware 和 QEMU 转换为 VirtualBox 并将 VMware 转换为 Xen 和 Parallels 的工具。

虚拟设备的未来

虚拟设备是解决复杂应用程序部署问题的一种简单方法,具体方法是通过将预先配置的应用程序和一个(刚好够用的)操作系统合并为一个映像,以便在一个管理程序上运行。您可以找到几乎包括任何应用程序的虚拟设备 —— 从防火墙和安全设备再到服务器、备份设备和存储应用程序(包括复制和归档)。

虚拟设备不仅能为个人用户简化应用程序部署过程,还能支持下一代云计算架构。大多数云计算基础设施都提供便于部署的虚拟设备以满足任意需求,而不是花费大量时间构建一个专门化的应用程序发行版。由于虚拟设备只是带有一个包装器(XML 描述)的文件,因此复制和分发这样的设备都很简单。

OVF 规范是由几个公司共同开发的,这些公司同时涉足虚拟化和硬件开发领域,包括 IBM、Microsoft、Hewlett-Packard、Dell、VMware 和 XenSource。既然这些大公司都能在 OVF 这样的规范上达成共识,可以想见,虚拟设备肯定前景广阔。随着围绕虚拟设备的开发不断深入,虚拟设备必然会不断发展,诸如 OVF 之类的新规范肯定会发挥应有的作用。


相关主题

  • 虚拟 Linux”(developerWorks,2006 年 12 月)提供关于各种基于 Linux 的虚拟化计划的更多信息,这篇文章探讨了完整虚拟化、准虚拟化和操作系统虚拟化。
  • 术语 JeOSJust enough Operating System)由 VMware 的 Srinivas Krishnamurti 首先提出,JeOS 是指缩小为只包含目标应用程序需要的那些服务的操作系统。
  • Ubuntu Server Edition JeOS 是 Ubuntu 的 Linux 发行版的一个变体,专为虚拟设备设计。Ubuntu 还提供了一个不错的页面专门用于通过 JeOS 构建虚拟设备,包括操作系统准备和必要的应用程序的安装。
  • SUSE Appliance Program 是 Novell 针对 SUSE Linux 发行版的 JeOS 版本。
  • 来自 rPathrBuilder 是一个有趣的商业虚拟设备构建器,这个在线工具允许您使用 CentOS、Ubuntu 或 rPath 自己的 Linux 发行版构建虚拟设备。
  • 在 “使用 OVF Toolkit 构建虚拟工具”(developerWorks,2009 年 6 月)中,了解使用 OVF Toolkit 作为一个 Eclipse 插件来构建虚拟设备是多么简单。
  • VMware 的 使用 VMware Studio 2.0 Beta 开发的虚拟设备列表 包括广泛的虚拟设备示例,涉及安全、存储、管理、内容管理和协作。
  • 在 “Linux virtualization and device passthrough”(developerWorks,2009 年 10 月)中,了解关于设备模拟的更多信息。设备模拟是管理程序的重要部分,填补了 VM 中的虚拟设备和管理程序中的物理设备之间的缺口。
  • 在 “降低 Linux 内存开销”(developerWorks,2007 1 月)中,了解如何调整您的操作系统以获得更小的规模和更好的表现。尽管与虚拟设备工具相比涉及更多人为干预,但这种方法对构建 JeOS 提供更大的控制。
  • 这份 OVF 白皮书 详细介绍了 OVF 及其目的,它还包含一个用于展示虚拟设备的示例 OVF 文件。您可以找到支持使用 OVF 创建 VM 的各种工具 — 例如,来自 SourceForge 的 Open-OVF,不过它尚处于开发之中。
  • ovftool 允许您将某些格式的 VM 轻松迁移到 OVF 格式,或者将 VM 从 OVF 格式还原为其他格式。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux, Open source
ArticleID=445440
ArticleTitle=虚拟设备和 Open Virtualization Format
publish-date=11092009