1. 程式人生 > >雲計算之路-虛擬化環境搭建及虛擬機創建

雲計算之路-虛擬化環境搭建及虛擬機創建

home 應用虛擬化 鍵盤 參考 紅色 翻譯 靈活性 不能 ont

轉載自 靈躍雲 :原文鏈接

1. 前言

在計算機技術中,虛擬化(Virtualization)是一種資源管理技術,它將計算機相關的各種資源(CPU、內存、磁盤、網絡適配器等)進行抽象、轉換後重新分配使用,大大增加了使用的靈活性。虛擬化有很多類別,包括硬件虛擬化、操作系統級虛擬化、應用虛擬化、服務虛擬化等。本文中所討論的虛擬化環境指硬件虛擬化環境,即通過使用虛擬機監視器(Virtual Machine Monitor),隱藏底層硬件信息,虛擬出通用的計算環境(即虛擬機)。虛擬機中運行的操作系統稱為客戶機操作系統(Guest OS),虛擬機監視器(Virtual Machine Monitor)所在的操作系統成為宿主機操作系統(Host OS)。

當前硬件虛擬化技術有很多實現,包括VMware ESXi、XEN、QEMU/KVM、Microsoft Hyper-V、VirtualBox等。其中,QEMU/KVM由於KVM代碼簡潔,復用了Linux Kernel中的CPU和內存調度等功能,進入了Linux Kernel主幹,因此最受歡迎。在筆者撰寫此文時,AWS剛剛宣布放棄XEN,改用KVM作為其虛擬化引擎。本文在此也主要介紹QEMU/KVM虛擬化環境的搭建。

QEMU(Quick Emulator)是最早由Fabrice Bellard所編寫的硬件虛擬化軟件,通過對指令進行動態翻譯來實現虛擬化;同時,還支持模擬多種設備。盡管QEMU的動態指令翻譯已經做得很好了,然而還是不可避免的存在性能損失,而KVM和硬件輔助虛擬化技術解決了該問題。KVM(Kernel-based Virtual Machine)是Linux Kernel中的一個模塊,它借助CPU的虛擬化特性,實現客戶機和宿主機運行狀態的切換。有了KVM,QEMU只需要負責模擬其他硬件,CPU和內存的虛擬化借助KVM即可完成,大大提高了虛擬化的性能。

2. 虛擬化環境安裝

2.1 宿主機操作系統安裝

靈躍桌面雲選用CentOS 7 X86_64位版本作為宿主機操作系統進行安裝和部署。從下載其發行版的ISO文件(初學者建議下載Everything ISO,其中包含了所需的所有軟件包,省去了安裝時聯網下載過程)。宿主機操作系統建議安裝在硬件(PC或者服務器)之上,若沒有硬件環境,可在VMware Workstation中進行安裝。在安裝過程中“軟件選擇”時,請勾選“虛擬化主機”中的“虛擬化平臺”、“GNOME桌面”中的“GNOME應用程序”與“傳統X Windows系統的兼容性”,如圖所示:

技術分享圖片

圖 1 宿主機操作系統安裝(1)

技術分享圖片

圖 2 宿主機操作系統安裝(2)

若在安裝過程中沒有創建新的系統用戶,則在首次進入GNOME圖形界面後會要求創建,待創建用戶之後,即可開始使用。

2.1.1 QEMU/KVM安裝

由於KVM是Linux Kernel的一個模塊,因此在系統安裝好後,KVM也安裝完成;同時,對於KVM的版本號,由於KVM隨著Linux Kernel一起發布,所謂KVM的版本就是Linux Kernel的版本。因為前文在系統安裝時選擇了“虛擬化平臺”選項,因此QEMU也已經自動被安裝。若讀者需要在已有的CentOS系統中安裝QEMU,靈躍桌面雲建議使用以下命令手動安裝(其他不同發行版的Linux操作系統,安裝命令會有所不同):

	[lingyuecloud@lingyuecloud ~]$ sudo yum install qemu-kvm
	要檢驗是否已經安裝QEMU,可以使用rpm命令查詢,如下圖所示:
	[lingyuecloud@lingyuecloud ~]$ sudo rpm -qa | grep qemu 
	ipxe-roms-qemu-20170123-1.git4e85b27.el7.noarch 
	libvirt-daemon-driver-qemu-3.2.0-14.el7.x86_64 
	qemu-img-1.5.3-141.el7.x86_64 
	qemu-kvm-1.5.3-141.el7.x86_64 
	qemu-kvm-common-1.5.3-141.el7.x86_64 
	qemu-guest-agent-2.8.0-2.el7.x86_64

