引用原文: https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/80142155
libvirt是目前使用最为广泛的针对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地和远程的virsh(命令行工具)调用,Libvirtd通过调用qemu-kvm操作管理虚拟机。libvirt 由应用程序编程接口 (API) 库、一个守护进程 (libvirtd),和默认命令行实用工具 (virsh)等部分组成。
libvirt第一个版本问世于2005年12月19日,其创始人是Daniel Veillard,libvirt项目虽然是开源的,但是也有它的copyright。目前libvirt项目copyright是Redhat的。目前大部分libvirt社区的维护者也是redhat主导。维护者列表大家可以看源码目录下的AUTHORS.in文件。其中Redhat占了16席,Suse和富士通各占2席。其中创始人Daniel Veillard目前基本不负责合代码,只负责出版本(锁库、打tag、偶尔自己跑一下测试用例、发版本release notes、解库)。注意libvirt社区maintainer中有两个Daniel,一个就是创始人Veillard,另外一个是Daniel P.Berrange。创始人相当于帮主,另外一个Daniel P也是个大牛,在社区的地位相当于副帮主,其他的maintainer都很听从他的建议。除了在libvirt社区邮件进行交流外,libvirt还在IRC上开放了在线交流频道。IRC是国际上一个知名度很高的类似于简单的聊天室功能的一个交流平台,很多开源组织和其他组织都会在上面开通自己的频道。
那么,libvirt支持什么? 一张图了解libvirt支持的Hypervisor和哪些管理工具支持libvirt。
对上层libvirt是个C语言库,但同时它也提供了其他编程语言的封装,这些语言使用libvirt封装好的libvirtmod。2014年以前的libvirt代码中,包含python接口,在2014年某个版本以后,将python单独提出去了,不再和libvirt代码使用同一个git库,独立成为libvirt-python的Git库。Libvirt目前也已经对Ruby、Java语言,Perl和 OCaml实施了绑定,支持最流行的系统编程语言(C和C++)、多种脚本语言。
它对下层libvirt也支持多种Hypervisor,几乎囊括了目前世界上所有主流/大公司的虚拟化Hyperviosr,主要包括的Hyperviosr如下:
LXC :Lightweight Linux Container System【Linux最早的容器技术,也是Docker实现容器早期底层调用库,目前已被完全替换为自有底层实现】
OpenVZ:OpenVZ是开源容器虚拟化软件,它是基于Linux平台的操作系统级实现服务器虚拟化解决方案
KVM: Kernel-based Virtual Machine/QEMU
Xen: Bare-Metal hypervisor
User-mode: Linux(UML) Paravirtualized kernel
VirtualBox
VMware ESX and GSX
VMware Workstation Player
Hyper-V: Windows 2008后实现的Hypervisors
PowerVM: IBM for AIX,Linux
Parallels Workstation :Apple Mac by Parallels IP Holdings GmbH
Bhyve: hypervisor for FreeBSD 9+
Libvirt的架构
没有使用libvirt架构如下左图,为支持各种Hypervisor的可扩展性,libvirt实施一种基于驱动程序的架构,该架构允许一种通用的API以通用方式为不同的Hyperviosr供服务。右图展示了libvirt API与相关驱动程序的层次结构(Hypervisor和Domain在同一个节点)。
Hypervisor和Domain位于不同节点上时,管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd,通过运行于远程节点的libvirtd的特殊守护进程来实现管理。libvirtd提供从远程应用程序访问本地Domain的方式。