完全虛擬化軟件kvm的應用

一、KVM虛擬機簡介

    Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux2.6.20之後繼承Linux的主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM目前已成爲學術界的VMM之一。

    Kvm僅僅是一個linux內核的模塊,當在linux中安裝了kvm後,linux會變成了hypervisor,即VMM,進行CPU和內存的虛擬管理,而qemu工具,實現虛擬機的創建管理,monitor管理各個IO設備,redhat在購買掉kvm後,專門定製了適合於redhat系統的qemu-kvm管理工具。

   

    Kvm只能運行在支持硬件虛擬化的CPU上,並且只支持64bits系統。kvm屬於完全虛擬化的實現軟件。


二、KVM架構


   wKioL1OBfCSTxjmyAAFkCAzsuSc543.jpg

   

  如上kvm架構圖
  安裝了kvm後的內核變得很詭異,其模式分爲了三部分:內核模式,用戶模式,來賓模式
  
  VCPU:用線程模擬實現的CPU
  
  KVM的主要兩類組件:
  1、/dev/kvm:管理虛擬機的設備文件,用戶空間的程序可通過調用其ioctl()來完成虛擬機的創建啓動等管理工作,它是一個字符設備;其主要完成的操作包括:
    創建虛擬機;
    爲虛擬機分配內存;
    讀、寫VCPU的寄存器;
    向VCPU注入中斷請求;
    運行VCPU;
  2、qemu進程:工作於用戶空間的組件,用於方針PC機的I/0類硬件設備。


