引用原文: 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的方式。