2.1.2 virt-viewer安裝

在啟動虛擬機之後,可以使用遠程桌面連接軟件來交付虛擬機桌面。由於QEMU支持基於VNC和Spice的交付方式,這裏使用支持上述兩種交付模式的virt-viewer包中的remote-viewer程序作為連接的客戶端,使用如下命令安裝virt-viewer即可。

	[lingyuecloud@lingyuecloud ~]$ sudo yum install virt-viewer

3. 創建虛擬機

3.1 鏡像準備

靈躍桌面雲建議初學者使用現有鏡像來創建虛擬機,待熟悉之後再手動制作鏡像。現有鏡像可以從OpenStack官方網站上下載,推薦下載CirrOS鏡像,其是體積非常小的Linux鏡像,非常適合用於測試場景。

3.2 啟動虛擬機

3.2.1 使用QEMU命令啟動虛擬機

通過QEMU啟動虛擬機的命令如下:

	[lingyuecloud@lingyuecloud ~]$ /usr/libexec/qemu-kvm -hda cirros-0.3.5-x86_64-disk.img -m 256 -boot c -vnc :0
	Could not access KVM kernel module: No
	such file or directory
	failed to initialize KVM: No such file ordirectory
	Back to tcg accelerator.
	其中,後面三行打印日誌是說當前環境下的KVM支持未啟用,將采用指令翻譯模式運行。針對該問題,若要啟用KVM支持,則需要結合宿主主機操作系統所在的環境進行考慮:(1)若宿主機操作系統直接安裝在物理硬件之上,則需要在BIOS中設置開啟虛擬化支持;(2)若宿主機操作系統安裝在VMware Workstation中,需要在VMware環境設置的“處理器設置”選項中勾選“虛擬化 Intel VT-x/EPT 或 AMD-V/RVI(V)”選項。
	啟動命令中各參數含義如下:
	?  “/usr/libexec/qemu-kvm”:QEMU二進制可執行文件完整路徑;
	?  “-hdacirros-0.3.5-x86_64-disk.img”:使用下載的cirros鏡像作為第1塊虛擬硬盤;
	?  “-m 256”:內存設置為256MB;
	?  “-boot c”:設置為首先從硬盤啟動;
	?  “-vnc :0”:在端口0(連接的時候使用5900)上開啟vnc服務;
虛擬機運行之後,即可使用remote-viewer進行連接。在本地Linux環境下在shell中運行“remote-viewer”命令,然後輸入連接地址“vnc://127.0.0.1:5900”即可連接到虛擬機,如圖所示:
技術分享圖片

圖 3 使用remote-viewer連接虛擬機(1)

技術分享圖片

圖 4 使用remote-viewer連接虛擬機(2)

若要關閉虛擬機,可在虛擬機窗口中執行關機命令,或在執行QEMU命令的Shell窗口運行“Ctrl+C”命令(註意:此操作結束QEMU命令相當於對PC進行斷電操作,會丟失Guest OS中未及時保存的數據)即可。

3.2.2 使用libvirt啟動虛擬機

libvirt是為了更方便地管理虛擬化平臺而設計的開源應用程序接口、守護進程和管理工具,不僅提供了對虛擬化客戶機的管理,也提供了對虛擬化網絡和存儲的管理。libvirt支持多種底層虛擬化技術,屏蔽了底層細節,使得對虛擬機的管理更加方便。

默認情況下,CentOS並未安裝libvirt,讀者可使用如下命令進行安裝:

