Linux下kvm虛擬化技術的安裝與使用

Linux下kvm虛擬化技術的安裝與使用

 雲時代的到來,虛擬化的廣泛應用。讓我們重新的科技進行了定義。而當下知名的虛擬化產品有 vmware vsphere ,Hyper-v,xen,kvm。vmware的虛擬化所佔的市場有目共睹,Hyper-V是windows平臺下的虛擬化,而Xen就屬於一個半虛擬化產品。kvm就是我們今天所介紹的對象。

  kvmkernel virtual module的簡寫)kvm是紅帽公司5.4版本後所推出的最新虛擬化技術產品。它和vpc,virtual  box都屬於完全虛擬化產品,而Xen是屬於半虛擬化產品。ps:這裏的完全虛擬化和半虛擬化在後續的blog中會更新也可以查閱網上的資料。

  Xen的完全虛擬化的實現是需要硬件的支持,它的實現是需要cpu是VT技術的支持,在inter公司cpu的這種技術叫做vmx,而在AMD上叫做svm,雖說Xen的完全虛擬化沒有做出什麼成就但是並不影響他在半虛擬化世界的霸主地位。

  kvm其實也借鑑了Xen半虛擬化中的許多成就,雖說kvm是完全虛擬化,但在關鍵的硬盤和網卡上支持半虛擬化virtio,在很大程度上提高了性能,kvm是輕量級虛擬化的代表,也需要硬件vt技術的支持,另外從操作界面上看,xenkvm都是用virt-manager工具,差別不是很大,但不可以在同一臺機器上同時安裝且運行XenKVM;另外kvm在只能運行在紅帽企業版5.4 64位系統上,同時需要關閉selinux。

        KVM是指基於 Linux 內核的虛擬機(Kernel-based Virtual Machine)。增加 KVM 到 Linux 內核是 Linux 發展的一個重要里程碑,這也是第一個整合到 Linux 主線內核的虛擬化技術。

        KVM所使用的方法是通過簡單地加載內核模塊而將 Linux 內核轉換爲一個系統管理程序。這個內核模塊導出了一個名爲 /dev/kvm 的設備,它可以啓用內核的客戶模式(除了傳統的內核模式和用戶模式)。有了 /dev/kvm 設備,VM 使自己的地址空間獨立於內核或運行着的任何其他 VM 的地址空間。設備樹(/dev)中的設備對於所有用戶空間進程來說都是通用的。但是每個打開 /dev/kvm 的進程看到的是不同的映射(爲了支持 VM 間的隔離)。KVM安裝 KVM 之後,您可以在用戶空間啓動客戶操作系統。每個客戶操作系統都是主機操作系統(或系統管理程序)的一個單個進程。

   1、KVM 虛擬機的管理工具

 準確來說,KVM 僅是 Linux 內核中的一個模塊。管理和創建完整的 KVM 虛擬機,需要更多的輔助工具。QEMU-KVM:在 Linux 系統中,首先我們可以用 modprobe 命令加載 KVM 模塊,如果用 RPM 安裝 KVM 軟件包,系統會在啓動時自動加載模塊。加載了模塊後,才能進一步通過其他工具創建虛擬機。但僅有 KVM 模塊是遠遠不夠的,因爲用戶無法直接控制內核模塊去做事情,還必須有一個用戶空間的工具。關於用戶空間的工具,KVM 的開發者選擇了已經成型的開源虛擬化軟件 QEMUQEMU 是一個強大的虛擬化軟件,它可以虛擬不同的 CPU 構架。比如說在 x86  CPU 上虛擬一個 Power  CPU,並利用它編譯出可運行在 Power 上的程序。KVM 使用了 QEMU 的基於 x86 的部分,並稍加改造,形成可控制 KVM 內核模塊的用戶空間工具 QEMU-KVM。所以 Linux 發行版中分爲 內核部分的 KVM 內核模塊和 QEMU-KVM 工具。這就是 KVM  QEMU 的關係。 Libvirtvirshvirt-manager:儘管 QEMU-KVM 工具可以創建和管理 KVM 虛擬機,RedHat  KVM 開發了更多的輔助工具,比如 libvirtlibguestfs 等。原因是 QEMU 工具效率不高,不易於使用。Libvirt 是一套提供了多種語言接口的 API,爲各種虛擬化工具提供一套方便、可靠的編程接口,不僅支持 KVM,而且支持 Xen 等其他虛擬機。使用 libvirt,你只需要通過 libvirt 提供的函數連接到 KVM  Xen 宿主機,便可以用同樣的命令控制不同的虛擬機了。Libvirt 不僅提供了 API,還自帶一套基於文本的管理虛擬機的命令 virsh,你可以通過使用 virsh 命令來使用 libvirt 的全部功能。但最終用戶更渴望的是圖形用戶界面,這就是 virt-manager。他是一套用 python 編寫的虛擬機管理圖形界面,用戶可以通過它直觀地操作不同的虛擬機。Virt-manager 就是利用 libvirt  API 實現的。

