Libvirt--云计算的无名英雄(2013)

2020-09-04 14:38:29

最初我的目的是写一篇关于开源云管理平台(CMP)的文章,但在做研究时发现有一个软件库是如此基础,以至于它掌握着我们今天所知的云计算服务和平台(包括Amazon AWS、OpenStack和CloudStack)存在的关键。所以我决定推迟我的想法,开始写一篇关于这位云计算的默默无闻的英雄的文章,叫做libvirt[1],我相信很多人都没有听说过这个名字。显然,谈论软件库往往是技术性的,因此本文将带有技术基调,但我将尝试使其对云计算感兴趣的每个人都具有可读性。

Libvirt是用于管理平台虚拟化的开源API、守护进程和管理工具,这些API广泛应用于云管理平台的编排层。Libvirt使得通过通用的可编程接口控制和管理数百万个计算节点、存储和网络设备成为可能。这就像能够从一辆汽车通过一个通用界面控制和协调数百万辆汽车,而不考虑不同的制造商、型号或发动机(可以是多辆汽车,以实现冗余和高可用性)。最初是Xen的管理API,现在已经扩展到支持云计算平台的主要组件。

虚拟机管理程序是一层软件,允许虚拟化一组物理机中的节点,其配置可能与节点本身不同。

域是运行在虚拟机管理程序提供的虚拟机上的操作系统(或容器虚拟化情况下的子系统,如OpenVZ和LXC)的实例。

基于上述术语,“libvirt的目标是提供一个公共且稳定的层,足以安全地管理节点上的域,可能是远程的”。因此,libvirt应该提供执行管理所需的所有API,例如:调配、创建、修改、监视、控制、迁移和停止域-在虚拟机管理程序对这些操作的支持范围内。这意味着下列子目标:

虽然大多数API在虚拟机管理程序或主机操作系统方面是通用的,但只要从域管理角度看操作的语义清晰,某些API就可能针对单个虚拟化环境。

API应允许高效、干净地执行管理节点上的域所需的所有操作,包括资源调配和设置。

API不会尝试提供高级虚拟化策略或多节点管理功能(如负载平衡),但是API应该足够了,这样它们就可以在libvirt之上实现

表示一个通常用作其中一个域可用的块设备的存储卷。函数virStorageVolLookupByPath根据存储卷对象在节点上的路径查找存储卷对象。

表示存储池,它是用于分配和存储存储卷的逻辑区域。函数virConnectListAllStoragePools列出虚拟机管理程序上的所有虚拟化存储池。函数virStoragePoolLookupByVolume查找包含给定存储卷的存储池。

这些名称遵循C语言约定,但是云计算平台和应用程序的开发人员不需要直接使用C,主要语言都有可用的语言绑定。目前,libvirt API语言绑定[4]可用于C#、Java、OCaml、Perl、PHP、Python和Ruby。

由一个非常大的开发团队维护的成熟的成熟代码库,每年都在增加承诺。

Libvirt是一个非常重要的图书馆,它的巨型云计算服务和平台,如Amazon AWS,Google Compute Engine,OpenStack,CloudStack,Eucalyptus和许多其他的图书馆都屹立在它的肩膀上。此外,此API使开发人员和公司能够构建新的、创新的云计算服务或平台,并在其基础上构建令人惊叹的应用程序或服务。Libvirt始于2005年,随着云计算的日益普及,该项目将继续增长。但在大多数与云计算相关的会议、演讲和论文中,我没有找到太多关于libvirt的报道,所以在研究云管理平台的同时,我想到要写一些关于它的文章。向所有libvirt代码贡献者致敬,他们构建了漂亮的抽象层,并使云计算服务和平台开发人员的生活变得更轻松。尽管没有得到像OpenStack、CloudStack或Eucalyptus这样的主流云计算平台那样多的新闻和报道,但项目、社区和代码提交的增长令人振奋。