[lingyuecloud@lingyuecloud ~]$ sudo yum install libvirt

安裝完成後,可使用如下命令查看libvirt版本。本文撰寫時,CentOS官方libvirt已經更新到3.2.0版本。

[lingyuecloud@lingyuecloud ~]$ virsh --version

3.2.0

libvirt通過xml文件來對虛擬機的配置進行管理,在啟動虛擬機之前,我們首先需要創建一個xml文件,內容如下所示。其中紅色的註釋,簡單解釋了xml各個字段的含義。

<domain type=‘kvm‘> <!--這裏的’kvm’表示使用kvm加速,也可以填’qemu’,則虛擬機是qemu全模擬的-->

<name>lingyuecloud</name> <!--虛擬機名字,用戶自己定義-->

<os>

<type arch=‘x86_64‘ machine=‘pc‘>hvm</type> <!--虛擬機架構以及類型,如果要創建32位虛擬機,這裏可以將x86_64改成i686 -->

<boot dev=‘hd‘/> <!--此項表示首先從硬盤啟動,如果需要首先從CDROM啟動,用戶可以在前面加上<boot dev=’cdrom’> -->

</os>

<features> <!--定義一些需要傳給虛擬機的VCPU的特性-->

<acpi/>

<apic/>

</features>

<memory unit=‘KiB‘>262144</memory> <!--虛擬機內存規格-->

<vcpu>1</vcpu> <!--虛擬機VCPU數量-->

<clock offset=‘utc‘> <!--設置虛擬機的時鐘,不同時鐘之間的區別可以參考內核文檔Timekeeping Virtualization for X86-Based Architectures -->

<timer name=‘pit‘ tickpolicy=‘delay‘/>

<timer name=‘rtc‘ tickpolicy=‘catchup‘/>

<timer name=‘hpet‘ present=‘no‘/>

</clock>

<on_poweroff>destroy</on_poweroff> <!--設置虛擬機內部poweroff的時候,libvirt的動作為destroy -->

<on_reboot>restart</on_reboot> <!--設置虛擬機內部reboot的時候,libvirt的動作為restart -->

<on_crash>destroy</on_crash> <!--設置虛擬機內部crash的時候,libvirt的動作為destroy;此項對debug很有用,debug時設置此項為pause,可以在虛擬機內部crash的時候,libvirt使得虛擬機暫停,此時開發人員可以將虛擬機內存dump出來進行分析 -->

<devices> <!-- device標簽下都是定義要呈現給虛擬機的各種設備-->

<emulator>/usr/libexec/qemu-kvm</emulator> <!-- QEMU二進制文件的完整路徑-->

<disk type=‘file‘ device=‘disk‘> <!--定義一塊磁盤-->

<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/> <!--磁盤類型以及cache設置-->

<source file=‘/home/lingyuecloud/cirros-0.3.5-x86_64-disk.img‘/>

<target dev=‘vda‘ bus=‘virtio‘/> <!-- vda表示硬盤設備名,或者說盤符,每個硬盤一個,不能重復,後續依次為vdb、vdc等,bus表示設備類型,如果是virtio,系統必須有virtio驅動;若系統沒有virtio驅動則可以改成ide類型;-->

</disk>

<controller type=‘ide‘ index=‘0‘/>

<controller type=‘usb‘ index=‘0‘/>

<input type=‘tablet‘ bus=‘usb‘/> <!--鍵盤,此處為USB類型-->

<input type=‘mouse‘ bus=‘ps2‘/> <!--鼠標,此處為PS2類型-->

<graphics type=‘vnc‘ port=‘-1‘ autoport=‘yes‘ listen=‘0.0.0.0‘ keymap=‘en-us‘/> <!-- vnc設置,通常port設置為-1,libvirt會自動分配port -->

<video> <!--顯示設置-->

<model type=‘cirrus‘ vram=‘32768‘ heads=‘1‘/>

</video>

</devices>

</domain>

