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”命令
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