hypervisor提供了与多个操作系统共享 CPU 的途径(CPU 虚拟化),但是为了提供完整的虚拟化,整个环境都必须针对这些 VM 进行虚拟化。机器 —或平台 — 仿真可以以几种方式实现,其中有一种流行的开源包可支持许多 hypervisor,被称作 QEMU。QEMU 是一个完全的仿真器和 hypervisor。但是 KVM 只将 QEMU 用于设备仿真,作为用户空间内的一个单独过程。QEMU 的一个有趣特性是因它提供了磁盘仿真(通过 QCOW 格式),QEMU 还提供了其他一些高级特性,比如快照和实时 VM 迁移。
自内核 2.6.25 后,KVM 使用 virtio 作为一种优化 I/O虚拟化性能的手段。为此,它将准虚拟化了的(paravirtualized)驱动程序引入到hypervisor,进而将性能提高到了接近原生的级别。虽然这只有在操作系统可针对此目的修改时才有效,但是它还是可以用在 Linuxhypervisor 场景中的 Linux guest 内。
如今,virtio 和 QEMU 可协同工作以便在用户空间内的 Linux guest 和 QEMU 仿真器之间优化仿真设备事务。
由于 VM 合并到了物理服务器上,因此对平台的联网需求十分迫切。但我们不需要把所有 VM 的联网都强加到这个平台的物理层上,本地通信可自行被虚拟化。为了优化 VM 间的网络通信,引入了虚拟交换。vSwitch 和物理交换一样,只是被虚拟化进了这个平台。在这个图中,与 VM 相连的虚拟接口(VIF)通过虚拟交换与物理接口(PIF)进行通信。
开源也可以解决这个问题,借助的是一个很有趣的解决方案,称为 Open vSwitch。除了为虚拟环境提供虚拟交换外,vSwitch 还能集成物理平台及提供企业级特性,比如虚拟本地局域网络(VLAN)、基于优先级 Quality of Service(QoS)、中继和对硬件加速的支持(比如单根 I/O 虚拟化 [IOV] 网络适配器)。Open vSwitch 现在可用的是 2.6.15内核,并支持一系列基于 Linux 的虚拟化解决方案(Xen、KVM、VirtualBox)和管理标准(Remote SwitchedPort Analyzer [RSPAN]、NetFlow 等)。
由于 VM 是操作系统、根文件系统和配置的聚合,因此空间已经很成熟,完全适于工具开发。但是为了充分发挥 VM 和工具的潜力,必须有一种方式来组合它们。目前的这种方式称为 Open Virtualization Format(OVF),它是一种 VM 结构,灵活、高效且可移植。OVF 在一个 XML 包装程序内包含了一个虚拟磁盘映像,这个包装程序定义了该 VM的配置,包括网络配置、处理器和内存要求以及多种可扩展的元数据来进一步定义此映像和其平台要求。OVF 提供的关键功能是可移植性,可以以一种hypervisor 不可知的方式分发 VM。
目前,有很多实用工具可用来管理 VM 映像(VMI)以及将这些映像转变为其他格式,或从其他格式转变回来。VMware 的 ovftool
就是这样一种很有用的工具,可用于 VMI 转化(比如,从 VMware Virtual Disk Development Kit [VMDK]格式转变为 OVF)。对于 VMI,这些工具显得非常有用,但是如果有一个物理服务器,要将它转变为VMI,该如何做呢?对此,您可以使用一个很有用的工具,称为 Clonezilla。虽然该工具最早是作为灾难恢复的磁盘克隆工具开发的,但它可以被用来将一个物理服务器实例转化成一个 VM,以便于部署在一个虚拟基础设施内。随着 OVF格式的大量采用,有很多其他的转换和管理工具或者已经存在(比如构建于 libvirt 之上的实用工具)或正在开发之中。
本文从两个角度探索了管理。本节讨论平台管理;稍后的一个章节会谈及较高级别的基础设施管理。
RedHat 引入了 libvirt 库作为管理平台虚拟化(hypervisor 和 VM)的一个 API。libvirt的一个吸引人之处是它支持多种 hypervisor 解决方案(KVM 和 Xen 就是其中两个)并提供对多种语言(比如 C、Python 和Ruby)的 API 绑定。它提供的是管理的 “最后阶段”,直接与平台 hypervisor 交互并将 API扩展到更大的基础架构管理解决方案。借助 libvirt,启动和停止 VM 非常简单,而且它还为更先进的操作(比如在平台间迁移 VM)提供了API。使用 libvirt 还能使用它的 shell(构建于 libvirt 之上),称为 virsh
。
KVM 针对运行在 x86 硬件硬件上的、驻留在内核中的虚拟化基础结构。KVM 是第一个成为原生 Linux 内核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。
这个 hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC® 和 IA64 的通道。另外,KVM 最近还添加了对对称多处理(SMP)主机(和来宾)的支持,并且支持企业级特性,比如活动迁移(允许来宾操作系统在物理服务器之间迁移)。
KVM是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor。KVM 为支持 hypervisor指令的硬件平台提供完整的虚拟化(比如 Intel® Virtualization Technology [Intel VT] 或 AMDVirtualization [AMD-V] 产品)。KVM 还支持准虚拟化来宾操作系统,包括 Linux 和 Windows®。
这种技术由两个组件实现。第一个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以管理虚拟化硬件,并通过 /proc文件系统公开其功能。第二个组件用于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU作为用户空间进程执行,并且在来宾操作系统请求方面与内核协调。