天天看點

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模式網絡###########     

      --cdrom /data/iso/CentOS6.iso \     

      --vnclisten=0.0.0.0 \     

                   keymap=en_us  \

      --network network=default,model=virtio \     

      --noautoconsole         

     ######### 從http中啟動,使用ks安裝 #########     

     --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 ########     

     --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 ########     

     --name=win7-test \     

     --os-variant=win7 \     

     --vcpus=4 \      

     --disk path=/kvm/vms/centos6-test1.img,size=100 \     

     --cdrom=/kvm/isos/win7.iso       

     --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指令管理安裝虛拟機

KVM虛拟化

二、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克隆

KVM虛拟化

四.快照

            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

disk size: 3.5G

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來遷移

KVM虛拟化
KVM虛拟化
KVM虛拟化
KVM虛拟化
KVM虛拟化
KVM虛拟化

目标虛拟主機上檢視

#

# 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

繼續閱讀