2、kvm虛擬機的安裝。

   (一)安裝之前先要開啓cpu的虛擬化功能,如果是物理機直接進入BIOS中就該虛擬化選項開啓,如果是

   vmware worksation 如圖:

wKiom1Uof6LiaQdfAAGLJwhqsLI269.jpg

如果是vSphere 的話也是在設置中找到cpu的設置去開啓虛擬化支持。

  設置好之後檢查虛擬化是否成功支持:

wKiom1UogJbDJGTdAAQeMzerK-4798.jpg

好的成功支持。

  (二)kvm軟件的安裝

#yum install kvm virt-manager libvirt
#service libvirtd start
#chkconfig libvirt on

    kvm爲kvm的模塊軟件包

    virt-manageer 爲kvm的管理包

    libvirt 爲創建虛擬機的工具包

 (三)檢查模塊的正確安裝

    使用lsmod來檢查模塊安裝

#[root@wang ~]# lsmod | grep kvm
#kvm                 333172 0

wKioL1UogxOQURoxAAAaVLgfPFE529.jpg

   (四)檢查KVM是否成功安裝

#virsh -c qemu:///system list

wKiom1UognLwhoyqAAA9H-JNLFs241.jpg

由於我這裏之前創建了一個虛擬機所以這裏就會有顯示,初次安裝橫線下面沒有屬於正常。另外如果報錯的話檢查上面的服務是否正常啓動。

   3,kvm的網絡配置

 一種是default,它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。

另外一種方式是bridge方式,可以使用虛擬機成爲網絡中具有獨立IP的主機。

我這裏是使用第二種網絡配置。

wKiom1Uog2qih620AARPv4JmCxo938.jpg

wKiom1Uog4jjdarrAADGUex0WV4272.jpg

#[root@wang network-scripts]# vi ifcfg-br0
#DEVICE=br0
#TYPE=Bridge
#BOOTRPOTO=static
#IPADDR=192.168.7.2
#NETMASK=255.255.255.0
#ONBOOT=yes         
#[root@wang network-scripts]# vi ifcfg-eth0
#DEVICE=eth0
#HWADDR=C0:3F:D5:3A:FD:C4
#TYPE=Ethernet
#UUID=ea494507-eb1f-45a7-9582-64671dc60298
#ONBOOT=yes
#NM_CONTROLLED=yes
#BOOTPROTO=none
#IPADDR=192.168.7.2
#PREFIX=16
#BRIDGE=br0

以上爲kvm的配置下來開始虛擬機的安裝。

   virt-manager 是基於 libvirt 的圖像化虛擬機管理軟件,請注意不同的發行版上 virt-manager 的版本可能不同,圖形界面和操作方法也可能不同。本文使用了紅帽6企業版的 virt-manager-0.8.4-8。創建KVM虛擬機最簡單的方法是通過virt-manager接口。從控制檯窗口啓動這個工具,從root身份輸入virt-manager命令,點擊file菜單的"新建"選項virt-manager接口界面。

 

