




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
KVM虛擬機(jī)管理應(yīng)用實(shí)踐7libvirt基于libvirt的配置與開(kāi)發(fā)Virt-managerMarvelSky第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.1libvirt7.1.1libvirt簡(jiǎn)介提到KVM的管理工具,就不得不介紹大名鼎鼎的libvirt。libvirt是為了更方便地管理平臺(tái)虛擬化技術(shù)而設(shè)計(jì)的開(kāi)放源代碼的應(yīng)用程序接口。libvirt包含一個(gè)守護(hù)進(jìn)程和一個(gè)管理工具,不僅能提供對(duì)虛擬化客戶(hù)機(jī)的管理,也提供了對(duì)虛擬化網(wǎng)絡(luò)和存儲(chǔ)的管理。可以說(shuō),libvirt是一個(gè)軟件集合,便于使用者管理虛擬機(jī)和使用其他虛擬化功能,比如存儲(chǔ)和網(wǎng)絡(luò)接口管理等等。libvirt可以支持多種不同的Hypervisor,針對(duì)不同的Hypervisor,libvirt提供了不同的驅(qū)動(dòng),有對(duì)Xen的驅(qū)動(dòng),有對(duì)QEMU的驅(qū)動(dòng),有對(duì)VMware的驅(qū)動(dòng)。libvirt屏蔽了底層各種Hypervisor的細(xì)節(jié),對(duì)上層管理工具提供了一個(gè)統(tǒng)一的、穩(wěn)定的API。因此,通過(guò)libvirt這個(gè)中間適配層,用戶(hù)空間的管理工具可以管理多種不同的Hypervisor及其上運(yùn)行的虛擬客戶(hù)機(jī)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐在libvirt中有幾個(gè)重要的概念,一個(gè)是節(jié)點(diǎn),一個(gè)是Hypervisor,一個(gè)是域。各概念解釋如下:(1)節(jié)點(diǎn)(Node):通常指一個(gè)物理機(jī)器,在這個(gè)物理機(jī)器上通常運(yùn)行著多個(gè)虛擬客戶(hù)機(jī)。Hypervisor和域都運(yùn)行在節(jié)點(diǎn)之上。(2)Hypervisor:通常指VMM,例如KVM、Xen、VMware、Hyper-V等。Hypervisor可以控制一個(gè)節(jié)點(diǎn),讓其能夠運(yùn)行多個(gè)虛擬機(jī)。(3)域(Domain):指在Hypervisor上運(yùn)行的一個(gè)虛擬機(jī)操作系統(tǒng)實(shí)例。域在不同的虛擬化技術(shù)中可能名字不同。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐libvirt的主要功能如下:(1)虛擬機(jī)管理。包括對(duì)節(jié)點(diǎn)上的各虛擬機(jī)的生命周期的管理,比如啟動(dòng)、停止、暫停、保存、恢復(fù)和遷移;也包括支持對(duì)多種設(shè)備類(lèi)型的熱插拔操作,例如磁盤(pán)、網(wǎng)卡、內(nèi)存和CPU等。2)遠(yuǎn)程節(jié)點(diǎn)的管理。只要物理節(jié)點(diǎn)上運(yùn)行了libvirtdaemon,那么,遠(yuǎn)程節(jié)點(diǎn)上的管理程序就可以連接到該節(jié)點(diǎn),然后進(jìn)行管理操作,所有的libvirt功能就都可以訪(fǎng)問(wèn)和使用;libvirt支持多種網(wǎng)絡(luò)遠(yuǎn)程傳輸,例如使用最簡(jiǎn)單的SSH時(shí)不需要額外配置工作。若節(jié)點(diǎn)上運(yùn)行了libvirt,而且允許SSH訪(fǎng)問(wèn)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐(3)存儲(chǔ)管理:任何運(yùn)行了libvirtdaemon的主機(jī),都可以通過(guò)libvirt管理不同類(lèi)型的存儲(chǔ),包括創(chuàng)建不同格式的文件映像(qcow2、vmdk、raw等),掛接NFS共享,列出現(xiàn)有的LVM卷組,創(chuàng)建新的LVM卷組和邏輯卷,對(duì)未處理過(guò)的磁盤(pán)設(shè)備分區(qū),掛接iSCSI共享,等等。(4)網(wǎng)絡(luò)接口管理:任何運(yùn)行了libvirtdaemon的主機(jī),都可以通過(guò)libvirt管理物理和邏輯的網(wǎng)絡(luò)接口。(5)虛擬NAT和基于路由的網(wǎng)絡(luò):任何運(yùn)行了libvirtdaemon的主機(jī)都可以通過(guò)libvirt管理和創(chuàng)建虛擬網(wǎng)絡(luò)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-2libvirt架構(gòu)參照?qǐng)D7-2給出通過(guò)virsh命令或接口創(chuàng)建虛擬機(jī)實(shí)例的執(zhí)行步驟如下:(1)在接口層,virsh命令或API接口創(chuàng)建虛擬機(jī)。(2)在抽象驅(qū)動(dòng)層,調(diào)用libvirt提供的統(tǒng)一接口。(3)在具體驅(qū)動(dòng)層,調(diào)用底層的相應(yīng)虛擬化技術(shù)的接口,如果driver=qemu,那么此處調(diào)用的qemu注冊(cè)到抽象驅(qū)動(dòng)層上的函數(shù)為qemuDomainCreateXML()。(4)最后,拼裝shell命令并執(zhí)行。以QEMU為例,函數(shù)qemuDomainCreateXML()首先會(huì)拼裝一條創(chuàng)建虛擬機(jī)的命令,比如“qemu-hdadisk.img”,然后創(chuàng)建一個(gè)新的線(xiàn)程來(lái)執(zhí)行。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.1.2libvirt的編譯和安裝可以通過(guò)多種方式安裝libvirt。普通用戶(hù)如果只是使用libvirt,可以直接通過(guò)apt-get安裝,以apt-get的方式安裝libvirt時(shí),只需執(zhí)行“apt-getinstalllibvirt-dev”命令即可。如果作為開(kāi)發(fā)者,想要對(duì)libvirt多一些深入的了解,可以從libvirt的源碼進(jìn)行安裝。本書(shū)以源碼安裝方式為例,其他方式不再贅述。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-3libvirt官網(wǎng)
第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐1、下載libvirt源代碼圖7-4libvirt下載頁(yè)面
第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐2、配置libvirt
配置libvirt時(shí),需運(yùn)行l(wèi)ibvirt安裝目錄下的configure腳本文件。在配置過(guò)程中,經(jīng)常會(huì)因?yàn)槿鄙倬幾g所需的包而導(dǎo)致配置失敗。在配置失敗時(shí),按照錯(cuò)誤提示安裝相應(yīng)的軟件包即可,在相應(yīng)的軟件包安裝完成后繼續(xù)執(zhí)行“./configure”命令進(jìn)行配置,直到配置成功。有時(shí),安裝相應(yīng)的軟件包時(shí),又會(huì)因?yàn)槿鄙倨渌陌疱e(cuò)誤,那么就需關(guān)聯(lián)尋找所需的包依次進(jìn)行安裝。在默認(rèn)情況下,libvirt會(huì)配置QEMU的驅(qū)動(dòng)支持,也會(huì)配置libvirtd和virsh,還會(huì)配置libvirt對(duì)Python的綁定。配置完成后就可以進(jìn)行l(wèi)ibvirt的編譯和安裝了。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐3、編譯libvirt配置./configure成功后,在libvirt安裝目錄下執(zhí)行“make”命令編譯。命令操作如下:root@kvm-host:~/xjy/libvirt/libvirt-1.2.0#makemakeall-recursivemake[1]:Enteringdirectory`/root/xjy/libvirt/libvirt-1.2.0'Makingallin.make[2]:Enteringdirectory`/root/xjy/libvirt/libvirt-1.2.0'make[2]:Leavingdirectory`/root/xjy/libvirt/libvirt-1.2.0'Makingallingnulib/lib第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐4、安裝libvirt配置./configure成功后,在libvirt安裝目錄下執(zhí)行“make”命令編譯。命令操作如下:編譯成功后執(zhí)行“makeinstall”命令進(jìn)行l(wèi)ibvirt的安裝。在配置和編譯libvirt時(shí)都不需要超級(jí)用戶(hù)(root)權(quán)限,但是在安裝時(shí)需要超級(jí)用戶(hù)(root)權(quán)限,如果不是root用戶(hù)登錄,需切換用戶(hù)或使用sudo命令。具體操作如課本所見(jiàn)。5、查看已經(jīng)安裝的libvirt7.1.3libvirtdlibvirtd是libvirt虛擬化管理工具的服務(wù)器端的守護(hù)程序。如果要讓某個(gè)節(jié)點(diǎn)能夠用libvirt進(jìn)行管理(無(wú)論是本地還是遠(yuǎn)程管理),都需要在這個(gè)節(jié)點(diǎn)上運(yùn)行著libvirtd這個(gè)守護(hù)進(jìn)程,以便讓其他上層管理工具可以連接到該節(jié)點(diǎn),libvirtd負(fù)責(zé)執(zhí)行其他管理工具發(fā)送給它的虛擬化管理操作指令。而libvirt的客戶(hù)端工具(包括virsh、virt-manager等)可以連接到本地或遠(yuǎn)程的libvirtd進(jìn)程,以便管理節(jié)點(diǎn)上的客戶(hù)機(jī)(啟動(dòng)、關(guān)閉、重啟、遷移等)、收集節(jié)點(diǎn)上的宿主機(jī)和客戶(hù)機(jī)的配置和資源使用狀態(tài)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐
libvirtd監(jiān)聽(tīng)在一個(gè)本地的Unixdomainsocket上,而沒(méi)有監(jiān)聽(tīng)基于網(wǎng)絡(luò)的TCP/IPsocket,需要使用“-l”或“-listen”的命令行參數(shù)來(lái)開(kāi)啟對(duì)libvirtd.conf配置文件中對(duì)TCP/IPsocket的配置。另外,libvirtd守護(hù)進(jìn)程的啟動(dòng)或停止并不會(huì)直接影響到正在運(yùn)行中的客戶(hù)機(jī)。libvirtd在啟動(dòng)或重新啟動(dòng)完成時(shí),只要客戶(hù)機(jī)的XML配置文件是存在的,libvirtd就會(huì)自動(dòng)加載這些客戶(hù)機(jī)的配置,以獲取它們的信息;當(dāng)然,如果客戶(hù)機(jī)沒(méi)有基于libvirt格式的XML文件在運(yùn)行,libvirtd則不能發(fā)現(xiàn)它。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.1.4virshvirsh通過(guò)調(diào)用libvirtAPI來(lái)實(shí)現(xiàn)虛擬化的管理,是一個(gè)完全在命令行文本模式下運(yùn)行的工具,系統(tǒng)管理員可以通過(guò)腳本程序方便地進(jìn)行虛擬化的自動(dòng)部署和管理。在使用時(shí),直接執(zhí)行virsh程序即可獲得一個(gè)特殊的shell---virsh,在這個(gè)shell里面可以直接執(zhí)行virsh的常用命令實(shí)現(xiàn)與本地的libvirt交互,還可以通過(guò)connect命令連接遠(yuǎn)程的libvirt與之交互。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐virsh管理虛擬化操作時(shí)可以使用兩種工作模式:一種是交互模式,直接連接到相應(yīng)的Hypervisor上,在命令行輸入virsh命令執(zhí)行操作并查看返回結(jié)果,可以使用“quit”命令退出連接;另外一種是非交互模式,在終端輸入一個(gè)virsh命令,建立到指定的一個(gè)URI的連接,執(zhí)行完成后將結(jié)果返回到當(dāng)前的終端并同時(shí)斷開(kāi)連接。查看virsh工具的幫助信息,可以使用“virsh-help”命令,也可以使用“manvirsh”命令,表7-1給出了virsh的常用命令。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐表7-1virsh常用命令表
第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐命令說(shuō)明help顯示該命令的幫助quit結(jié)束virsh,回到shell終端connect連接到指定的虛擬機(jī)服務(wù)器create定義并啟動(dòng)一個(gè)新的虛擬機(jī)destroy刪除一個(gè)虛擬機(jī)start開(kāi)啟(已定義過(guò)的)的虛擬機(jī)(不是啟動(dòng))define從xml文件定義一個(gè)虛擬機(jī)undefine取消定義的虛擬機(jī)dumpxml轉(zhuǎn)儲(chǔ)虛擬機(jī)的設(shè)置值list列出虛擬機(jī)reboot重新啟動(dòng)虛擬機(jī)save保存虛擬機(jī)的狀態(tài)restore恢復(fù)虛擬機(jī)的狀態(tài)suspend暫停虛擬機(jī)的執(zhí)行resume繼續(xù)執(zhí)行虛擬機(jī)dump將虛擬機(jī)的內(nèi)核轉(zhuǎn)儲(chǔ)到指定的文件,以便進(jìn)行分析和排錯(cuò)shutdown關(guān)閉虛擬機(jī)setmem修改內(nèi)存的大小setmaxmem設(shè)置內(nèi)存的最大值setvcpus修改虛擬處理器的個(gè)數(shù)7.1.5libvirtAPI第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-5libvirtAPI
以下是對(duì)常用的libvirtAPI的大致介紹:(1)?libvirt-domain:管理libvirt域的API,其中提供了一系列以virDomain開(kāi)頭的函數(shù)。(2)?libvirt-event:管理事件的API,其中提供了一系列以virEvent開(kāi)頭的函數(shù)。(3)?libvirt-host:管理宿主機(jī)的API。(4)?libvirt-network:管理網(wǎng)絡(luò)的API,其中提供了一系列以virConnect和virNetwork開(kāi)頭的函數(shù)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐(5)?libvirt-nodedev:管理節(jié)點(diǎn)的API,其中提供了一系列以virNode開(kāi)頭的函數(shù)。(6)?libvirt-storage:管理存儲(chǔ)池和卷的API,其中提供了一系列以virStorage開(kāi)頭的函數(shù)。(7)?libvirt-stream:管理數(shù)據(jù)流的API,其中提供了一系列以virStream開(kāi)頭的函數(shù)。(8)?virterror:處理libvirt庫(kù)的錯(cuò)誤處理接口。libvirtAPI的具體使用方式在7.2節(jié)中會(huì)舉例說(shuō)明。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.2基于libvirt的配置與開(kāi)發(fā)7.2.1libvirt的配置文件1)libvirt.conf配置文件libvirt.conf配置文件用于配置常用libvirt遠(yuǎn)程連接的別名。文件中以“#”號(hào)開(kāi)頭的行為注釋內(nèi)容。2)libvirtd.conf配置文件libvirtd.conf配置文件是libvirtd守護(hù)進(jìn)程的配置文件,該文件修改后libvirtd需要重新加載才能生效。同樣,文件中以“#”號(hào)開(kāi)頭的行為注釋內(nèi)容。libvirtd.conf配置文件中配置了許多l(xiāng)ibvirtd的啟動(dòng)設(shè)置,在每個(gè)配置參數(shù)上方都有該參數(shù)的注釋說(shuō)明。3)qemu.conf配置文件qemu.conf是libvirt對(duì)QEMU驅(qū)動(dòng)的配置文件,包括VNC、SPICE等和連接它們時(shí)采用的權(quán)限認(rèn)證方式的配置,也包括內(nèi)存大頁(yè)、SELinux、Cgroups等相關(guān)配置。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐4)qemu目錄libvirt使用xml文件對(duì)虛擬機(jī)進(jìn)行配置,其中包括虛擬機(jī)名稱(chēng)、分配內(nèi)存、vCPU等多種信息。?定義、創(chuàng)建虛擬機(jī)等操作都需要xml配置文件的參與。如果底層虛擬化使用QEMU,那么這個(gè)xml配置文件通常放置在libvirt特定的“qemu”目錄下。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.2.2libvirt中域的XML配置文件格式
運(yùn)行虛擬機(jī)有多種方式,例如可以使用“qemu-system-x86”命令來(lái)運(yùn)行虛擬機(jī)。另外,還可以使用libvirt的“virsh”命令從XML文件定義來(lái)運(yùn)行虛擬機(jī),可以將qemu-system-x86命令的參數(shù)使用XML直接定義出來(lái),然后libvirt加載并解析該XML配置文件,產(chǎn)生相應(yīng)的QEMU命令,運(yùn)行虛擬機(jī)。libvirt在對(duì)虛擬化操作進(jìn)行管理時(shí)采用XML格式的配置文件,其中最主要的就是對(duì)虛擬機(jī)(即域)的配置管理。1、域的配置在該配置文件中,<!---->中間的內(nèi)容為注釋部分,最外層是<domain>標(biāo)簽。所有其他的標(biāo)簽都在<domain>和</domain>之間,表明該配置文件是一個(gè)域的配置文件。<domain>標(biāo)簽有兩個(gè)屬性,一個(gè)是“type”屬性,一個(gè)是“id”屬性。“type”屬性指定運(yùn)行該虛擬機(jī)的Hypervisor,值是具體的驅(qū)動(dòng)名稱(chēng),例如“xen”,“kvm”,“qemu”等。第二個(gè)屬性“id”是一個(gè)唯一標(biāo)識(shí)虛擬機(jī)的唯一整數(shù)標(biāo)識(shí)符,如果不設(shè)置該值,libvirt會(huì)按順序分配一個(gè)最小的可用id。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐在<domain>標(biāo)簽內(nèi),有一些通用的域的元數(shù)據(jù),表明當(dāng)前的域的配置信息。<name></name>標(biāo)簽內(nèi)為虛擬機(jī)的簡(jiǎn)稱(chēng),只能由數(shù)字、字母組成,并且在一臺(tái)主機(jī)內(nèi)名稱(chēng)要唯一。name屬性定義的虛擬機(jī)的名字在使用virsh進(jìn)行管理時(shí)使用。<uuid></uuid>標(biāo)簽內(nèi)為虛擬機(jī)的全局唯一標(biāo)識(shí)符,在同一個(gè)宿主機(jī)上,各個(gè)客戶(hù)機(jī)的名稱(chēng)和uuid都必須是唯一的。<name></name>標(biāo)簽和<uuid></uuid>標(biāo)簽都屬于<domain></domain>的元數(shù)據(jù)。除此之外,還有其他的元數(shù)據(jù)標(biāo)簽,例如<title>、<description>和<metadata>等。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐2、內(nèi)存,CPU,啟動(dòng)順序等配置<memoryunit='KiB'></memory>標(biāo)簽內(nèi)內(nèi)容表示客戶(hù)機(jī)最大可使用的內(nèi)容,“unit”屬性表示使用的單位是“KiB”,即KB,因此,內(nèi)存大小為1048576KB,即1GB。<currentMemory></currentMemory>標(biāo)簽內(nèi)內(nèi)容表示啟動(dòng)時(shí)分配給客戶(hù)機(jī)使用的內(nèi)存,這里,大小也是1GB。在使用QEMU時(shí),一般將兩者設(shè)置為相同的值。<vcpu></vcpu>標(biāo)簽內(nèi)表示客戶(hù)機(jī)中vCPU的個(gè)數(shù),這里為兩個(gè)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐<os></os>標(biāo)簽內(nèi)定義客戶(hù)機(jī)系統(tǒng)類(lèi)型及客戶(hù)機(jī)硬盤(pán)和光盤(pán)的啟動(dòng)順序。其中<type>標(biāo)簽的配置表示客戶(hù)機(jī)類(lèi)型是“hvm”類(lèi)型。<features></features>標(biāo)簽內(nèi)定義Hypervisor對(duì)客戶(hù)機(jī)特定的CPU或者是其他硬件的特性的打開(kāi)和關(guān)閉。這里打開(kāi)了ACPI、APIC、PAE等特性。<clock></clock>標(biāo)簽定義時(shí)鐘設(shè)置,客戶(hù)機(jī)的時(shí)鐘通常由宿主機(jī)的時(shí)鐘進(jìn)行初始化。<on_poweroff>destroy</on_poweroff>,<on_reboot>restart</on_reboot>和<on_crash>destroy</on_crash>都是libvirt配置文件中對(duì)事件的配置。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐3、設(shè)備配置<devices></device>標(biāo)簽內(nèi)放置著客戶(hù)機(jī)所有的設(shè)備配置。最外層是<device>標(biāo)簽,標(biāo)簽內(nèi)放置該設(shè)備的具體信息。<name>標(biāo)簽指明該設(shè)備的名字,由字母、數(shù)字和下劃線(xiàn)組成。<capability>標(biāo)簽定義節(jié)點(diǎn)所具有的能力,它的“type”屬性指明設(shè)備類(lèi)型,設(shè)備的類(lèi)型決定了該標(biāo)簽的子標(biāo)簽。<emulator></emulator>標(biāo)簽內(nèi)容放置使用的設(shè)備模型模擬器的絕對(duì)路徑。本例中的絕對(duì)路徑為“/usr/bin/kvm”。<disk>標(biāo)簽表示對(duì)域的存儲(chǔ)配置,示例中是對(duì)客戶(hù)機(jī)的磁盤(pán)的配置。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐4、其他配置<inputtype='tablet'bus='usb'/>表示提供tablet這種類(lèi)型的設(shè)備,讓光標(biāo)可以在客戶(hù)機(jī)獲取絕對(duì)的位置定位。<inputtype='mouse'bus='ps2'/>表示會(huì)讓QEMU模擬PS2接口的鼠標(biāo)。<graphics></graphics>標(biāo)簽內(nèi)放置連接到客戶(hù)機(jī)的圖形顯示方式的配置。“type='vnc'”表示通過(guò)VNC的方式連接到客戶(hù)機(jī),type類(lèi)型的值可以是“sdl”、“vnc”、“rdp”或者是“desktop”。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐<video></video>標(biāo)簽內(nèi)放置的是顯卡配置,對(duì)于<modeltype='cirrus'vram='9216'heads='1'/>。<memballoonmodel='virtio'></memballoon>標(biāo)簽放置內(nèi)存的ballooning相關(guān)的配置,即客戶(hù)機(jī)的內(nèi)存氣球設(shè)備。“model='virtio'”屬性表示使用virtio-balloon驅(qū)動(dòng)實(shí)現(xiàn)客戶(hù)機(jī)的ballooning調(diào)節(jié)。<addresstype='pci'domain='0x0000'bus='0x00'slot='0x04'function='0x0'/>表示該設(shè)備在客戶(hù)機(jī)中的PCI設(shè)備編號(hào)值。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.2.3libvirtAPI使用示例libvirtAPI本身用C語(yǔ)言實(shí)現(xiàn),提供了一套管理虛擬機(jī)的應(yīng)用程序接口。本書(shū)以C語(yǔ)言為例,給出libvirtAPI的使用示例。使用libvirtAPI進(jìn)行虛擬化管理時(shí),首先需要建立一個(gè)到虛擬機(jī)監(jiān)控器Hypervisor的連接,有了到Hypervisor的連接,才能管理節(jié)點(diǎn)、節(jié)點(diǎn)上的域等信息。
1、建立到Hypervisor的連接libvirt連接可以使用簡(jiǎn)單的客戶(hù)端-服務(wù)器端的架構(gòu)模式。服務(wù)器端運(yùn)行著Hypervisor,客戶(hù)端通過(guò)libvirt連接服務(wù)器端的Hypervisor來(lái)實(shí)現(xiàn)虛擬化的管理。以本書(shū)為例,在基于QEMU-KVM的虛擬化解決方案中,不管是基于libvirt的本地虛擬化的管理還是遠(yuǎn)程虛擬化的管理,在服務(wù)器端,一方面需要運(yùn)行Hypervisor,另一方面還需要運(yùn)行l(wèi)ibvirtd這個(gè)守護(hù)進(jìn)程。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐(1)使用libvirt連接本地的Hypervisor時(shí),URI的一般格式如下:driver[+transport]:///[path][?extral-param]連接QEMU有兩種方式,一種是系統(tǒng)范圍內(nèi)的特權(quán)驅(qū)動(dòng)(“system”實(shí)例),一種是用戶(hù)相關(guān)的無(wú)特權(quán)驅(qū)動(dòng)(“session”實(shí)例)。常用的本地連接QEMU的URI如下:qemu:///systemqemu:///session第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐(2)使用libvirt連接遠(yuǎn)程的Hypervisor時(shí),URI的一般格式如下:driver[+transport]:///[user@][host][:port]/[path][?extral-param]在進(jìn)行遠(yuǎn)程連接時(shí),也有system和session兩種連接方式。例如“qemu+ssh://root@?/system”表示,通過(guò)ssh連接遠(yuǎn)程節(jié)點(diǎn)的QEMU,以root用戶(hù)連接名為“”的主機(jī),以“system”實(shí)例方式建立連接。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐(3)使用URI建立連接:通過(guò)libvirt建立到Hypervisor的連接時(shí)需要使用URI。URI標(biāo)識(shí)相對(duì)復(fù)雜些,當(dāng)管理多個(gè)節(jié)點(diǎn)時(shí),使用很多的URI連接不太容易記憶,可以在libvirt的配置文件libvirt.conf中,為URI指定別名。例如“hail=qemu+ssh://root@/system”中用“hail”這個(gè)別名即可。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐2、使用libvirtAPI查詢(xún)某個(gè)域的信息對(duì)虛擬機(jī)進(jìn)行管理操作,大部分的內(nèi)容是對(duì)各個(gè)節(jié)點(diǎn)上的域的管理。在libvirtAPI中有很多對(duì)域管理的函數(shù),要對(duì)域進(jìn)行管理時(shí),需要得到virDomainPtr這個(gè)類(lèi)型的變量。在getInfo()函數(shù)中,首先定義一個(gè)virDomainPtr變量dom,然后使用getConn()函數(shù)得到一個(gè)virConnectPtr類(lèi)型的到Hypervisor的連接conn,然后使用virDomainLookupByID()函數(shù)得到一個(gè)virDomainPtr的值賦給dom用于對(duì)域進(jìn)行管理。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐intvirDomainGetInfo(virDomainPtrdomain,virDomainInfoPtrinfo)函數(shù)會(huì)將virDomainPtr指定的域的信息放置在virDomainInfo中。virDomainInfo是一個(gè)結(jié)構(gòu)體,其中,state屬性表示域的運(yùn)行狀態(tài),是virDomainState中的一個(gè)值。maxMem屬性表示分配的最大內(nèi)存,單位是KB。memory屬性表示該域使用的內(nèi)存,單位也是KB。nrVirtCpu屬性表示為該域分配的虛擬CPU個(gè)數(shù)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐3、編譯運(yùn)行l(wèi)ibvirt-conn.c并使用virsh查看當(dāng)前節(jié)點(diǎn)情況在使用virsh啟動(dòng)demo.xml定義的虛擬機(jī)后,可以在libvirt-conn.c的代碼中查詢(xún)已經(jīng)啟動(dòng)的域(即虛擬機(jī))的信息。將libvirt-conn.c文件使用gcc編譯為可執(zhí)行文件libvirt-conn,然后執(zhí)行該文件即可看到demo.xml文件定義的虛擬機(jī)的信息。使用virsh查看虛擬機(jī)的相關(guān)信息,“domiddemo”命令表示通過(guò)虛擬機(jī)的name屬性查看虛擬機(jī)的id編號(hào)。“domname2”命令表示通過(guò)虛擬機(jī)的id編號(hào)查看其name屬性。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-6demo虛擬機(jī)的界面第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.3virt-managervirt-manager是一個(gè)由紅帽公司發(fā)起,全名為VirtualMachineManager的開(kāi)源虛擬機(jī)管理程序。virt-manager是用Python編寫(xiě)的GUI程序,底層使用了libvirt對(duì)各類(lèi)Hypervisor進(jìn)行管理。virt-manager雖是一個(gè)基于libvirt的虛擬機(jī)管理應(yīng)用程序,主要用于管理KVM虛擬機(jī),但是也能管理Xen等其他Hypervisor。virt-manager提供了圖形化界面來(lái)管理KVM虛擬機(jī),可以管理多個(gè)宿主機(jī)上的虛擬機(jī),但是宿主機(jī)上必須安裝libvirt。virt-manager通過(guò)豐富直觀的界面給用戶(hù)提供了方便易用的虛擬化管理功能,包括:(1)創(chuàng)建、編輯、啟動(dòng)或停止虛擬機(jī)。(2)查看并控制每個(gè)虛擬機(jī)的控制臺(tái)。(3)查看每部虛擬機(jī)的性能以及使用率。(4)查看每部正在運(yùn)行中的虛擬機(jī)以及主控端的實(shí)時(shí)性能及使用率信息。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.3.1virt-manager的編譯和安裝源代碼下載后,首先解壓縮,然后進(jìn)入到解壓縮目錄,執(zhí)行命令“./configure”,“make”,“makeinstall”進(jìn)行配置、編譯和安裝。virt-manager的源代碼使用了版本管理工具git進(jìn)行管理,在git的代碼倉(cāng)庫(kù)中也可以下載virt-manager的源代碼,然后進(jìn)行安裝。使用git工具下載virt-manager的源碼時(shí)的地址為:git:///virt-manager.git。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.3.2virt-manager的使用1、在ubuntu中打開(kāi)virt-manager在Ubuntu14.04中使用virt-manager非常方便,可以在Ubuntu的圖形界面中打開(kāi),在桌面左上角“searchyourcomputerandonlinesources”,點(diǎn)開(kāi)后,在搜索框中輸入“virt”即可在下方看到“VirtualMachineManager”即virt-manager的圖標(biāo),鼠標(biāo)點(diǎn)擊即可,如圖7-7和7-8所示。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-7在Ubuntu圖形界面中打開(kāi)virt-manager(步驟一)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-8在Ubuntu圖形界面中打開(kāi)virt-manager(步驟二)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐2、在virt-manager中創(chuàng)建客戶(hù)機(jī)在圖7-9中的virt-manager管理界面中,創(chuàng)建一個(gè)客戶(hù)機(jī),可以點(diǎn)擊左上角的電腦小圖標(biāo),也可以將鼠標(biāo)放置在“l(fā)ocalhost(QEMU)”上右鍵,點(diǎn)擊里面的“New”選項(xiàng)創(chuàng)建客戶(hù)機(jī)。將鼠標(biāo)放置在“l(fā)ocalhost(QEMU)”上右鍵,會(huì)出現(xiàn)一個(gè)提示“qemu:///system”,這就是默認(rèn)的本地連接QEMU的URI。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-9virt-manager的管理界面第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-10virt-manager中創(chuàng)建虛擬機(jī)(步驟一)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-11virt-manager中創(chuàng)建虛擬機(jī)(步驟二)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-12virt-manager中創(chuàng)建虛擬機(jī)(步驟三)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-13virt-manager中創(chuàng)建虛擬機(jī)(步驟四)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-14virt-manager中創(chuàng)建虛擬機(jī)ubuntu第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐在圖7-14的界面左上角,將鼠標(biāo)放置在“”圖標(biāo)上,提示信息為“Showvirtualhardwaredetails”,點(diǎn)擊該圖標(biāo),可以看到如圖7-15所示的創(chuàng)建的Ubuntu虛擬機(jī)的詳細(xì)配置信息。在該配置信息中,包括對(duì)客戶(hù)機(jī)的名稱(chēng)、描述信息、處理器、內(nèi)存、磁盤(pán)、網(wǎng)卡、鼠標(biāo)、聲卡、顯卡等許多信息的配置,這些詳細(xì)的配置信息都寫(xiě)在/etc/libvirt/qemu/demo-v.xml配置文件中。如果對(duì)運(yùn)行中的客戶(hù)機(jī)進(jìn)行配置信息的修改,配置并不能立即生效,只有重啟虛擬機(jī)后才能生效。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-15虛擬機(jī)ubuntu的詳細(xì)配置信息第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐3、在virt-manager中管理客戶(hù)機(jī)在圖7-16中,處于運(yùn)行狀態(tài)的虛擬機(jī)的顯示為“Running”,點(diǎn)擊“Open”圖標(biāo)打開(kāi)虛擬機(jī)窗口界面,點(diǎn)擊圖標(biāo)啟動(dòng)虛擬機(jī)。“”圖標(biāo)后有幾個(gè)選項(xiàng),包括“Reboot”“ShutDown”“ForceReset”“ForceOff”和“Save”。點(diǎn)擊“ShutDown”進(jìn)行虛擬機(jī)的正常關(guān)閉,使用“ForceOff”進(jìn)行虛擬機(jī)的強(qiáng)制關(guān)機(jī),一般盡量避免使用“ForceOff”來(lái)強(qiáng)制關(guān)機(jī)。點(diǎn)擊“Save”保存當(dāng)前客戶(hù)機(jī)的運(yùn)行狀態(tài)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐4、建立一個(gè)新的連接在默認(rèn)情況下,啟動(dòng)virt-manager時(shí)會(huì)自動(dòng)連接本地的Hypervisor。由于virt-manager是基于libvirt的,因此在啟動(dòng)virt-manager時(shí),如果libvirt的守護(hù)進(jìn)程沒(méi)有啟動(dòng),會(huì)有連接錯(cuò)誤的提示。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-17virt-manager連接錯(cuò)誤第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐通過(guò)virt-manager的菜單“File”→“AddConnection”可以在virt-manager中建立一個(gè)本地或者遠(yuǎn)程Hypervisor的連接。在圖7-18中,選擇Hypervisor的類(lèi)型,類(lèi)型包括Xen、QEMU/KVM和LXC(LinuxContainers),如果要連接遠(yuǎn)程主機(jī),勾選“Connecttoremotehost”選項(xiàng)框,選擇使用的遠(yuǎn)程連接方式,遠(yuǎn)程連接方式包括SSH、TCP和TLS,填上連接遠(yuǎn)程主機(jī)時(shí)使用的用戶(hù)名,指定遠(yuǎn)程主機(jī)的主機(jī)名或IP地址,然后點(diǎn)擊“Connect”按鈕即可。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-18增加一個(gè)連接第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐圖7-19virt-manager管理本地和遠(yuǎn)程主機(jī)的虛擬機(jī)第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.4MarvelSkyMarvelSky是北京奇觀科技有限責(zé)任公司的一個(gè)商業(yè)產(chǎn)品,作為一個(gè)虛擬化管理平臺(tái),MarvelSky主要用于管理客戶(hù)機(jī)、模板、用戶(hù)等操作。MarvelSky的前身是TinyCloud,MarvelSky作為T(mén)inyCloud的一個(gè)成熟版本,進(jìn)行了商業(yè)化運(yùn)作。MarvelSky包括其前身TinyCloud,是由北京奇觀科技有限責(zé)任公司研發(fā)的,該公司的研發(fā)團(tuán)隊(duì)由南陽(yáng)理工學(xué)院軟件學(xué)院的王耀寬老師及部分師生組成。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐它主要包括以下功能:(1)虛擬機(jī)管理:虛擬機(jī)快速創(chuàng)建、刪除、啟動(dòng)、關(guān)閉等功能;虛擬機(jī)資源信息的實(shí)時(shí)動(dòng)態(tài)顯示、查看;靈活地增加、刪除系統(tǒng)附屬磁盤(pán)。(2)模板管理:鏡像模板的上傳、刪除。(3)用戶(hù)管理:用戶(hù)的創(chuàng)建、綁定虛擬機(jī)、權(quán)限管控;管理員一鍵設(shè)置選定用戶(hù)USB權(quán)限,系統(tǒng)恢復(fù);(4)管理控制:可定義和配置動(dòng)態(tài)集群和應(yīng)用路由控制節(jié)點(diǎn)的各種相關(guān)參數(shù),包括運(yùn)行時(shí)的動(dòng)態(tài)集群需要遵循的各種策略,并可監(jiān)控該環(huán)境的運(yùn)行狀態(tài)。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐7.4.1MarvelSky后臺(tái)程序的配置和安裝MarvelSky分為后臺(tái)程序和管理平臺(tái)兩部分,后臺(tái)程序在服務(wù)器上運(yùn)行,管理平臺(tái)在PC機(jī)上運(yùn)行。由于管理平臺(tái)在普通PC機(jī)上可直接運(yùn)行,因此,本小節(jié)介紹的是MarvelSky后臺(tái)程序的安裝。安裝MarvelSky大致分為五步,分別是QEMU的安裝、libvirt的安裝、libevent的安裝、MySQL的安裝配置和MarvelSky云平臺(tái)軟件的安裝。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐1、編譯安裝QEMU由于MarvelSky需要QEMU的支持,因此首先需要編譯安裝QEMU。而官方QEMU的版本由于MarvelSky的研發(fā)團(tuán)隊(duì)對(duì)QEMU進(jìn)行的二次開(kāi)發(fā),并不可直接使用,需要安裝特定版本的QEMU,本小節(jié)所指的QEMU,如無(wú)特別說(shuō)明,均指二次開(kāi)發(fā)后的特定版本的QEMU,非官方QEMU版本。由于該版本的QEMU涉及北京奇觀科技有限責(zé)任公司的商業(yè)機(jī)密,故在此只提供演示,并不提供該版本QEMU的源碼下載。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐安裝QEMU和普通的Linux軟件安裝類(lèi)似,大致分為如下四步:(1)把QEMU源碼包qemu-2.2.0-1212.tar.gz拷貝到服務(wù)器中,本書(shū)的示例中把QEMU放置在“/root/xjy/qemu”目錄下;(2)使用命令“tarzxvfqemu-2.2.0-1212.tar.gz”解壓源碼包。解壓完成后在當(dāng)前目錄中出現(xiàn)名為“qemu-2.2.0-1212”的目錄;(3)在安裝QEMU之前需要先安裝其依賴(lài)的軟件包;(4)配置編譯安裝QEMU。第7章KVM虛擬機(jī)管理應(yīng)用實(shí)踐2、libvirt的編譯安裝(1)將libvirt源碼包拷貝到服務(wù)器(宿主機(jī))上合適的目錄中。(2)解壓源碼包。(3)安裝依賴(lài)的軟件包,軟件包名稱(chēng)如下:apt-getinstalllibyajl-devapt-getinstalllibxml2-devlibdevmapper-devapt-getinstalllibpciaccess-devlibnl-devuuid-dev(4)利用“./configure”“make”“makeinstall”命令進(jìn)行配置、編譯、安裝。第7章
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CIS PAS-0301-2022測(cè)量控制與儀器儀表工程技術(shù)人員工程能力評(píng)價(jià)規(guī)范
- T/CIES 002-2016照明工程設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)
- T/CHTS 20020-2022公路橋梁鋼結(jié)構(gòu)石墨烯鋅粉防腐涂料
- T/CHTS 20017-2021公路橋梁環(huán)向鋼絲繩組合阻尼支座
- T/CHTS 10046-2021高性能瀝青路面施工技術(shù)指南
- T/CHINABICYCLE 21-2023電動(dòng)自行車(chē)用鈉離子蓄電池
- T/CGCC 56-2021文化知識(shí)產(chǎn)權(quán)服務(wù)商業(yè)模式分類(lèi)
- T/CGCC 54.4-2021網(wǎng)絡(luò)平臺(tái)環(huán)境下服務(wù)交易規(guī)范
- T/CECS 10306-2023智能城鎮(zhèn)燃?xì)庹{(diào)壓裝置
- T/CECS 10224-2022預(yù)拌透水混凝土
- 【核心素養(yǎng)目標(biāo)】9.3 一元一次不等式組 教案七年級(jí)數(shù)學(xué)下冊(cè)(人教版)
- 保證斷絕關(guān)系的保證書(shū)
- 選拔卷-:2024年小升初數(shù)學(xué)模擬卷三(北師大版)A3版
- 快遞云倉(cāng)合同范本
- 2024年高考語(yǔ)文作文第一輪復(fù)習(xí):掌握常用的寫(xiě)作結(jié)構(gòu)
- DZ∕T 0339-2020 礦床工業(yè)指標(biāo)論證技術(shù)要求(正式版)
- MOOC 市場(chǎng)營(yíng)銷(xiāo)學(xué)-西南財(cái)經(jīng)大學(xué) 中國(guó)大學(xué)慕課答案
- 頜下感染的護(hù)理查房
- 高考英語(yǔ)考綱重點(diǎn)短語(yǔ)詞組(英漢版)
- 糖尿病膳食指南2024
- 主斜井皮帶安裝技術(shù)措施
評(píng)論
0/150
提交評(píng)論