oVirt(open Virtualization) 是一个基于 KVM(Kernel-based Virtual ">Machine) 的开源 IaaS(Infrastructure as a Service) 项目,其前身是 Redhat 的桌面虚拟化商业产品。存储器的管理是 oVirt 的重点,本文将介绍 oVirt 是如何组织与分配各种存储器的,用户应该如何使用它。
oVirt 的 Node/Engine 结构
oVirt 是一个基于 x86 架构上的 KVM 虚拟化技术的开源 IaaS 云服务解决方案。在架构设计上它使用了 Node/Engine 分离结构,以方便功能的划分与管理。
图 1.oVirt 逻辑结构图
图 1 从总体框架上说明了 oVirt 的工作流程。对外,oVirt 中的 Engine 通过 HTTP 协议向外提供 HTTP API,同时提供内建的网页服务供用户和系统管理员使用。系统管理员通过网页可以创建、修改虚拟机及相关设备或用户权限,用户在拥有权限的情况下可以操作自己的虚拟机,并通过 VNC 或 SSH 登陆自己的虚拟机。Engine 在整个系统中充当管理者的角色并对外提供管理服务,它挂载了自己的数据库记录整个系统中所有的虚拟机配置,各个节点的自身状态,系统的网络状态,存储器状态。管理的逻辑,状态及策略全部在 Engine 中设置与实现。Node 只负责功能上的实现,不进行任何状态的记录和任何策略的实现。Engine 与 Node 之间的关系十分像 Linux 中驱动程序与应用程序的功能分割关系:驱动仅仅负责功能的实现,如设备的读、写、开启与关闭,如何使用这些功能留给应用层。同样 Node 仅仅负责实现虚拟机器与设备的创建与修改,资源的共享与保护,如何使用这些功能交给 Engine 处理。Node 暴露两种基于网络的 API 与 Engine 交互,XMLRPC 与 REST。Engine 通过这些接口控制各个 Node 上功能的启动。当然用户也可以调用这些 API 进行第三方程序的开发。
oVirt 里的 Node 可以由一个普通的 Linux 上安装 VDSM(Virtual Desktop Server Manager) 构成,也可以由一个专为 oVirt 定制的 Linux 系统构成。在定制的情况下,Node 上的许多文件系统都是 ramdisk( 基于内存的 Linux 磁盘设备 ),系统重启后其中的内容消失,从而保证了 Node 的无状态性。Engine/Node 的设计不仅方便将来的开发,更简化了用户的安装使用,在定制的情况下 Node 可以快速大量部署。本文主要以定制 Node 为例说明 VDSM 的相关功能。