老廣: KVM虛擬化學習筆記


大綱:

一、部署安裝kvm虛擬機

二、virsh常見命令解釋

三、KVM虛擬機克隆

四、KVM快照

五、讓GuestOS支持 console

六、添加網卡

七、磁盤擴容

八、動態遷移 


前言:

    虛擬化的理論知識我就不囉嗦了,可以參見http://bbs.linuxtone.org/thread-24347-1-1.html,kvm全稱Kernel-based  Virtual Machine, 其實kvm只是一個內核模塊,提供虛擬cpu和內存管理的模塊,至於其它的設備是由qemu模擬的,如網卡,顯卡,磁盤等。後來redhat聯合IBM以及Linux社區創造了libvirt,模擬的設備性能要比qemu的好很多,並提供了一系列的管理工具和api,整個集成了kvm虛擬化的解決方案。Linux(redhat系)裝載kvm模塊後,妖神一變成爲了VM Monitor,也稱爲Hypervisor,部署使用簡單,需要硬件支持虛擬化。

 

一.  部署虛擬機

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

# egrep '(vmx|svm)' --color=always /proc/cpuinfo    
# modprobe kvm    
# modprobe kvm_intel || modprobe kvm_amd  

  

如果含有vmx或者svm字樣,則表示支持CPU虛擬化,Intel是vmx,AMD是svm,也需要檢測是否有kvm_xxx模塊,如果裝載不成功,可能是沒有開啓硬件虛擬化,需要bios中開啓,具體開啓方式請聯繫廠家


2). 安裝rpm包,並啓動服務

# yum -y install kvm  python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tools \

  virt-viewer virt-v2v libguestfs-tools 
# service libvirtd start    

 

3). 檢查是否有kvm模塊,如果有則繼續

# lsmod | grep kvm    
kvm_intel              52570  30     
kvm                   314739  1 kvm_intel    

 

4). 配置橋接網絡 br0

# cd /etc/sysconfig/network-scripts/    
# cp ifcfg-eth0 ifcfg-br0    
   
  ifcfg-eth0:    
   
    DEVICE=eth0    
    TYPE=Ethernet    
    ONBOOT=yes    
    NM_CONTROLLED=yes    
    BRIDGE="br0"    
    BOOTPROTO=static    
    IPADDR="192.168.2.149"    
    NETMASK="255.255.255.0"    
    GATEWAY="192.168.2.2"    
   
  ifcfg-br0:    
   
    DEVICE=br0    
    TYPE=Bridge    
    ONBOOT=yes    
    NM_CONTROLLED=yes    
    BOOTPROTO=static    
    IPADDR="192.168.2.149"    
    NETMASK="255.255.255.0"    
    GATEWAY="192.168.2.2"    
   
# service network restart      
# ifconfig     
    br0 ...    
    eth0 ...    
    lo ...    
    virbr0 ...    

5). 部署安裝虛擬機(GuestOS)

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

     # mkdir /opt/vms     
     # qemu-img create -f qcow2 /opt/vms/centos63-webtest.img 40G

② 建立虛擬機, 下面展示多種方式建立虛擬機

     ########### 使用使用iso來安裝 ###########    
     # virt-install \    
      --name=centos5 \    
      --os-variant=RHEL5 \    
      --ram=512 \    
      --vcpus=1 \    
      --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \    
      --accelerate \    
      --cdrom /data/iso/CentOS5.iso \    
      --vnc --vncport=5910 \    
      --vnclisten=0.0.0.0 \    
      --network bridge=br0,model=virtio \    
      --noautoconsole     


     ########### 使用使用nat模式網絡###########     
     # virt-install \     
      --name=centos5 \     
      --os-variant=RHEL5 \     
      --ram=512 \     
      --vcpus=1 \     
      --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \     
      --accelerate \     
      --cdrom /data/iso/CentOS5.iso \     
      --vnc --vncport=5910 \     
      --vnclisten=0.0.0.0 \     
      --network network=default,model=virtio \     
      --noautoconsole         
   
   
     ######### 從http中啓動,使用ks安裝 #########    
   
     # virt-install \    
     --name=centos63-webtest \    
     --os-variant=RHEL6 \    
     --ram=4096 \    
     --vcpus=4 \    
     --virt-type kvm  \    
     --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,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=centos63-webtest \    
     --os-variant=RHEL6 \    
     --ram=4096 \    
     --vcpus=4 \    
     --virt-type kvm  \    
     --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,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=/opt/vms/centos63-webtest.img,size=100 \     
     --accelerate  \     
     --cdrom=/opt/iso/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啓動    
