您的位置:首页 > 其它

libvirt框架分析

2015-07-10 20:53 309 查看


libvirt框架分析

libvirt



Author:Wang Yi
up2wing#gmail.com


libvirt revision: 1.2.14


术语概念



node:一个物理机器称为一个node

hypervisor:一个软件层抽象,其作用是虚拟化一个node,运行一系列不同配置的虚拟机

domain:运行于虚拟机上的OS实例。





常用对象
libvirt的目标是提供一个通用层,以 安全地管理node上的domain,因此libvirt的API暴露了所有 管理主流操作系统 需要的资源。
第一个通过API操作的对象是virConnectPtr,它表示与hypervisor的连接。应用程序获取与hypervisor的连接virConntectPtr后,就可以管理该hypervisor上的domain及相关虚拟化资源,如存储、网络等。任何使用libvirt的程序(openstack、virsh等)开始都要调用virConnectOpen系列函数,来得到virConnectPtr,你会发现这些函数都传入一个char*
name表示 connection URI ,用来选择打开哪个hypervisor。 因为libvirt支持多种类型的虚拟化(通常被称为“drivers”或“hypervisor”),因此需要指定要用的是哪个driver,通过网络连接远程机器上的driver时也是如此。
例如:在一个Linux node上,可能同时使用KVM和LinuxContainer。name为NULL时默认为上次选择的hypervisor,但多数情况下这样并不明智。
connection URI 页面有关于连接URI的详细描述。常用的有:
qemu:///... QEMU and KVM URIs
支持qemu所用的URIs。有两种类型:

qemu:///system:连接到system模式

qemu:///session:连接到session模式

Remote URIs
remote URIs由本地URIs和主机名组成。比如,迁移时就需要连接远程的URI:qemu+tcp://192.168.1.100/system,其中的192.168.1.100就是迁移命令行中指定的目的主机的ip。
test:///... Test URIs
test driver是出于测试目的的一个虚拟hypervisor。


The Libvirt Drivers

driver是libvirt处理具体的hypervisor driver请求的基本单元。每个driver都有一个注册API,加载libvirt API调用的函数引用。下面是一个简单的hypervisor driver机制图。






Daemon和远程控制

访问libvirt driver主要由libvirt守护进程通过RPC remote driver处理。某些hypervisor支持client-side连接和回应,例如Test、OpenVZ、VMware、Xen、Parallels等。

libvirt 客户程序使用URI来获取virConnectPtr,virConnectPtr跟踪driver连接及其它各种连接,然后被用于其它虚拟化函数的入参。取决于所用的dirver,调用会通过remote driver“漫游”到libvirtd 守护进程。守护进程引用特定的连接driver,以获取所需的信息,(处理过后)然后通过连接将执行结果或数据返回客户程序。客户程序再处理返回数据,如显示、写日志等。Migrate就是使用了这中架构的一个例子。






reference

1、http://libvirt.org/api.html



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: