libvirt框架分析

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值