1. 程式人生 > ><Mastering KVM Virtualization>:第四章 使用libvirt創建你的第一臺虛擬機

<Mastering KVM Virtualization>:第四章 使用libvirt創建你的第一臺虛擬機

最小 3.1 返回結果 創建虛擬機 tip let rake mas nal

在第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創建新的虛擬機。

流程向導將虛擬機器的創建過程分解為五個步驟:

  1. 選擇安裝方式
  2. 配置安裝介質
  3. 配置CPU和內存
  4. 配置虛擬機存儲
  5. 虛擬機命名和網絡配置

讓我們創建一個虛擬機,並使用本地安裝介質(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創建你的第一臺虛擬機