KVM虛擬化

簡介:

    kvm全稱Kernel-based  Virtual Machine, 其實kvm只是一個內核模塊,提供虛擬cpu和內存管理的模塊,至於其它的設備是由qemu模擬的,如網卡,顯卡,磁盤等。後來redhat聯合IBM以及Linux社區創造了libvirt,模擬的設備性能要比qemu的好很多,並提供了一系列的管理工具和api,整個集成了kvm虛擬化的解決方案。Linux(redhat系)裝載kvm模塊後,搖身一變成爲了VM Monitor,也稱爲Hypervisor,部署使用簡單,需要硬件支持虛擬化。

作用:

                提高物理服務器的資源利用率。(較少在硬件上的投入)

                 可以批量部署

                 實現實時快照技術

                 支持克隆技術

                 可以實現虛擬機的離線遷移與動態遷移。(提高IT部署的靈活性)

                 可以資源的動態調整。傳統IT架構的資源全都是固定的,無法動態的分配。

一、部署虛擬機

1)檢測硬件是否支持虛擬化

#egrep '(vmx|svm)' --color=auto /proc/cpuinfo

#modprobe kvm

# modprobe kvm_intel || modprobe kvm_amd

#lsmod | grep kvm

kvm_intel              53484  3

kvm                   316506  1 kvm_intel

如果含有vmx或者svm字樣,則表示支持cpu虛擬化,Intel是vmx,AMD是svm,如果裝載不成功,則需要在bios中開啓

 2)安裝程序支持

#yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform"

#/etc/init.d/libvirtd start

#chkconfig libvirtd on

3)配置網絡橋接網卡

#virsh iface-bridge eth0 br0

## brctl show

bridge namebridge idSTP enabledinterfaces

br08000.5254008f22d4yeseth0

4)部署安裝虛擬機guestos

#mkdir -p /kvm/{isos,vms}

5)建立磁盤文件,如果使用的是raw格式就不需要,kvm虛擬機默認使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支持一些新的功能,如支持快照鏡像,zlib磁盤壓縮,AES加密等。這裏使用qcow2格式

#qemu-img create -f qcow2 /kvm/vms/centos6-test1.img 8G

6)建立虛擬機,下面通過幾種方式建立虛擬機

########### 使用使用iso來安裝 ###########     

     # virt-install \     
      --name=centos6 \     
      --os-variant=RHEL6 \     
      --ram=512 \     
      --vcpus=1 \     
      --disk path=/kvm/vms/centos6-test1.img,format=qcow2,size=8,bus=virtio \     
      --accelerate \     
      --cdrom /kvm/isos/CentOS6.iso \     
      --vnc --vncport=5910 \     
      --vnclisten=0.0.0.0 \   

                   keymap=en_us  \
      --network bridge=br0,model=virtio \     
      --noautoconsole     


     ########### 使用使用nat模式網絡###########     
     # virt-install \     
      --name=centos6 \     
      --os-variant=RHEL6 \     
      --ram=512 \     
      --vcpus=1 \     
      --disk path=/kvm/vms/centos6-test1.img,format=qcow2,size=8,bus=virtio \     
      --accelerate \     
      --cdrom /data/iso/CentOS6.iso \     
      --vnc --vncport=5910 \     
      --vnclisten=0.0.0.0 \     

                   keymap=en_us  \

      --network network=default,model=virtio \     
      --noautoconsole         
   
   
     ######### 從http中啓動,使用ks安裝 #########     
   
     # virt-install \     
     --name=centos6 \     
     --os-variant=RHEL6 \     
     --ram=4096 \     
     --vcpus=4 \     
     --virt-type kvm  \     
     --disk path=/kvm/vms/centos6-test1.img,format=qcow2,size=8,bus=virtio \     
     --accelerate  \     
     --location http://192.168.130.4/centos63 \     
     --extra-args "linux ip=192.168.73.22 netmask=255.255.255.224 gateway=192.168.73.1 ks=http://192.168.130.4/ks/xen63.ks"\     
     --vnc --vncport=5910 \     
     --vnclisten=0.0.0.0 \     
     --network bridge=br0,model=virtio \     
     --force \     
     --noautoconsole     
   
   
     ########## 從http安裝,使用ks, 雙網卡, 啓用console ########     
     # virt-install \     
     --name=centos6 \     
     --os-variant=RHEL6 \     
     --ram=4096 \     
     --vcpus=4 \     
     --virt-type kvm  \     
     --disk path=/kvm/vms/centos6-test1.img,format=qcow2,size=8,bus=virtio \     
     --accelerate  \     
     --location http://111.205.130.4/centos63 \     
     --extra-args "linux ip=59.151.73.22 netmask=255.255.255.224 gateway=59.151.73.1 ks=http://111.205.130.4/ks/xen63.ks console=ttyS0  serial"     
     --vnc --vncport=5910 --vnclisten=0.0.0.0 \     
    --network bridge=br0,model=virtio \     
    --network bridge=br1,model=virtio \     
    --force \     
    --noautoconsole     

 

       ########## 安裝windows ########     
     # virt-install \     
     --name=win7-test \     
     --os-variant=win7 \     
     --ram=4096 \     
     --vcpus=4 \      
     --disk path=/kvm/vms/centos6-test1.img,size=100 \     
     --accelerate  \     
     --cdrom=/kvm/isos/win7.iso       
     --vnc --vncport=5910 --vnclisten=0.0.0.0 \     
     --network bridge=br0 \       
     --force \     
     --noautoconsole     

