<Mastering KVM Virtualization>:第四章 使用libvirt創建你的第一臺虛擬機
在第3章《搭建獨立的KVM虛擬化》中,你安裝並啟動了libvirtd服務。你還引入了幫助你管理虛擬機的libvirt管理工具virt-manager和virsh。
相較於命令行,新用戶總是更喜歡GUI。因此我們從virt-manager開始講解。我們也認為,了解virt-manager將快速推進使用libvirt和virsh管理虛擬機的學習過程。我們會盡可能提供等價的virsh命令,使你有機會同時學習virt-manager和virsh。
在本章中,我們將討論以下主題:
- virt-manger相關的所有內容
- 默認的虛擬存儲和網絡配置
- 各種Guest安裝方法(PXE/ISO/NETWORK/IMPORT)
- 使用virt-builder和oz工具快速創建多個VM
virt-manager介紹
virt-manager應用程序是一個基於Python的桌面用戶程序,通過libvirt管理虛擬機。它主要針對KVM虛擬機,但也可以管理Xen和LXC(Linux容器)等其他虛擬機。virt-manager顯示運行的VM的摘要視圖,提供它們的性能和資源利用率統計數據。使用virt-manager圖形界面,你可以很容易地創建新的VM,監控它們,並在需要時進行配置更改。內嵌的VNC和SPICE client viewer提供了一個完整的VM的圖形控制臺。
正如我們在第三章中提到的,Host需要向VM分配CPU,內存,存儲和網絡資源。在本章中,我們將介紹KVM Host的基本配置,並使用virt-manager創建虛擬機。讓我們通過執行virt-manager命令或按下Alt + F2來啟動Virtual Machine Manager,然後它將顯示virt-manager對話框。
如果你不是root用戶,在執行命令之前將提示你輸入root密碼。此處的密碼認證過程由polkit框架處理。polkit是一套授權API,用於將特權程序(例如系統守護進程)給無特權程序提供服務。
如果你希望允許某些組或用戶訪問virt-manager而不必進行root用戶認證,則需要創建一個polkit規則。規則文件必須在/etc/polkitl-1/runles.d目錄中創建。
例如,假設你希望wheel組的所有用戶都無需輸入root密碼可以直接訪問virt-manager,可以創建/etc/polkit-1/rules.d/70-libvirtd.rules文件並在其中加入以下內容:
polkit.addRule(function(action, subject) { if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("wheel")) { return polkit.Result.YES; } });
保存並關閉文件。libvirtd進程會監視polikit的rules.d目錄的內容變化,並在檢測到變化時自動重載規則,所以你不需要通過systemctl命令重載進程。如果一切操作順利完成,你會發現,現在所有wheel組的用戶都可以無需輸入root密碼來啟動virt-manager。通過以下命令創建wheel組的用戶:
# usermod -G wheel <username>
如果你仔細檢視這條polkit規則,你會發現它會檢查:該用戶是否屬於wheel組,是否為本地用戶,是否屬於一個活動會話。如果通過,org.libvirt.unix.manage動作的返回結果是YES(表示允許該動作)。它也可以被設置成以下形式:
NO:拒絕訪問請求(return polkit.Result.No)
AUTH_SELF:要求輸入該用戶自身密碼(return polkit.Result.AUTH_SELF)
AUTH_ADMIN:要求輸入該系統管理員的密碼(return polkit.Result.AUTH_ADMIN)
打開virt-manager後,點擊Edit -- Connection Details 訪問網絡和存儲配置的選項:
- Overview選項會顯示libvirt URI、CPU和內存使用情況等信息。
- Virtual Networks和Storage選項將顯示虛擬機所使用的網絡和存儲池的詳細信息。
- Network Interface選項提供主機網絡的詳細信息,並提供配置它們的選項。我們會在第五章 網絡與存儲 中詳細介紹。
Virtual Networks標簽
Virtual Networks標簽允許我們配置各種類型的虛擬網絡,並監視它們的狀態:
使用虛擬網絡標簽,您將能夠配置以下類型的虛擬網絡:
- NATed
- Routed
- Isolated
1. NATED虛擬網絡
基於NAT的虛擬網絡,向虛擬機VM提供了出站網絡連接。這意味著VM可以根據Host主機上可用的網絡連接與外部網絡通信,但是沒有一個外部設備能夠與VM發起通信。在此設置中,VM和Host應該能夠通過在Host上配置的橋接接口(bridge interface)彼此通信。
2. ROUTED虛擬網絡
一個ROUTED虛擬網絡允許將虛擬機直接連接到物理網絡。依據Hypervisor上的路由規則,VMs可以發送數據包到外部網絡。
3. ISOLATED虛擬網絡
顧名思義,它提供了Hypervisor和虛擬機之間的私有網絡。
我們將在下一章中通過實例詳細介紹每一種網絡配置,以及在生產環境中使用的其他網絡實現,在本章中,我們將集中討論默認類型的虛擬網絡 -- NAT。一旦您了解了默認網絡是如何工作的,就很容易理解其他網絡拓撲。
使用 virsh net list --all 列出所有虛擬網絡,--all 表示列出所有 活躍/非活躍 虛擬網絡,如果沒有指定 --all 選項,那麽只會輸出 活躍的虛擬網絡。
# virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- default active yes yes
默認網絡類型(NATed)
如前所述,默認網絡是基於NAT的虛擬網絡。它允許虛擬機與外部網絡進行通信,不管hypervisor上是何種可用的活動網絡接口(以太網、無線、VPN等)。它還提供了一個IP子網和一個DHCP服務器,以便VM能夠自動獲取它們的IP地址。
檢查之前截圖中默認網絡的詳細信息:
- default是虛擬網絡的名稱。這是在創建虛擬網絡時提供的。
- Device表示在Host主機上創建的橋接網絡(網橋)的名稱。網橋是創建虛擬網絡的主要組成部分。我們將在後面的一章中更深入地介紹網橋。
- State表示虛擬網絡的狀態。它可以是活動的,也可以是不活動的。
- Autostart表示虛擬機是否隨著libvirtd服務啟動。
- IPv4 Configuration 提供了私有網絡的信息,DHCP服務器提供給VM的IP地址範圍,以及轉發模式。轉發模式可以是NAT或者isolated
你可以使用紅色的STOP標誌按鈕停用default網絡,也可以使用PLAY按鈕重新啟用它。“+”按鈕用於創建新的虛擬網絡,這個內容我們將在下一章節講解。“X”按鈕可以刪除虛擬網絡。
你也可以使用virsh命令查看這些信息:
# virsh net-info default Name: default UUID: ba551355-0556-4d32-87b4-653f4a74e09f Active: yes Persistent: yes Autostart: yes Bridge: virbr0 ----- # virsh net-dumpxml default <network> <name>default</name> <uuid>ba551355-0556-4d32-87b4-653f4a74e09f</uuid> <forward mode=‘nat‘> <nat> <port start=‘1024‘ end=‘65535‘/> </nat> </forward> <bridge name=‘virbr0‘ stp=‘on‘ delay=‘0‘/> <mac address=‘52:54:00:d1:56:2e‘/> <ip address=‘192.168.124.1‘ netmask=‘255.255.255.0‘> <dhcp> <range start=‘192.168.124.2‘ end=‘192.168.124.254‘/> </dhcp> </ip> </network>
以下的這些基本命令,將幫助你使用默認網絡設置:
- 虛擬網絡配置文件以XML的格式保存在 /etc/libvirt/qemu/networks/ 目錄,對於默認網絡類型,文件名為 /etc/libvirt/qemu/networks/default.xml
- virsh net-destroy 停用虛擬網絡;virsh net-start 啟動虛擬網絡。當使用該虛擬網絡的VM處於激活狀態時,不要執行上述兩個命令。這會中斷VM的網絡連接。
-
# virsh net-destroy default 停用默認虛擬網絡 # virsh net-start default 啟動默認虛擬網絡
Storage標簽
該標簽允許你配置多種類型的storage pool和監控storage pool的狀態,以下截圖展示了Storage標簽的內容:
Storage標簽頁顯示了可用storage pool的信息。storage pool是指存儲虛擬機磁盤映像的存儲庫。
截至到寫稿時,libvirt支持從多種類型的存儲源創建storage pool,具體類型如截圖所示,其中使用最普遍的是“文件系統目錄”和“邏輯卷LVM”,我們將在下一節中做更進一步的了解。
Default storage pool:default是libvirt創建的,基於文件的,用於存儲虛擬機鏡像文件的storage pool的名稱。storage pool的目錄位置為/var/lib/libvirt/images
使用Virtual Machine Manager創建虛擬機
virt-manager支持以下方法安裝Guest OS:
- 本地安裝介質(ISO鏡像或者CD-ROM)
- 網絡安裝(HTTP,FTP,或者NFS)
- 網絡啟動(PXE)
- 導入已存在磁盤鏡像
在本節中,我們將創建運行不同操作系統的新虛擬機,每個操作系統都使用前面提到的安裝方法。因此在這一節的結尾,你將熟悉創建虛擬機的所有可用方法,並徹底了解“創建新虛擬機”的流程向導。
我們會創建以下Guest OS:
- Windows 7
- CentOS 6
我們可以通過執行 virt-manger命令,或者通過 Application | System Tools 下的按鈕 啟動 Virtual Machine Manger,從而使用圖形界面創建虛擬機。
創建虛擬機 流程向導
在Virtual Machine Manger的工具欄中點擊“Create a new virtual machine”按鈕,或者選擇 File | New Virtual Machine 打開流程向導,它允許你從virt-manager創建新的虛擬機。
流程向導將虛擬機器的創建過程分解為五個步驟:
- 選擇安裝方式
- 配置安裝介質
- 配置CPU和內存
- 配置虛擬機存儲
- 虛擬機命名和網絡配置
讓我們創建一個虛擬機,並使用本地安裝介質(ISO鏡像或CD-ROM)方法安裝CenOS 6.5操作系統。
該安裝方法要求將操作系統安裝媒體插入系統的CD-ROM托盤中,也可在本地使用ISO鏡像,或通過網絡。存放ISO文件的理想位置是/var/lib/libvirt/images目錄,它是virt-manager的默認存儲池,並且正確設置了所有SELinux和其他權限。如果ISO文件存放在其他的位置,務必要保證virt-manager可以正常訪問。
1. 一旦你確保virt-manager能夠訪問安裝媒體,向導將要求您選擇如何安裝操作系統。選擇“Local install media (ISO Image or CDROM)”,點擊Forward按鈕:
2. 單擊“Forward”按鈕將帶你到第2步,您必須指定ISO鏡像位置。如果您正在使用物理DVD或CD,請選擇對應選項。virt-manager根據安裝介質自動檢測操作系統。它使用了libosinfo提供的操作系統信息數據庫。在撰寫本文時,libosinfo數據庫包含了關於近302個操作系統的信息,包括Windows、Linux、Unix和所有最重要的Linux發行版。你可以通過運行sinfo-query os命令從libosinfo數據庫中提取操作系統列表。
TIP:選擇正確的操作系統名稱非常重要,因為仿真硬件的選擇緊密地映射到虛擬機的操作系統類型集。比如,對於Windows系統,默認的磁盤格式為IDE,而Linux系統的默認磁盤類型是virtio。
3. 在下一個頁面,指定要為虛擬機分配的內存和CPU數量:
4. 向導會顯示你可分配的最大內存和CPU的上限。配置這些設置,並點擊“Forward”繼續虛擬機的存儲設置:
5. 要確保為虛擬機提供足夠的磁盤空間。默認情況下,它在/var/lib/libvirt/qemu目錄創建一個虛擬磁盤,這是默認池。如果在系統上有其他自定義的storage pool,選擇“Select Managed or other existing storage”,可以直接輸入磁盤的路徑,或者點擊“Browse”按鈕,它會打開“Locate or create storage volume”對話框,你可以在已經定義的storage pool中選擇或者創建一個新的volume。我們將在下一節中討論storage pool以及學習如何創建它們。
NOTE:這裏有一個單選框“Allocate entire disk now”,以選擇磁盤的置備方式。不勾選此框則表示 瘦置備模式(thin-provisoned disk),勾選此框表示 厚置備模式(thick-provision disk),也稱為預分配磁盤。
6. 下一個也是最後一個步驟是命令虛擬機和配置網絡。默認的主機名基於選擇的操作系統(比如CentOS 6.5的虛擬機默認主機名為centos6.5)。你可以把它改成任何你想要的名字,但是要註意,只有下劃線,點號和連字符這些符號是被支持的。
點開“Advance options”將顯示虛擬網絡配置。默認情況下,KVM提供類似NAT的橋接網絡,連接到這個NAT的虛擬機不會將自己暴露在外部網絡上,但是可以通過Host OS的設置獲得外部網絡連接。如果你打算在虛擬機上運行服務器軟件或WebServer,並希望它可以被外部網絡上的其他設備訪問,那麽你將不得不使用其他虛擬網絡配置,如Linux bridge或者macvtap。
“Set a fixed MAC Address”運行你為你的虛擬機設置一個自定義的MAC地址。libvirt默認的MAC地址區間是“ 52:54:00 ”。
7. 如果你希望先進一步配置虛擬機的硬件,請勾選“Customize configuration before install”選框,然後再點擊“Finish”。這樣做將打開另一個向導,允許您添加、刪除和配置虛擬機的硬件設置。
8. 如果一切順利,新建的虛擬機將會打開一個虛擬控制臺。新的domain name出現在Virtual Machine Manager的domain列表當中。安裝過程從boot:提示符開始,就和原生硬件的安裝過程一樣。
9. 安裝向導的最後一步是單擊“Reboot”按鈕以重新啟動系統並完成安裝。在VM重啟之後,您將看到操作系統登錄界面。
網絡安裝方式(HTTP,FTP,,或NFS)
這個方法涉及 使用RHEL,CentOS或Fedora的 installation tree來安裝Guest OS。虛擬機創建和支持該方法的Guest OS安裝過程也涉及五個階段,從安裝方式選擇開始,然後繼續進行至虛擬機命名和網絡配置。
除了第二步(配置安裝介質)之外,其他的步驟和基於ISO的安裝方法完全一致。和ISO 鏡像文件不同的是,我們在這裏傳入一個 RHEL/CentOS installtion tree的URL地址:
還可以使用“Kickstart URL”指明你的kickstart文件位置,並且使用“Kernel option”傳遞所需的自定義的內核引導參數。
網絡啟動(PXE)
該方法使用一個PXE服務器(Preboot eXecution Environment)安裝Guest OS。PXE安裝需要在你希望創建虛擬機的子網上運行一個PXE服務器,並且Host 系統必須和PXE服務器具備網絡連接。
由virt-manager創建的默認NATed網絡類型與PXE安裝方式是不兼容的,因為連接到NAT的虛擬機不會將自己暴露在外部網絡當中,因此PXE服務器無法看見它,也不能發送所需的數據來執行安裝。以PXE的方式安裝Gesut OS,你必須在Host 系統上使用橋接網絡或者macvtap網絡。例如,在這裏,我們將使用一個基於macvtap的網絡配置並開始安裝。
1. 在創建新虛擬機的向導中選擇 PXE作為安裝方式,並遵循其他步驟來配置ISO安裝過程,除了配置網絡的第五步:
2. 在“Advanced options” 選擇下拉菜單中的 Host device eth0:macvtap,設置 Source mode為Bridge。如果需要的話設置一個自定義MAC地址,然後點擊“Finish”按鈕開始安裝。
導入已存在的磁盤鏡像
顧名思義,這允許你導入一個預安裝和配置的磁盤鏡像,而不是進行手工安裝。磁盤鏡像必須包含一個可引導的操作系統。這通常用於分發預構建的設備鏡像,也用於在脫機模式下,將虛擬機從一個主機轉移到另一個主機。
在準備虛擬機的過程中,導入磁盤鏡像比其他選項快得多。許多Linux發行版都提供預配置的可引導的磁盤鏡像。
NOTE:你可以從以下地址下載Fedora 預配置磁盤鏡像:https://getfedora.org/en/cloud/download/
1. 從virt-manager GUI啟動 “Create a New Virtual Machine” 向導,選擇“Import existing disk image”作為OS安裝方法
2. 提供已存在鏡像的路徑。確保它存放在一個已定義的存儲池中,或者是virt-manager可以訪問的位置。點擊“Forward”按鈕,依照剩余的步驟,這與ISO的安裝過程是一樣的(除了需要虛擬機準備的步驟):
virt-install介紹
virt-install是一個交互式命令行工具,可以用來設置Guest OS並啟動安裝過程。
以root身份執行virt-install命令開始,有許多選項可以作為參數傳遞給virt-install命令,以配置安裝過程滿足虛擬機創建的需求。virt-install是一個腳本友好的命令。它可以很輕松地集成到腳本中以實現自動化虛擬機創建。
使用virt-install命令安裝Windows 7操作系統
在使用virt-install命令開始操作系統安裝之前,需要創建一個虛擬磁盤。要創建虛擬磁盤,可以使用qemu-img命令:
1. 創建所需大小的虛擬磁盤。例如,我們將使用raw磁盤格式創建一個20GB磁盤:
# qemu-img create -f raw -o size=10G /var/lib/libvirt/qemu/win7.img
2. 通過以下命令啟動 virt-install:
virt-install --name Win7 --ram 1024 --disk path=./var/lib/libvirt/qemu/win7.img --vcpus 1 --os-type Windows --os-variant Windows7 --network bridge=virbr0 --graphics vnc,port=5999 --console pty,target_type=serial --cdrom ./win7.iso \
類似地,你可以使用 virt-install -promot 命令進行交互式安裝,它會要求你順序和交互式地輸入上述信息。
3. 就像Virtual Machine Manager一樣,在創建虛擬機之後,你需要使用VM的控制臺並繼續進行實際的客戶機安裝。要使用虛擬機控制臺(virtual machine console),請使用virt-viewer工具:
# virt-viewer <virtual machine > name
自動化虛擬機部署
虛擬機創建和Guest OS安裝是兩個不同的任務。創建VM就像準備新的PC硬件,但是你還需要另外安裝操作系統。
正如你所看到的virt-manager或virt-install,一個VM首先配置了所需的硬件資源,然後你選擇一種支持的安裝方法來安裝OS。安裝實際的操作系統(在虛擬化中也叫做Guest)的方式與物理系統完全相同;操作系統的安裝程序要求提供詳細信息並完成相應的系統配置。
如果將這兩個任務組合在一起,一步完成虛擬機創建(以及完整的OS安裝),會怎麽樣?很顯然,它將有助於更快更自動化地部署虛擬機。
virt-builder和oz這樣的工具可以用來結合這兩個任務,並通過消除手動安裝操作系統的要求,來加速安裝新的虛擬機鏡像。讓我們先來了解virt-builder是什麽,並通過例子來看它是如何工作的。
virt-builder介紹
virt-builder是一個命令行工具,它使用幹凈的,經過數字簽名的操作系統模板創建磁盤鏡像,定制和快速構建新虛擬機。virt-builder可以用於Fedora,Ubuntu,CentOS,Debian和其他發行版的鏡像構建。
這個工具由libguestfs-tools-c軟件包提供,可以通過運行yum install libguestfs-tools-c -y進行安裝。
NOTE:要註意的是,默認情況下virt-builder從http://libguestfs.org/download/builder/軟件源下載操作系統模板,所以要訪問軟件源必須具備互聯網接入。如果沒有互聯網連接,那麽就必須具備一個本地的軟件源。如何搭建一個virt-builder的本地軟件源超出了本書的範圍。盡管如此,你還是可以在virt-builder的man手冊中找到良好的文檔支持。
例如,如果你想創建一個50GB磁盤的CentOS 7.1 虛擬機,那麽使用virt-builder就只需要運行以下的簡單命令:
# cd /var/lib/libvirt/qemu/ ; /usr/bin/virt-builder centos-7.1 --format raw --size 50G [ 1.0] Downloading: http://libguestfs.org/download/builder/centos-7.1.xz [ 2.0] Planning how to build this image [ 2.0] Uncompressing [ 14.0] Resizing (using virt-resize) to expand the disk to 50.0G [ 149.0] Opening the new disk [ 179.0] Setting a random seed [ 180.0] Setting passwords virt-builder: Setting random password of root to Arw83LnDi66eMcmh [ 198.0] Finishing off Output file: centos-7.1.img Output size: 50.0G Output format: raw Total usable space: 48.1G Free space: 47.3G (98%)
然後輸入第二個命令:
#virt-install --name centos --ram 1028 --vcpus=2 --disk path=/var/lib/libvirt/qemu/centos-7.1.img --import
正如你所看到的,它首先下載模板,解壓,調整磁盤鏡像以適應給定的大小,將模板的數據拷貝至鏡像,定制虛擬機(設置一個隨機root密碼),然後完成整個操作。生成的VM沒有用戶賬戶,有隨機的root密碼,並且只占用了操作系統本身所需的最小的磁盤空間,但是如果需要的話,將會增加到50GB。
鏡像文件centos-7.1.img存儲在/var/lib/libvirt/qemu/目錄。
第二個命令 virt-install 只導入鏡像和創建虛擬機。
使用virsh list --all 命令會顯示新創建的虛擬機,# virsh start <vmname> 啟動虛擬機,可以使用輸出中的隨機root密碼登陸系統,你的虛擬機就創建完成了。
在本例中,root密碼是唯一的自定義項,實際上還有許多其他的定制項,例如 安裝軟件,設置主機名,編輯任意文件,創建用戶等。要了解更多關於用戶自定義的內容,請參考virt-builder的man手冊和。
virt-builder在當前用戶的home目錄緩存了已下載的模板。緩存的路徑一般是$XDG_CACHE_HOME/virt-builder/或者$HOME/.cache/virt-builder。
你可以通過運行virt-builder --print-cache命令,打印關於緩存目錄的信息,包括那些緩存的Guest OS的模板。
# virt-builder --print-cache cache directory: /root/.cache/virt-builder centos-6 x86_64 no centos-7.0 x86_64 no centos-7.1 x86_64 cached cirros-0.3.1 x86_64 no debian-6 x86_64 no debian-7 x86_64 no debian-8 x86_64 no fedora-18 x86_64 no fedora-19 x86_64 no fedora-20 x86_64 no fedora-21 x86_64 no fedora-21 aarch64 no fedora-21 armv7l no fedora-21 ppc64 no fedora-21 ppc64le no fedora-22 x86_64 no fedora-22 aarch64 no fedora-22 armv7l no scientificlinux-6 x86_64 no ubuntu-10.04 x86_64 no ubuntu-12.04 x86_64 no ubuntu-14.04 x86_64 no
可以看到centos-7.1的模板被緩存了,下一次創建centos-7.1的Guest OS時,它將使用緩存的模板並更快地創建虛擬機。
通過以下命令你可以刪除緩存清理空間:
#virt-builder --delete-cache
你甚至可以通過執行virt-builder --cache-all-templates命令,下載所有當前地模板到本地緩存。
TIP:如果你遇到任何關於virt-builder的問題,可以使用--verbose顯示詳細的輸出。
雖然virt-builder非常快,但它只適用於Linux Guest OS。由於缺少對Windows 操作系統的支持,於是有了oz。如果你想需要更多的靈活性,請使用oz。
oz介紹
oz是另一個創建Just Enough Operating System (JEOS) Guest OS的工具。它促進了操作系統的自動安裝,最終用戶只需要預先提供很少輸入信息。oz的輸入是一個TDL格式的模板,它描述了創建鏡像的指令:
- 創建鏡像的ISO位置或者URI
- 磁盤大小
- 需要額外安裝的軟件包
- 鏡像創建完畢後需要執行的命令
- 鏡像創建完畢後需要註入的文件
它可以自動安裝各種各樣的OS,包括Windows。在內部,oz對RHEL使用一套預定義的kickstart文件,對Debian使用preseed文件,對Windows系統使用XML文件,以實現自動化安裝。
目前,oz支持i386和x86_64架構。以下是oz支持的操作系統列表:
- Debian: 5, 6, 7
- Fedora Core: 1, 2, 3, 4, 5, 6
- Fedora: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
- FreeBSD: 10
- Mageia: 4
- Mandrake: 8.2, 9.1, 9.2, 10.0, 10.1
- Mandriva: 2005, 2006.0, 2007.0, 2008.0
- OpenSUSE: 10.3, 11.0, 11.1, 11.2, 11.3, 11.4, 12.1, 12.2, 12.3, 13.1
- RHEL 2.1: GOLD, U2, U3, U4, U5, U6
- RHEL 7: Beta, 0
- RHEL/CentOS 3: GOLD, U1, U2, U3, U4, U5, U6, U7, U8, U9
- RHEL/CentOS/Scientific Linux 4: GOLD, U1, U2, U3, U4, U5, U6, U7, U8, U9
- RHEL/OL/CentOS/Scientific Linux{,CERN} 5: GOLD, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11
- RHEL/OL/CentOS/Scientific Linux{,CERN} 6: 0, 1, 2, 3, 4, 5
- RHL: 7.0, 7.1, 7.2, 7.3, 8, 9
- Ubuntu: 5.04, 5.10, 6.06[.1,.2], 6.10, 7.04, 7.10, 8.04[.1,.2,.3,.4], 8.10, 9.04, 9.10, 10.04[.1,.2,.3], 10.10, 11.04, 11.10, 12.04[.1,.2,.3,.4,.5], 12.10, 13.04, 13.10, 14.04[.1], 14.10
- Windows: 2000, XP, 2003, 7, 2008, 2012, 8, 8.1
使用oz創建一臺虛擬機的步驟如下:
1. 使用以下命令安裝oz和libguestfs-tools軟件包
#yum install -y oz libguestfs-tools
2. 獲取你想要使用oz安裝的操作系統的ISO介質。對於Linux Guest OS,網絡上基於HTTP對外開放的installation tree依然可以使用。比如:
- For Fedora 22: http://dl.fedoraproject.org/pub/fedora/linux/releases/22/Server/x86_64/os/
- For CentOS 7: http://mirrors.dcarsat.com.ar/centos/7/os/x86_64/
3. 創建一個TDL文件(Template Definition Language),所有TDL文件支持的屬性可以在GitHub上找到: https://github.com/clalancette/oz/wiki/Oz-template-description-language
4. 執行oz-install命令生成鏡像
#oz-install -u -d3 TDL_FILE_PATH
語法:
- u:在安裝後,執行自定義步驟
- d:打開日誌級別,日誌級別有:
- 0: Errors only (this is the default)
- 1: Errors and warnings
- 2: Errors, warnings, and information
- 3: All messages
- 4: All messages, prepended with the level and classname
以上操作會生成一個libvirt XML文件(包含了鏡像的路徑和其他的參數),你可以用它來快速啟動一臺虛擬機。
virsh define <xml_fike>
virsh start <vm_name>
oz配置文件
/etc/oz/oz.cfg是虛擬機配置的oz文件。它是一個標準的INI格式文件,分為paths
, libvirt
, cache和
icicle四個部分。讓我們來查看一下文件的內容:
------------ [paths] output_dir = /var/lib/libvirt/images data_dir = /var/lib/oz screenshot_dir = /var/lib/oz/screenshots # sshprivkey = /etc/oz/id_rsa-icicle-gen [libvirt] uri = qemu:///system image_type = raw # type = kvm # bridge_name = virbr0 # cpus = 1 # memory = 1024 [cache] original_media = yes modified_media = no jeos = no [icicle] safe_generation = no
以下是你必須要註意的幾個指令:
- output_dir:它描述了鏡像生成以後的保存路徑。默認的路徑是/var/lib/libvirt/images/。如果你想更改鏡像的存儲位置,可以修改這個值。
- bridge_name:虛擬機需要連接到橋接網絡名稱。默認使用virbr0
- memory:使用該配置命令,你可以定義虛擬機應該使用多大的內存
- cpus:該配置命令可以定義虛擬機配置多少數量的cpu
所有其他配置命令的用法可以在文檔中查詢:https://github.com/clalancette/oz/wiki/oz-customize
使用oz創建虛擬機
為了演示,讓我們創建一個以下配置的Windows 7虛擬機:
- 生成的虛擬機有2048 MB內存
- 虛擬機連接到橋接網絡 vswitch
- 磁盤大小為50GB
- 安裝介質為系統本地的ISO文件
要使用oz工具創建具有上述配置的虛擬機,請執行以下步驟:
1. 首先編輯/etc/oz/oz.cfg文件,配置memory和bridge配置命令,然後保存文件並退出:
memory = 2048 bridge_name = vswitch
2. 建立名為win7.tdl的TDL格式的文件,它包含以下的元素,保存至/root目錄下(你可以使用vi或者選擇其他編輯器):
<template> <name>win7jeos</name> <os> <name>Windows</name> <version>7</version> <arch>i386</arch> <install type=‘iso‘> <iso>file:///path/to/isos/win2k.iso</iso> </install> <key>MY_KEY_HERE</key> </os> <disk> <size>50</size> </disk> <description>Minimal Windows7 </description> </template>
- 將file:///path/to/isos/win2k.iso替換為ISO文件的實際路徑
- 將
MY_KEY_HERE替換為一個有效的key
NOTE:Windows需要一個安裝key,所以如果<key>元素缺失,oz將會執行失敗。
3. 執行oz-install:
#oz-install -u -d3 /root/win7.tdl
4. oz-install命令執行成功以後的輸出,類似於:
[. . .] INFO:oz.Guest.windows7:Cleaning up after install Libvirt XML was written to win7jeos_feb_11-2016
5. 使用virsh命令define並start虛擬機:
#virsh define win7jeos_feb_11-2016 #virsh start win7jeos
總結
在本章中,你首先了解了libvirt設置默認網絡和存儲設置,以促進虛擬機創建所需的基礎設施,然後學習了不同的Guest OS安裝方法,其中包括PXE,network,ISO和導入預配置可引導的OS鏡像。我們還學習了如何使用virt-builder和oz快速創建虛擬機。
在下一章中,我們將提供關於虛擬存儲和網絡的更詳細的信息。
<Mastering KVM Virtualization>:第四章 使用libvirt創建你的第一臺虛擬機