libvirt详解
**提要:**虛擬云實現的三部曲:虛擬化技術實現–>虛擬機管理–>集群資源管理(云管理)。
libvirt是目前使用最為廣泛的對KVM虛擬機進行管理的工具和API。Libvirtd是一個daemon進程,可以被本地的virsh調用,也可以被遠程的virsh調用,Libvirtd調用qemu-kvm操作虛擬機。
why&&what
實現一朵可運行、可運維的云,需要完整的實現三層:VIM層、VNFM層、NFVO層,其中實現對VNF的生命周期管理是VNFM層要實現核心功能。但要做到對VNF的控制管理談何容易,VIM層中提供的hypervisor技術多種多樣,包括kvm,vmware,xen等等,每種技術提供的驅動和API又都不盡相同。即使能夠做到單種技術的控制管理,還要實現不同hypervisor下VNF的遷移,困難可想而知。
而Libvirt正是為解決上述問題而生,通過在VIM層和VNFM層提供一個虛擬抽象層,提供統一API供上層調用,下層統一封裝不同虛擬機,從而方便地實現對虛擬機的管理。
Libvirt是管理虛擬機、存儲、網絡的一系列軟件集合。它包括了一個API庫、一個daemon程序(libvirtd)和一個命令行工具(virsh).主要目標是為各種虛擬化工具提供一套統一可靠的API,讓上層可以用一種單一的方式來管理多種不同的虛擬化技術。
1、什么是libvirt
Libvirt是管理虛擬機和其他虛擬化功能,比如存儲管理,網絡管理的軟件集合。位于虛擬機和云管理中間的一個抽象管理層。它包括一個API庫,一個守護程序(libvirtd)和一個命令行工具(virsh);libvirt本身構建于一種抽象的概念之上。它為受支持的虛擬機監控程序實現的常用功能提供通用的API。
libvirt的主要目標是為各種虛擬化工具提供一套方便、可靠的編程接口,用一種單一的方式管理多種不同的虛擬化提供方式。
libvirt 的基本操作和大概結構
-
libvirt 組件有一個 shell,被稱為 virsh,提供類似 shell 的界面,可以輸入 start、shutdown
等命令操作虛擬機 -
libvirt 有一個守護進程,libvirtd,其對 virsh 的命令做出響應
- 以 non-root 執行 virsh start 時,將以 qemu://session 的方式運行。libvirtd 將啟動一個 non-root 的子進程來與 virsh 進行 socket 通信
- 以 root 執行 virsh start 時,將以 qemu://system 方式運行,libvirtd 直接與 virsh 進行 socket 通信
無論是上述哪種方式,都會創建多個(一般16個)線程,該線程的的作用是將 socket 傳遞過來的各個命令和配置進行解析,最終形成一個 cmd。
子線程會將 cmd 通過 pipe 傳遞給 libvirtd,libvirtd 會 fork 出一個子進程,并 exec cmd
來自https://blog.csdn.net/sdulibh/article/details/90257557
libvirt 啟動 qemu 的流程圖
2、主要支持的功能
虛擬機管理:包括不同的領域生命周期操作,比如:啟動、停止、暫停、保存、恢復和遷移。支持多種設備類型的熱插拔操作,包括:磁盤、網卡、內存和CPU。
遠程機器支持:只要機器上運行了libvirt daemon,包括遠程機器,所有的libvirt功能就都可以訪問和使用。支持多種網絡遠程傳輸,使用最簡單的SSH,不需要額外配置工作。
存儲管理:任何運行了libvirt daemon的主機都可以用來管理不同類型的存儲:創建不同格式的文件鏡像(qcow2、vmdk、raw等)、掛接NFS共享、列出現有的LVM卷組、創建新的LVM卷組和邏輯卷、對未處理過的磁盤設備分區、掛接iSCSI共享,等等等等。因為libvirt可以遠程工作,所有這些都可以通過遠程主機使用。
網絡接口管理:任何運行了libvirt daemon的主機都可以用來管理物理和邏輯的網絡接口。
虛擬NAT和基于路由的網絡:任何運行了libvirt daemon的主機都可以用來管理和創建虛擬網絡。
3、支持的虛擬機
4、體系結構
沒有使用libvirt的虛擬機管理方式如下圖所示:
為支持各種虛擬機監控程序的可擴展性,libvirt實施一種基于驅動程序的架構,該架構允許一種通用的API以通用方式為大量潛在的虛擬機監控程序提供服務。下圖展示了libvirt API與相關驅動程序的層次結構。這里也需要注意,libvirtd提供從遠程應用程序訪問本地域的方式。
libvirt的控制方式有兩種:
1)管理應用程序和域位于同一節點上。管理應用程序通過libvirt工作,以控制本地域。
2)管理應用程序和域位于不同節點上。該模式使用一種運行于遠程節點上、名為libvirtd的特殊守護進程。當在新節點上安裝libvirt時該程序會自動啟動,且可自動確定本地虛擬機監控程序并為其安裝驅動程序。該管理應用程序通過一種通用協議從本地libvirt連接到遠程libvirtd。
6、相關工具
virsh(虛擬 shell)的應用程序,基于命令行的管理工具,可以實現簡單的資源管理。它構建于libvirt之上,允許以交互方式使用多個libvirt功能。
virsh list 列出給定主機上的活動域域id和狀態 查看在運行的虛擬機 /domain?
virsh list --all 查看創建的所有虛擬機
virsh start domain_name 啟動名稱為domain_name的虛擬機
virsh suspend domain_name 掛起虛擬機
virsh resume domain_name 恢復被掛起的虛擬機
virsh autostart domain_name 開機啟動虛擬機,及在虛擬服務libvirt啟動時啟動虛擬機
virsh auto start --disable domain_name 關閉開機啟動虛擬機
virsh shutdown domain_name 關閉虛擬機(需要ACPID服務的支持,ACPI是Advanced Configuration and PowerInterface縮寫,高級配置和電源管理接口)
virsh reboot domain_name 重啟持久虛擬機
virsh reset domain_name 強制重啟虛擬機
virsh destroy domain_name 強制關閉虛擬機,這種方式是從virsh list列表中將虛擬機刪
除,仍然可以start起來
virsh net-start default 啟動默認的網絡
virsh net-autostart default 自啟動默認網絡
徹底刪除虛擬機步驟
1)關閉虛擬機:virsh destroy domain_name
2)刪除定義:virsh undefine domain_name
3)刪除虛擬機文件(在/var/lib/libvirtd/下的相關文件)
創建虛擬機步驟:
需要提前準備好xml配置文件(本地沒有就去網上抄一個,修改對應參數)
virsh dumpxml domain_name > /home/ 轉儲虛擬機的設置項
virsh define *.xml 從xml定義一個虛擬機
virsh start domain_name
附上libvirt 官方xml鏈接
https://libvirt.org/formatdomain.html
總結
- 上一篇: Tomcat之Directory Lis
- 下一篇: 点击选择-图片添加对号(单选)