--vnc啓用VNC遠程管理    
--vncport指定VNC監控端口,默認端口爲5900,端口不能重複。    
--vnclisten指定VNC綁定IP,默認綁定127.0.0.1,這裏改爲0.0.0.0。    
--os-type=linux,windows    
--extra-args指定額外的安裝參數    
--os-variant= [win7 vista winxp win2k8 rhel6 rhel5]    
--force 如果有yes或者no的交互式,自動yes    

③ 安裝系統 有三種方式,通過VNC來安裝, 通過virt-manager來安裝 , 通過console配合ks來安裝

   Ⅰ.  通過VNC來安裝

  • 下載TightVNC來連接上vnc安裝,只需要TightVNC Client即可,如果使用在RealVNC,就設置ColourLevel=rgb222才能連接,端口號是安裝時指定的,以後的安裝流程和普通的是一樣的

 

     Ⅱ.  通過virt-manager, 如果你使用xshell那麼可以不用安裝x window就可以使用virt-manager, 需要安裝 x11相關軟件

     # yum -y install libX11 xorg-x11-server-utils xorg-x11-proto-devel dbus-x11 \

     xorg-x11-xauth xorg-x11-drv-ati-firmware  xorg-x11-xinit     

   # virt-manager     


     Ⅲ. 通過virt console, 如果你安裝時啓用了 console可以使用 console來安裝, Ctrl+]  可以退出console

     # virsh console centos63-webtest     


     VI. 通過virt-viewer來安裝

       # yum -y install virt-viewer xorg-x11-font*

       # virt-viewer centos63-webtest 


二. virsh常見命令解釋

  1. virsh進入交互模式,在該交互模式下有命令不全補全,詳細幫助    
     virsh # lis[tab補全]    
     virsh # help list   詳細幫助    
  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 恢復掛起虛擬機    

 

三. 克隆

1).  使用virt-manager來克隆,這個太簡單了,就不演示了,需要注意的是,如果啓用了VNC, 記得更改VNC的端口,否則啓動會失敗的,見命令方式修改VNC修改

2).  使用命令克隆虛擬機

     # virt-clone -o centos63_webtest -n centos63_webtest2 -f /opt/vms/centos_webtest2.img

     參數說明:    
         -o –-original  原來實例name    
         -n –-name      新實例名稱    
         -f –-file      新實例磁盤存放位置

3).  如果你啓用了vnc, 修改配置文件中的vnc端口,否則啓動失敗,配置文件爲 /etc/libvirt/qemu對應實例名字的xml文件,先來一張配置文件解釋圖,很重要

123.png

     # cd /etc/libvirt/qemu    
     # ls    
     # virsh edit centos63_webtest    
      
      <graphics type='vnc' port='5915'   ............    


4).  啓動克隆機器 (有的Linux版本可能生成的網卡有問題,請修改 /etc/udev/rules.d/70-persistent-cd.rules, 重啓虛擬機)

    # virsh start centos63_webtest1


四.  快照

快照相信大家都知道是什麼意思,如果不知道,親去補補課吧,kvm虛擬機默認使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支持一些新的功能,如支持鏡像,zlib磁盤壓縮,AES加密等。  要使用鏡像功能,磁盤格式必須爲qcow2。下面開始kvm虛擬機快照的過程。

1). 查看磁盤格式

# qemu-img info /opt/vms/centos63-119.22.img     
image: /opt/vms/centos63-119.22.img    
file format: qcow2    
virtual size: 40G (42949672960 bytes)    
disk size: 136K    
cluster_size: 65536  

  

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

# cp centos63-119.22.img centos63-119.22.raw    
# qemu-img convert -f raw -O qcow2 centos63-119.22.raw  centos63-119.22.img 


3). 啓動vm, 建立快照,以後可以恢復

# virsh start centos63-119.22    
# virsh snapshot-create centos63-119.22 

   

4). 快照位置

快照配置文件在/var/lib/libvirt/qemu/snapshot/虛擬機實例名稱/下


5). 恢復快照,可以建立一些測試文件,準備恢復

先將虛擬機關閉,查看快照名稱,然後恢復快照

# ls /var/lib/libvirt/qemu/snapshot/centos63-119.22    
1410341560.xml    
# virsh snapshot-revert centos63-119.22 1410341560


6). 刪除快照

# qemu-img info   centos63-119.22    
    1         1410341560             228M 2014-04-08 10:26:40   00:21:38.053    
# virsh snapshot-delete centos63-119.2 1410341560


五. 讓已安裝的虛擬機GuestOS支持 virsh console

virsh console vmname 可以進入到vm的console模式,但是有時只顯示鏈接到vm,提示如下,回車沒有反應,這是因爲guestos不支持console,下面來啓用guestos的console

Connected to domain centos63-119.22    
Escape character is ^]    

1). 修改grub.conf,給內核傳遞參數 console=ttyS0

