关闭

libvirt框架分析

429人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38397次
    • 积分:621
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:9篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论