## 不能使用virtio,因爲默認windows沒有virtio的硬盤和網卡驅動


參數說明:

 --name指定虛擬機名稱     
--ram分配內存大小。     
--vcpus分配CPU核心數,最大與實體機CPU核心數相同     
--disk指定虛擬機鏡像,size指定分配大小單位爲G。     
--network網絡類型,此處用的是默認,一般用的應該是bridge橋接。可以指定兩次也就是兩塊網卡     
--accelerate加速     
--cdrom指定安裝鏡像iso     
--location 從ftp,http,nfs啓動

keymap=en_us 鍵盤佈局方式,避免操作時鍵盤錯亂,不能正常操控     
--vnc啓用VNC遠程管理     
--vncport指定VNC監控端口,默認端口爲5900,端口不能重複,可以通過在虛擬化主機上通過netstat/ss查看。
--vnclisten指定VNC綁定IP,默認綁定127.0.0.1,這裏改爲0.0.0.0,這樣可以通過"VNC Viewer"   連接虛擬機,格式'虛擬化主機IP:vncliten端口',通過客戶端方式連接時會出現閃退,配置:options--Expert--ColorLevel--full即可
--os-type=linux,windows     
--extra-args指定額外的安裝參數     
--os-variant= [win7 vista winxp win2k8 rhel6 rhel5]     
--force 如果有yes或者no的交互式,自動yes   

還可以通過virt-manager命令管理安裝虛擬機

wKioL1Vi9g7gzQQ8AAGMFbdDB6w633.jpg

二、virsh常見命令

1、直接鍵入virsh進入交互式模式,支持補全

                 #virsh 

    Welcome to virsh, the virtualization interactive terminal. 

    Type:  'help' for help with commands

           'quit' to quit

    virsh # list --all

2. virsh list [--all] 查看虛擬機狀態     

3. virsh start instanceName 虛擬機開機     

4. virsh shutdown instanceName 虛擬機關機      

     需要Linux母體機電源管理     

     service acpid start     

5. virsh destroy instanceName  強制關機     

 6. virsh create /etc/libvirt/qemu/wintest01.xml 通過以前的配置文件創建虛擬機     

  7. virsh autostart instanceName 配置自啓動     

  8. virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml 導出配置文件     

  9. virsh undefine wintest01 刪除虛擬機配置文件,不會真的刪除虛擬機 ,需要徹底刪除需把虛擬映像刪除    

  10. mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/wintest01.xml      

         virsh define /etc/libvirt/qemu/wintest01.xml      

          重新定義虛擬機     

  11. virsh edit wintest01  編輯虛擬機配置文件     

  12. virsh suspend wintest01  掛起虛擬機     

  13. virsh resume wintest01 恢復掛起虛擬機

三、虛擬機克隆

I.    1.使用virt-clone命令克隆虛擬機

    #virt-clone -n centostest01 -f /kvm/vms/centos6-test01.img -o centos6