wKioL1Uohb-wbX8vAAHJHxfTL1g760.jpg

wKiom1UohHPRTtz8AAHq2QE5LAU644.jpg

wKioL1Uohb-gFmcEAAFrrY0QuWo485.jpg

wKiom1UohHOg6S9DAAG7KNQnjIA130.jpg

wKioL1UohcDy4JLZAAHWZ73R_Ms215.jpg

wKiom1UohHTQrCQGAAGD8gEj4kw171.jpg


下來就是系統的安裝就不多做介紹!

 4、使用virsh來管理kvm

Virsh的管理比較複雜。但是另一種可選方式virt-manager的缺陷還很明顯,virt-manager需要在系統內運行,這會浪費資源併爲別有目的的人提供額外的進攻點。virt-manager的另一大缺點是需要通過圖形工作站運行遠程接入的方式,才能對服務器上的虛擬機進行管理。而virsh則可以通過命令行執行各種各樣的管理任務。要學習virsh很困難,因爲有許多命令。virsh通過主命令和子命令管理每個虛擬機功能。要查看所有命令,輸入virsh help。你可能發現大量命令,不過每個命令都有幫助指南,只需要輸入virsh help。例如使用virsh help uri,就可以看到所有關於virsh uri命令的幫助。下面是virsh命令實例:

 

創建一個名稱是myWin7windows 7虛擬機,

 

#[root@wang ~]# yuminstall virt-viewer
#[root@wang ~]# virt-install --name mywin7--ram 1024  --file=/var/lib/libvirt/images/mywin7.img --file-size=15  --vnc--cdrom=/iso/win7_32.iso --network network:br0

常用參數介紹:

-n NAME,   --name=NAME            指定機器名字

-r MEMORY, --ram=MEMORY           指定內存大小

--vcpus=VCPUS                     指定虛擬機的 CPU 數量

 -f DISKFILE, --file=DISKFILE             虛擬機的虛擬磁盤,磁盤可以是文件、磁盤分區或者是lvm。此選項用來指定虛擬磁盤的路徑

-s DISKSIZE, --file-size=DISKSIZE         指定虛擬磁盤的大小,單位是 G;如果—file 指定的文件路徑不存在,並且—nonsparse 選項沒有指定,對這個文件不會預先分配存儲空間。

-w NETWORK, --network=NETWORK     NETWORK 有三種選擇,bridge:BRIDGE,network:NAME user

-c CDROM, --cdrom=CDROM           指定用於全虛擬化Guest 的虛擬 CD,可以是一個 ISO 鏡像文件,也可以是一個 CDROM 設備,也可以是一個通過 URL 可以訪問和獲取到的 boot.iso 鏡像。如果將其忽略,那麼在—location 選項中必須指定 kernel initrd的位置,也可以使用—pxe 參數通過網絡進行安裝。

--pxe     使用 PXE boot 協議來加載初始化的ramdisk kernel,以便於啓動 Guset 段的安裝進進程。如果沒有指定—pxe,那麼就必須指定—cdrom --location 其中一個。

-l LOCATION, --location=LOCATION   指定 kernel initrd 的安裝源,這對於半虛擬化是必須的。對於全虛擬化,要麼使用--location 要麼使用--cdrom 來指定 ISO CDROM 鏡像。

其必須符合下面的四種格式:

DIRECTORY

nfs:host:/path

http://host/path

ftp://host/path

-xEXTRA, --extra-args=EXTRA      用來給加載的 kernel initrd 提供額外的內核命令行參數。

(跟詳細的參數及使用方法詳見 manvirt-install)

命令執行完之後進入kvm的管理界面就會有win7了

wKiom1UohfeRbr14AAQuf5wf_eQ477.jpg

 下來win7 的安裝系統就不多說了!

至此kvm的安裝與使用就介紹這麼多,有不足的請多多指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章