# vim /etc/grub.conf     
kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=25756cd7-3597-4e45-8dd    
db-79d091c6d17f rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MM    
D SYSFONT=latarcyrheb-sun16 console=ttyS0 rd_NO_LVM crashkernel=auto rhgb quiet      
rd_NO_DM   

 

2). 在/etc/inittab中添加agetty

# echo "S0:12345:respawn:/sbin/agetty ttyS0 115200" >> /etc/inittab    


3). 添加到/etc/securetty

# echo "ttyS0" >> /etc/securetty    

4). 重啓GuestOS


六. 添加網卡

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

1). 通過virt-manager來添加

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

2). 通過命令來添加

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

     # virsh attach-interface centos63-119.23 --type bridge --source br1 --model virtio


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

     # cd /etc/libvirt/qemu    
     # virsh dumpxml centos63-119.23 > centos63-119.23.xml 


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

     # cd /etc/sysconfig/network-scripts    
     略 


    Ⅳ. 重啓網卡


七. 硬盤擴容

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

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

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

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

     # qemu-img create -f raw 10G.img 10G    
     # virsh attach-disk centos63-119.23 /opt/kvm/10G.img vdb    

       ------------------------------添加qcow2磁盤-----------------------------------

       # qemu-img create -f qcow2 10G.img 10G     
     # virsh attach-disk centos63-119.23 /opt/kvm/10G.img vdb --cache=none --subdriver=qcow2 

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

     說明:      
     centos63-119.23    虛擬機的名稱    
     /opt/kvm/10G.img   附加的磁盤    
     vdb                添加爲哪個磁盤, 也就是在guestos中的名字 

   

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

     # virsh dumpxml centos63-119.23 > centos63-119.23.xml 


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


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

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


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


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

     # cp centos63-119.27.img centos63-119.27.img.bak


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

     # virt-filesystems --partitions --long -a centos63-119.27.img    
     # virt-df centos63-119.27.img 


    Ⅳ. 擴容GuestOS的sda2

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

     說明: 
     /dev/sda2                   擴容guestos的/dev/sda2    
     centos63-119.27.img         原來的磁盤文件       
     60G                         第一步建立的更大的磁盤文件    


    Ⅴ. 使用新磁盤啓動


     # mv 60G.img centos63-119.27.img      
     # virsh start centos63-119.27


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

 

八. 動態遷移

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

1. 該虛擬機使用共享存儲,在兩臺主機上的位置一樣 比如 A,B都講C的 /opt/vms 掛載到了自己的/opt/vms中,A,B對nfs可讀可寫,虛擬機在共享存儲中

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

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

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

5. hostname和ip解析一致, 遷移是通過hostname的,修改/etc/hosts,可以ping通對方的Hostname

下面來遷移試試,假設上述條件都滿足, nfs已經掛載,如果nfs不會請google如何建立nfs

1). 使用virt-manager來遷移

簡單來說  File – Add Connect -- 填寫對方的ip,用戶名,密碼, 然後右擊虛擬機,Migrate

image

image

image

image

注. 由於原來的22沒有建在共享存儲上,新建了一個29的虛擬機來完成遷移的,切記 hostname要和ip對應, 虛擬機存儲是共享存儲

 

2). 通過命令來動態遷移

     # virsh migrate centos63-119.27 --live qemu+ssh://192.168.119.11:9741/system –unsafe  

     說明:    
     centos63-119.27   遷移的實例名稱

    

     --live            動態遷移

     qemu+ssh          ssh的方式

     --unsafe          強制遷移,即使可能出現問題        


   

先寫到這裏吧,一些基本的用得到的都寫了一下, 感謝您有耐心看到這裏, 寫個博客確實不容易,livewriter寫的文章,傳到博客上格式全變了,囧,湊合看吧, 親隨手給個贊, 希望能幫的到您, 有問題可以給我留言或者發郵件給我  [email protected],


補充:

    # vim /etc/qemu-ifup.sh #設置一下網絡,爲了使用http ks
        #!/bin/bash
        #
        switch=br1

        if [ -n $1 ];then
            ip link set $1 up
            brctl addif ${switch} $1
            exit 0
        else
            echo "No interface"
            exit 1
        fi

    # chmod +x /etc/qemu-ifup.sh
    # /usr/libexec/qemu-kvm -m 1024 \
     -cdrom /tmp/CentOS-6.3-x86_64-bin-DVD1.iso \
     -drive file=/opt/vms/centos63-x86_64-template.img,if=virtio \
     -net nic,model=virtio -net tap,script=/etc/qemu-ifup.sh \
     -boot d \
     -nographic \
     -vnc :01

    啓動:
    /usr/libexec/qemu-kvm -m 1024 \
    -drive file=/opt/vms/centos63-x86_64-template.img,if=virtio \
    -net nic,model=virtio -net tap,script=no \
    -net nic,model=virtio -net tap,script=no \
    -nographic -vnc :02



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