Cloning centos6-test1.img                                                              62% [===============================================                             ]  25 MB/s | 1.8 GB     00:45 ETA 

                    -n   NEW_NAME,--name=NEW_NAME 

                                                                        克隆出的虛擬機名字

                     -f NEW_DISKFILE, --file=NEW_DISKFILE

                                                                         硬盤映像存放位置

                      -o ORIGINAL_GUEST, --original=ORIGINAL_GUEST

                                                                          被克隆的虛擬機,狀態必須爲關閉或者暫停

2.修改centostest01配置文件

#virsh edit centostest01

graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0' keymap='en-us'>

      <listen type='address' address='0.0.0.0'/>

#virsh define /etc/libvirt/qemu/centostest01.xml

3.啓動虛擬機

#virsh start centostest01

#netstat -nlpt | awk '$NF~/kvm/'

tcp        0      0 0.0.0.0:5914                0.0.0.0:*                   LISTEN      12535/qemu-kvm

4.克隆出來的虛擬機會保持原虛擬機的網絡配置,所以要修改MAC地址,防止衝突

1.通過virt-manager命令或者VNC Viewer客戶端連接centostest01

2.修改MAC地址,把系統生成的網絡設備地址改到原網卡配置文件中,然後修改/etc/udev/rules.d/70-persistent-net.rules

3.重啓虛擬機

II.    使用virt-manager克隆

wKioL1VkIXairOMdAAGb96CaRqM356.jpg

四.快照

            kvm虛擬機默認使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支持一些新的功能,如支持鏡像,zlib磁盤壓縮,AES加密等。  要使用鏡像功能,磁盤格式必須爲qcow2。

1.查看磁盤格式

#qemu-img info /kvm/vms/test01.img 

p_w_picpath: /kvm/vms/test01.img

file format: qcow2

virtual size: 8.0G (8589934592 bytes)

disk size: 2.9G

cluster_size: 65536

2.如果不是qcow2格式,需要關機轉換磁盤格式,如果是請跳過

#qemu-img convert -f raw -O qcow2 raw磁盤  qcow2磁盤63-119.22.img

3.在啓動虛擬機情況下建立快照

# virsh snapshot-create test01

4.快照位置

# ls /var/lib/libvirt/qemu/snapshot/test01/

1432633791.xml  1432634028.xml

5.查看快照

#virsh snapshot-list test01

 Name                 Creation Time             State

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

 1432633791           2015-05-26 17:49:51 +0800 running

 1432634028           2015-05-26 17:53:48 +0800 running

6.恢復快照

#virsh snapshot-revert test01 1432633791

7.刪除快照

#virsh snapshot-delete test01 1432633791

#virsh snapshot-list test01

 Name                 Creation Time             State

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

 1432634028           2015-05-26 17:53:48 +0800 running

#qemu-img info /kvm/vms/test01.img 

p_w_picpath: /kvm/vms/test01.img

file format: qcow2

virtual size: 8.0G (8589934592 bytes)

disk size: 3.5G

cluster_size: 65536

Snapshot list:

ID        TAG                 VM SIZE                DATE       VM CLOCK

2         1432634028             280M 2015-05-26 17:53:48   03:45:43.643

五.添加網卡

        線上服務器是雙網卡,一個走內網,一個走外網,我們也需要虛擬機這麼來工作,但是初始安裝虛擬機的時候沒有指定兩個網卡,這樣需要我們來添加一個網卡了,比如說我們已經將br1橋接到em2了,如果不會見剛開始br0橋接em1

1). 通過virt-manager來添加

簡單說一下  選中虛擬機 -- Open -- Details – AddHardware 選擇網卡模式,mac不要重複,確定即可

2). 通過命令來添加

    Ⅰ.  使用virsh attach-interface命令爲虛擬機添加網卡

     # virsh attach-interface test01 --type bridge --source br1 --model virtio

    Ⅱ. 導入配置文件並覆蓋原來的虛擬機配置文件, 因爲attach-interface添加後,只是在虛擬機中生效了,配置文件並沒有改變

     #virsh dumpxml test01 > /etc/libvirt/qemu/test01.xml

    #virsh define /etc/libvirt/qemu/test01.xml 

    Ⅲ. 修改GuestOS中網卡配置文件,爲另一個網卡配置IP

    #cd /etc/sysconfig/network-scripts

    修改網卡配置文件    

    Ⅳ. 重啓網卡

六.硬盤擴容

    原來的/kvm目錄隨着使用,空間漸漸滿了,這時候我們就需要給/kvm的掛載分區擴容了,有兩種情況 1. 該分區是lvm格式 2. 不是lvm格式,且不是擴展分區

