![云计算那些事儿:从IaaS到PaaS进阶](https://wfqqreader-1252317822.image.myqcloud.com/cover/115/30638115/b_30638115.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.4 Libvirt
底层虚拟化的接口通常比较难用,并且各种虚拟化接口调用方式和参数也各不相同,那么有没有一种统一的适配层工具去解决这些底层复杂接口的调用,提供便于开发和集成的接口呢?Libvirt便应运而生了,Libvirt是一套用于管理硬件虚拟化的开源API、守护进程与管理工具。它可以用于管理KVM、Xen、VMware ESXi、QEMU等虚拟化,并对外暴露Libvirt API,Libvirt示意图如图3-12所示。
![](https://epubservercos.yuewen.com/1BC010/16699149904933706/epubprivate/OEBPS/Images/37746_55_2.jpg?sign=1738843552-va2Cmfo73n2kKxwLhxiO430vU9xt6hJq-0-b47ac3441d5022abf1266c51c93bb2bd)
图3-12 Libvirt示意图
![](https://epubservercos.yuewen.com/1BC010/16699149904933706/epubprivate/OEBPS/Images/37746_61_4.jpg?sign=1738843552-gExaJDN9LSSRAKXCDaClqH3I6nlh9nMO-0-ea6618e9b6944e4164c65246c24820aa)
图3-12 单击创建按钮界面
Libvirt管理的核心是Libvirtd守护进程,Libvirtd主要包括虚拟机、存储、网络、监控等模块。其中,Domain负责虚拟机管理,Storage负责存储卷管理,Network是网络管理,Inferface是网络接口管理,Secret是秘钥管理,Snapshot是快照管理。
为了方便调用,Libvirt API通常被包装成多种编程语言的SDK,常用的包括Libvirt-python、Libvirt-go及Libvirt-Java等。其中,OpenStack就是使用了Libvirt-python库操作底层虚拟化。Libvirt不仅可以控制本地的虚拟化软件,还可以控制远程的虚拟化软件,从而可以达到通过一个Libvirt控制很多主机上面虚拟化软件的目的。下面展示了一个Python Libvirt SDK的样例,通过接口获取当前主机上面所有虚拟机的状态。
![](https://epubservercos.yuewen.com/1BC010/16699149904933706/epubprivate/OEBPS/Images/37746_56_1.jpg?sign=1738843552-gyUE0SBwZqkQgtUZQg86x7bpLnl6WmVP-0-08f5ddd6423810c02ac44e42cfae1e12)
首先,通过open方法建立和QUME的连接;然后,通过listDomainsID接口获取所有虚拟机的ID列表。lookupByID负责查看通过ID查询虚拟机的详情。