![云计算那些事儿:从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=1738851589-ZMt410v9tEcnu756qbBkM9v574H5OQqu-0-342b0edaa4d4220f6089c07dbf9c46ac)
图3-12 Libvirt示意图
![](https://epubservercos.yuewen.com/1BC010/16699149904933706/epubprivate/OEBPS/Images/37746_61_4.jpg?sign=1738851589-jME8rpAL7K6yGAbheAG4zPQlsdj6jrm1-0-998b3df3ae3103a892c592df5c25cfd8)
图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=1738851589-jBAokK21tTMOKJrLPRO9vtFnP2X8on84-0-f73eda4e9ec3578affdd7ab7b4144ee7)
首先,通过open方法建立和QUME的连接;然后,通过listDomainsID接口获取所有虚拟机的ID列表。lookupByID负责查看通过ID查询虚拟机的详情。