三、KVM內存管理

  KVM繼承了Linux系統管理內存的諸多特性,比如分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的 的支持能夠讓虛擬機高效訪問更大的內存空間等。

  KVM基於Intel的EPT(Extended Page Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的佔用率,並提高較好的吞吐量。

  此外,KVM還藉助於KSM(Kernel Same-page Merging)這個內核特性實現了內存頁面恭喜那個。KSM 通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,並將這些內存合併爲一個被各種相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新爲其提供一個新的頁面副本。實踐中,運行於同一臺物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很大的,比如共享庫,內核或其他內存對象等都有可能表現爲相同的內存頁,因此KSM技術可以降低內存佔用而提高整體性能。


四、KVM的管理工具

    wKiom1OBi3yhaw18AAETKNqXG8U886.jpg

      下面我們重點講解qemu-kvm工具


五、使用qemu-kvm管理KVM虛擬機

  Qemu是一個廣泛使用的開源計算機仿真器和虛擬機。當作爲仿真器時,可以在一種架構(如PC機)下運行另一種架構如(ARM)的操作系統和程序。而通過動態轉換,其可以獲得很高的運行效率,當作爲一個虛擬機時,qemu可以通過直接使用真機的系統資源,讓虛擬系統能夠獲得接近於物理機的性能表現。qemu支持xen或者kvm模式下的虛擬化。當用kvm時,qemu可以虛擬x86、服務器和嵌入式powerpc,以及s390的系統


  Qemu當運行與主機架構相同的目標架構時可以使用KVM。例如當在一個x86兼容處理器上運行qemu-system-x86時,可以利用kvm加速——爲宿主機和客戶機提供更好的性能


  Qemu的組成部分:

    處理器模擬器(x86、PowerPC和Sparc)

    仿真設備(顯卡、網卡、硬盤、鼠標等)

    用於將仿真設備連接至主機設備(真實設備)的通用設備;

    模擬機的描述信息;

    調試器;

    與模擬器交互的用戶接口;


     

六、使用qemu-kvm安裝Guest虛擬機

    qemu-kvm類似於基於libvirt的工具如virt-manager和virt-install。直接使用qemu-kvm命令同樣可以完成虛擬機的創建於管理


    qemu-kvm命令

    在RHEL6中,qemu-kvm位於/usr/libexec目錄中。由於此目錄不屬於PATH環境變量,故無法直接使用,這樣也組織了可以直接使用qemu作爲創建並管理虛擬機。如果想使用qemu虛擬機,可以通過將?usr/libexe/qemu-kvm鏈接爲/usr/bin/qemu實現 

    #ln -sv /usr/lib/exec/qemu-kvm /usr/bin/qemu-kvm


    qemu-kvm命令格式

    qemu-kvm [options] [disk_image] ,其選項非常多,不過大致可以分爲如下幾類


    標準選項;

    USB選項;

    顯示選項;

    i386平臺專用選項;

    網絡選項;

    字符設備選項;

    藍牙相關選項;

    Linux系統引導專用選項;

    調試/專家模式選項;

    PowerPC專用選項;

    Sparc32專用選項;


   1、qemu-kvm的標準選項

      

   qemu-kvm的標準選項主要涉及指定主機類型、CPU模式、NUMA、軟驅設備、光驅設備及硬件設備等。
 -name name:設定虛擬機名稱;
 -M machine:指定要模擬的主機類型,如Standard PC、ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”獲取所支持的所有類型;
 -m megs:設定虛擬機的RAM大小;
 -cpu model:設定CPU模型,如coreduo、qemu64等,可以使用“qemu-kvm -cpu ?”獲取所支持的所有模型;
 -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:設定模擬的SMP架構中CPU的個數等、每個CPU的核心數及CPU的socket數目等;PC機上最多可以模擬255顆CPU;maxcpus用於指定熱插入的CPU個數上限;
   -numa opts:指定模擬多節點的numa設備;
   -fda file
   -fdb file:使用指定文件(file)作爲軟盤鏡像,file爲/dev/fd0表示使用物理軟驅;
   -hda file
   -hdb file
   -hdc file
   -hdd file:使用指定file作爲硬盤鏡像;
   -cdrom file:使用指定file作爲CD-ROM鏡像,需要注意的是-cdrom和-hdc不能同時使用;將file指定爲/dev/cdrom可以直接使用物理光驅;
 -drive option[,option[,option[,...]]]:定義一個硬盤設備;可用子選項有很多。
    file=/path/to/somefile:硬件映像文件路徑;
    if=interface:指定硬盤設備所連接的接口類型,即控制器類型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
    index=index:設定同一種控制器類型中不同設備的索引號,即標識號;
    media=media:定義介質類型爲硬盤(disk)還是光盤(cdrom);
    snapshot=snapshot:指定當前硬盤設備是否支持快照功能:on或off;
    cache=cache:定義如何使用物理機緩存來訪問塊數據,其可用值有none、writeback、unsafe和writethrough四個;
    format=format:指定映像文件的格式,具體格式可參見qemu-img命令;
 -boot [order=drives][,once=drives][,menu=on|off]:定義啓動設備的引導次序,每種設備使用一個字符表示;不同的架構所支持的設備及其表示字符不盡相同,在x86 PC架構上,a、b表示軟驅、c表示第一塊硬盤,d表示第一個光驅設備,n-p表示網絡適配器;默認爲硬盤設備;
       例如:-boot order=dc,once=d

    2、qemu-kvm的顯示選項

    

     顯示選項用於定義虛擬機啓動後的顯示接口相關類型及屬性等。
 
 -nographic:默認情況下,qemu使用SDL來顯示VGA輸出;而此選項用於禁止圖形接口,此時,qemu類似一個簡單的命令行程序,其仿真串口設備將被重定向到控制檯;
 -curses:禁止圖形接口,並使用curses/ncurses作爲交互接口;
 -alt-grab:使用Ctrl+Alt+Shift組合鍵釋放鼠標;
 -ctrl-grab:使用右Ctrl鍵釋放鼠標;
 -sdl:啓用SDL;
 -spice option[,option[,...]]:啓用spice遠程桌面協議;其有許多子選項,具體請參照qemu-kvm的手冊;
 -vga type:指定要仿真的VGA接口類型,常見類型有:
    cirrus:Cirrus Logic GD5446顯示卡;
    std:帶有Bochs VBI擴展的標準VGA顯示卡;
    vmware:VMWare SVGA-II兼容的顯示適配器;
    qxl:QXL半虛擬化顯示卡;與VGA兼容;在Guest中安裝qxl驅動後能以很好的方式工作,在使用spice協議時推薦使用此類型;
    none:禁用VGA卡;
 -vnc display[,option[,option[,...]]]:默認情況下,qemu使用SDL顯示VGA輸出;使用-vnc選項,可以讓qemu監聽在VNC上,並將VGA輸出重定向至VNC會話;使用此選項時,必須使用-k選項指定鍵盤佈局類型;其有許多子選項,具體請參照qemu-kvm的手冊;

   

    3、i386平臺專用選項

     

 -no-acpi:禁用ACPI功能,GuestOS與ACPI出現兼容問題時使用此選項;
 -balloon none:禁用balloon設備;
 -balloon virtio[,addr=addr]:啓用virtio balloon設備;

    4、網絡屬性相關選項

        

   網絡屬性相關選項用於定義網絡設備接口類型及其相關的各屬性等信息。這裏只介紹nic、tap和user三種類型網絡接口的屬性,其它類型請參照qemu-kvm手冊。
 
  -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:創建一個新的網卡設備並連接至vlan n中;PC架構上默認的NIC爲e1000,macaddr用於爲其指定MAC地址,name用於指定一個在監控時顯示的網上設備名稱;emu可以模擬多個類型的網卡設備,如virtio、i82551、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不過,不同平臺架構上,其支持的類型可能只包含前述列表的一部分,可以使用“qemu-kvm -net nic,model=?”來獲取當前平臺支持的類型;
  -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:通過物理機的TAP網絡接口連接至vlan n中,使用script=file指定的腳本(默認爲/etc/qemu-ifup)來配置當前網絡接口,並使用downscript=file指定的腳本(默認爲/etc/qemu-ifdown)來撤消接口配置;使用script=no和downscript=no可分別用來禁止執行腳本;
  -net user[,option][,option][,...]:在用戶模式配置網絡棧,其不依賴於管理權限;有效選項有:
    vlan=n:連接至vlan n,默認n=0;
    name=name:指定接口的顯示名稱,常用於監控模式中;
    net=addr[/mask]:設定GuestOS可見的IP網絡,掩碼可選,默認爲10.0.2.0/8;
    host=addr:指定GuestOS中看到的物理機的IP地址,默認爲指定網絡中的第二個,即x.x.x.2;
    dhcpstart=addr:指定DHCP服務地址池中16個地址的起始IP,默認爲第16個至第31個,即x.x.x.16-x.x.x.31;
    dns=addr:指定GuestOS可見的dns服務器地址;默認爲GuestOS網絡中的第三個地址,即x.x.x.3;
    tftp=dir:激活內置的tftp服務器,並使用指定的dir作爲tftp服務器的默認根目錄;
    bootfile=file:BOOTP文件名稱,用於實現網絡引導GuestOS;如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0

  

 七、使用qemu-kvm安裝ubuntu虛擬機  


   1. 使用vmware虛擬機,需要確保硬件輔助實現CPU完全虛擬化

    wKioL1OBkAajgLZxAAHwQgKRJIc681.jpg

    

    2、查看hypervisor是否支持虛擬化

     

    # grep -Ei  "vmx|svm" /proc/cpuinfo --color=auto
    其中vmx代表intel的cpu支持虛擬化,svm代表AMD的cpu支持虛擬化

    

    3、查看當前系統中關於kvm模塊

     

     # grep -i "kvm" /boot/config-2.6.32-431.el6.x86_64 
         CONFIG_KVM_CLOCK=y
         CONFIG_KVM_GUEST=y
         CONFIG_HAVE_KVM=y
         CONFIG_HAVE_KVM_IRQCHIP=y
         CONFIG_HAVE_KVM_EVENTFD=y
         CONFIG_KVM_APIC_ARCHITECTURE=y
         CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
         CONFIG_KVM=m
         CONFIG_KVM_INTEL=m
         CONFIG_KVM_AMD=m

    4、裝載kvm和kvm_intal模塊 

      

    # modprobe kvm
    # modprobe kvm_intel  
    # lsmod | grep kvm
      kvm_intel              54285  0 
      kvm                   333172  1 kvm_intel

   5、安裝qemu-kvm qemu-kvm-tools虛擬機管理工具

     

    # yum -y isntall qemu-kvm qemu-kvm-tools

   6、配置qemu-kvm程序的環境變量

    

   # ln -sv /usr/libexec/qemu-kvm /usr/sbin

   7、創建磁盤鏡像文件 

    

   # mkdir /images/vm1 -pv
   # qemu-img create -f qcow2 -o size=100G /images/vm1/ubuntu.qcow2
     
   qemu-img命令解析
   
   qemu-img是qemu用來實現磁盤映像管理的工具組件,其有很多子命令,分別用於實現不同的管理功能,而每一個子命令也都有一系列不同的選項。語法格式爲“qemu-img subcommand [options]”,其支持的子命令如下
        create:創建一個新的磁盤映像文件
        check:檢查磁盤映像文件中的錯誤
        convert:轉換磁盤映像的格式
        info:顯示指定磁盤映像的信息
        snapshot:管理磁盤映像的快照
        commit:提交磁盤映像的所有改變
        rbase:基於某磁盤映像創建新的映像文件
        resize:增大或縮減磁盤映像文件的大小

   8、獲得ubuntu鏡像文件存放於/root目錄

    

   # ls /root
   
    ubuntu-12.04.1-desktop-i386.iso

   9、安裝vnc服務器端與客戶端

    

   # yum -y install tigervnc-server tigervnc

   10、創建橋設備

     

   # brctl  addbr br0
   # ifconfig  eth0 0 up 
   # brctl   addif  br0 eth0
   # ifconfig br0 172.16.13.2/16 up 
   # route add default gw 172.16.0.1 
   # brctl stp br0 on

   11、創建/etc/qemu-ifup腳本

    

   #vim /etc/qemu-ifup 內容如下
    #!/bin/bash
    #
    switch=br0
     if [ -n "$1" ];then
        ifconfig $1 up
        sleep 0.5s
        brctl  addif $switch $1
        exit 0
     else
        echo "Error: no specifed interface"
        exit1
     fi

   12、創建虛擬機

    

  # qemu-kvm -name "ubuntu" -m 768 -smp 4 -drive file=/images/vm1/ubuntu.qcow2,if=ide,index=0,media=disk,format=qcow2 -drive file=/root/ubuntu-12.04.1-desktop-i386.iso,media=cdrom,index=1 -boot order=dc -net nic -net tap,name=vnet0,downscript=no
  
  VNC server running on `::1:5900'

   13、通過vnc客戶端連接至虛擬機安裝

   

   # vncviewer :5900

    wKioL1OBlUqwWZFPAABWXTM6p04839.jpg

    wKioL1OBlfTxxQRLAAHYbQS8CjA010.jpg 接下來就是系統安裝的過程


 通過使用qemu-kvm工具創建虛擬機實例成功!


  

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