1). 分區是lvm格式 這種很簡單,添加一塊磁盤,lvm擴容

virt-manager添加方式和添加網卡一樣,不再贅述,下面是使用命令來添加

    Ⅰ. 建立磁盤,並附加到虛擬機中

     # qemu-img create -f raw 10G.img 10G     

     # virsh attach-disk test01 /kvm/kvm/10G.img vdb     

     說明:       

     test01    虛擬機的名稱     

     /kvm/vms/10G.img   附加的磁盤     

     vdb                添加爲哪個磁盤, 也就是在guestos中的名字 

    Ⅱ. 導出並覆蓋原來的配置文件,和網卡一樣,attach後只是在虛擬機中生效

     # virsh dumpxml test01 > /etc/libvert/qemu/test01.xml 


    Ⅲ. 使用lvm在線擴容,詳見 http://www.cnblogs.com/cmsd/p/3964118.html


2). 分區不是lvm格式,該分區不是擴展分區, 需要關機離線擴展

    Ⅰ.  新建一個磁盤,大於原來的容量,比如原來是40G,你想對某個分區擴容20G那麼

     # qemu-img create -f qcow2 60G.img 60G

    Ⅱ. 備份原來的磁盤,以防三長兩短

     # cp test01.img test01.img.bak

    Ⅲ. 查看原來的磁盤決定擴容哪一個分區

     # virt-filesystems --partitions --long -a test01.img     

     # virt-df test01.img 


    Ⅳ. 擴容GuestOS的sda2

     # virt-resize --expand /dev/sda2 test01.img 60G.img      

     說明:  

     /dev/sda2                   擴容guestos的/dev/sda2     

     test01.img         原來的磁盤文件       

 60G                         第一步建立的更大的磁盤文件    

    Ⅴ. 使用新磁盤啓動

     # mv 60G.img test01.img      

     # virsh start test01

     virt-resize其實就是將原來磁盤中的文件複製到新的文件中,講想要擴大的分區擴大了

七.動態遷移

        用過vSphere 或者 xenserver的都知道動態遷移,最大程度上減少宕機時間 , 比如將正在運行在A上的虛擬機不關機遷移到B上,會將原來虛擬機的內存,CPU狀態等遷移到新的主機上,動態遷移需要一些條件

1. 該虛擬機使用共享存儲,在兩臺主機上的位置一樣 比如 A,B都將主機C的 /kvm/vms 掛載到了自己的/kvm/vms中,A,B對nfs可讀可寫,或者用moosefs做文件服務器,掛在到虛擬化主機。虛擬機在共享存儲中,映像位置不統一會遷移失敗,目標主機環境要和源主機一直,包括網卡配置等。

2. 目標主機最好與源主機型號一樣,或者CPU支持的指令集更多

3. 目標主機CPU,內存充足

4. 能通過root用戶ssh連接到目的主機上

5. hostname和ip解析一致, 遷移是通過hostname的,修改/etc/hosts,可以ping通對方的Hostname,爲了方便遷移也可以建立主機ssh互信

1)在目標主機上掛載和源虛擬主機位置一樣的文件系統,並添加主機名和ip到/etc/hosts,建立主機互信

1.1)使用virt-manager來遷移

wKiom1VlcCagSt3uAAFbuidNNnQ281.jpg

wKioL1VlcbfyToDdAAGtRi25O2c638.jpg

wKioL1VlcbfRXhFeAAGTFUHvxbU107.jpg

wKiom1VlcCeymIOuAAGbjUqM6hM349.jpg

wKioL1VlcbjQQGnoAAHXDUDc8xs866.jpg

wKiom1VlcCjBYBZ9AAERKPtJN8k854.jpg

目標虛擬主機上查看

#

# virsh list --all

 Id    名稱                         狀態

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

 4     centos6b                       running


1.2)使用migrate命令動態遷移

# virsh migrate centos6b --live qemu+ssh://192.168.1.154:22/system  --unsafe

            centos6b 遷移的vm

            --live    在線模式

             qemu+ssh  ssh的方式

             --unsafe   強制遷移,忽略錯誤


本博客根據老廣老師的博客學習整理,播客出處http://laoguang.blog.51cto.com/6013350/1551379

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