利用libvirt xml文件,通過virsh命令即可實現對虛擬機的生命周期管理。其中,virsh有兩種使用方式:(1)在virsh命令後直接跟相關子命令和參數;(2)在輸入virsh命令並敲擊回車進入virsh環境後,再輸入相關子命令和參數。本文使用virsh後緊跟子命令的用法。

利用virsh創建虛擬機的步驟包括define和start兩個步驟。(1)依據創建的虛擬機配置文件,使用“virsh define 虛擬機配置文件.xml”命令定義後的該虛擬機就在libvirt的管理之下了;即使libvirt服務重啟或者宿主機系統重啟,define過的虛擬機依然存在。define之後虛擬機不會啟動;使用“virsh list”命令查看虛擬機列表時,該虛擬機默認不顯示,需要加“--all”參數。(2)虛擬機define之後,使用“virsh start 虛擬機名”命令來啟動,上述過程如下所示:

[lingyuecloud@lingyuecloud ~]$ virsh define cirros-0.3.5-x86_64-disk.xml

定義域lingyuecloud(從cirros-0.3.5-x86_64-disk.xml)

[lingyuecloud@lingyuecloud ~]$ virsh list

Id 名稱 狀態

----------------------------------------------------

[lingyuecloud@lingyuecloud ~]$ virsh list --all

Id 名稱 狀態

----------------------------------------------------

- lingyuecloud 關閉

[lingyuecloud@lingyuecloud ~]$ virsh start lingyuecloud

域lingyuecloud已開始

[lingyuecloud@lingyuecloud ~]$ virsh list

Id 名稱 狀態

----------------------------------------------------

1 lingyuecloud running

[lingyuecloud@lingyuecloud ~]$ virsh domdisplay lingyuecloud

vnc://localhost:1

之後,可使用“virsh domdisplay”命令來查看虛擬機vnc的連接端口,根據返回的端口號,可使用remote-viewer連接地址“vnc://127.0.0.1:5901”即可連接到該虛擬機。

若要關閉虛擬機,可執行“virsh shutdown 虛擬機名”命令(發送關機信號到Guest OS中)或者“virsh destroy 虛擬機名”命令(強制關閉虛擬機,可能造成數據丟失)。其他libvirt命令讀者可執行“virsh help”進行查閱。

3.2.3 使用virt-manager啟動虛擬機

virt-manager是一個圖形化的虛擬機管理工具,相比命令行,virt-manager操作更加直觀且不容易出錯。CentOS系統默認沒有安裝virt-manager,用戶需要使用以下命令來安裝:

[lingyuecloud@lingyuecloud ~]$ sudo yum install virt-manager

安裝完成後,在shell中運行命令“sudo virt-manager”來打開virt-manager的圖形界面,然後點擊“文件”->“新建虛擬機”即可創建新的虛擬機。創建之前,先將下載的CirrOS鏡像復制一份,創建過程中,選擇“導入現有磁盤印象(E)”,然後瀏覽選擇到復制的CirrOS鏡像,其他選項默認即可,如圖所示:

技術分享圖片

圖 5 新建虛擬機(1)

技術分享圖片

圖 6 新建虛擬機(2)

虛擬機運行後,virt-manager會自動連接到虛擬機的控制臺,用戶可以看到虛擬機啟動過程並進行操作。在控制臺界面上,點擊“查看”->“詳情”還可查看和編輯虛擬機的詳細配置(部分配置需要關機後才能修改、部分配置編輯後需要重啟生效),如圖所示:

技術分享圖片

圖 7 編輯虛擬機配置

4. 總結

本文介紹了簡易的虛擬化環境的安裝搭建以及虛擬機的創建過程。總體上講,不論是QEMU命令操作、libvirt命令操作還是利用virt-manager圖形化管理工具,對虛擬機的管理都略顯復雜,尤其涉及到更多功能操作時如網絡虛擬化、存儲虛擬化、虛擬機連接認證等更是難以管理。針對上述問題,靈躍桌面雲建議采用雲計算平臺管理工具進行統一管理,其更加高效、簡潔,相關討論將持續更新,敬請關註。

雲計算之路-虛擬化環境搭建及虛擬機創建