libvirt内部原理

1. 什么是libvirt,它的功能有哪些?
Libvirt 是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。这
些软件包括一个API 库、一个daemon(libvirtd)和一个命令行工具(virsh)。
The goal of libvirt: to provide a common and stable layer sufficient to
securely manage domains on a node, possibly remote
主要功能:
a) 虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢
复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。
b) 存储管理:pool(local, netfs, iscsi, lvm 等)和volume(qcow2、vmdk、raw 等)
c) 网络管理:管理物理和逻辑的网络接口。
d) 虚拟NAT 和基于路由的网络:任何运行了libvirt daemon 的主机都可以用来管理
和创建虚拟网络。
e) state monitoring APIs needed to implement management policies
2. 体系结构
3. 内部原理
a) Daemon(Libvirtd)的功能
i. 远程代理
ii. 本地环境初始化
iii. 根据环境注册各种Driver(qemu, xen, storage…)的实现。
Driver 有统一的接口,各Driver 就是实现这些接口, 内部再调用command,
qemu 接口, xen 接口等等
b) Virsh
它是libvirt 的客户,提供命令行。
运行的步骤:
i. 初始化创建conn
实际上是根据connection 参数选择具体的Driver
ii. 解析参数,根据函数列表调用具体的函数。比如:
cmdCreate
cmdPoolCreate
… …
iii. 最终调用API 来完成:
virDomainCreateXML
virStoragePoolCreateXML
… …
c) API
函数和数据结构声明: /usr/include/libvirt/libvirt.h
函数实现: ./src/libvirt.c
API 的实际动作最终调用各Driver 的实现
virDomainCreateXML()
|-- conn->driver->domainCreate()
virStoragePoolCreateXML
|--conn->storageDriver->poolCreate()
… …
d) Python 绑定
i. Python 代码import “/usr/lib64/python2.6/site-packages/libvirt.py”
ii. 调用python 接口
iii. 实际调用的/usr/lib64/python2.6/site-packages/libvirtmod.so 里的函数
iv. libvirtmod.so 最后还是调用API
e) Driver 实现(Driver 和Impl 的关系,以qemu 和Storage 为例)
./src/qemu/Qemu_driver.c 里申明了Driver 接口:
static virDriver qemuDriver = {
.no = VIR_DRV_QEMU,
.name = "QEMU",
.domainCreate = qemuDomainStart,
… ...}
qemudDomainCreate
|-- qemuProcessStart
| |-- cmd = qemuBuildCommandLine()
| |-- virCommandRun(cmd)
经过一通判断和计算,最后还是调用”qemu-kvm”命令
./ src/storage/Storage_driver.c 里申明了Storage Driver 接口:
static virStorageDriver storageDriver = {
.name = "storage",
.poolCreate = storagePoolStart,
… ...}
storagePoolStart
|-- backend = virStorageBackendForType()
|-- backend->startPool() == virStorageBackendISCSIStartPool()
| |-- virStorageBackendISCSIScanTargets()
| |-- virStorageBackendISCSIConnection()
| | |-- cmd = virCommandNewArgs(“iscsiadm …”)
| | |-- virCommandRun(cmd)
经过一通判断和计算,最后还是调用”iscsiadm”命令
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值