KVM 虛擬化詳解

一、Kvm 簡介

KVM的虛擬化需要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的完全虛擬
化。在性能上KVM繼承了Linux很好的性能和伸縮性,在虛擬化性能方面,已經達到非虛
擬化原生環境95%左右的性能(官方數據)。KVM拓展性也非常好,客戶機和宿主機都可以
支持非常多的CPU數量和非常大的內存,可以過載使用CPU和內存,還可藉助KSM技術實
現對內存的過量使用,且保證性能依舊非常不錯。紅帽2008年9月收購。

二、虛擬化

虛擬化:虛擬化是雲計算的底層,在硬件基礎上跑虛擬機
雲計算:對硬件進行一個整合,協調硬件資源,可以理解爲分佈式的集羣
2.1虛擬化技術
KVM 虛擬化詳解

虛擬化技術的分類:
模擬:emulation 相當於硬件的60%
虛擬:virtulization(虛擬出來的架構與底層架構要保持一致)
完全虛擬化(full-virtulization)
BT:二進制翻譯 (軟件) 相當於硬件的80%
HVM:硬件輔助的虛擬化 (硬件) 相當於硬件的85%
半虛擬化(para-virtulization) 【準虛擬化】 相當於硬件的95%

  • 模擬:IO,CPU,Memory全都是用軟件模擬出來。著名的模擬器有PearPC,Bochs,QEMU。
    在硬件上運行着一臺主機,主機上運行一個虛擬化模擬軟件,此軟件可以模擬出一個或
    多個硬件環境。模擬出的硬件環境就是虛擬機。
  • 完全虛擬化:也稱爲native virtulization
    cpu不做模擬,只對其做相應的分配和管理,IO需要做模擬,Memory也不需要做模擬。
    虛擬的cpu架構和底層的cpu架構要保持一致。
    兩種加速方式:
      BT
      HVM
      著名產品:VMware Workstation,VMware Server,Parallels Desktop,KVM,Xen(HVM)
  • 半虛擬化:xen,uml(user-mode linux)。虛擬出來的架構與物理架構也必須完全一致
    通常需要修改虛擬機的內核,然後實現就請求轉發給物理機內核(hypervisor),讓物理機
    內核執行之後再返回(hyper call)給虛擬機
  • OS級別的虛擬化:Openvz,lxc,Solaris Containers
    多個用戶空間共用一個內核空間,每個用戶空間就是一個虛擬機,由一個虛擬機管理器
    分別多所有虛擬機進行管理。
  • 庫虛擬化:wine
  • 應用程序虛擬化:jvm

三、KVM安裝

3.1檢測是否支持虛擬化

  • 開啓虛擬化
    開機進入服務器bios,設置虛擬化選項爲打開virtualization technology enabled
  • 檢查 CPU
    # egrep --color '(vmx|svm)' /proc/cpuinfo 
    # grep --color=auto -Ei "vmx|svm" /proc/cpuinfo

    #如果含有vmx或者svm字樣,則表示硬件支持虛擬化,vmx代表Intel,svm代表AMD
    3.2裝載模塊

    # modprobe kvm
    modprobe kvm_intel
    # lsmod | grep kvm
    kvm_intel            55496   0 
    kvm                  337772  1 kvm_intel

    3.3安裝kvm相關軟件包

    # yum grouplist | grep -i "Virtualization"
    # yum install qemu-kvm qemu-kvm-tools virt-manager virt-viewer libvirt python-virtinst bridge-utils tigervnc
    # ln -sv /usr/libexec/qemu-kvm /usr/sbin/

四、網絡設置

4.1橋接網卡

  • 腳本創建橋接口
    #!/bin/bash
    ipaddr=`ifconfig eth0 |awk '/inet addr:/{print $2}' |awk -F: '{print $2}'`
    brctl addbr br0
    ifconfig eth0 0 up
    brctl addif br0 eth0
    ifconfig br0 ${ipaddr}/16 up
    brctl stp br0 on
  • virsh命令創建橋接口
    #virsh iface-bridge eth0 br0
  • 配置文件創建橋接口

    # vim /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    HWADDR=00:50:56:39:11:f4
    TYPE=Ethernet
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=none
    BRIDGE=br0
    # vim /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=stitc
    IPADDR=192.168.100.101
    GATEWAY=192.168.100.1
    NETMASK=255.255.255.0
  • 重啓網卡
    # /etc/init.d/network restart

  • 啓動Libvirt
    service libvirtd start

    五、創建虛擬機

創建磁盤映像文件

# qemu-img create -f qcow2 -o size=10G /u01/images/vm1/centos.qcow2
# dd if=/dev/zero of centos6.img bs=1M count=1024

創建稀疏格式
# dd if=/dev/zero of=centos6.img bs=1M oflag=direct seek=1023 count=1

Qemu命令新建虛擬機
# qemu-kvm -name "mhn_node1" -m 512 -smp 1 -hda /u01/images/vm1/centos.qcow2 -cdrom /u01/centos_iso/CentOS-6.5-x86_64-bin-DVD1.iso -boot order=dc

virt-install新建虛擬機

# virt-install --name=centos6 --ram 1024 --vcpus=1 --disk path=/u01/centos6.qcow2  --accelerate --cdrom /mnt/CentOS6.5.iso --graphics vnc,listen=0.0.0.0,port=5920 --network bridge=br0 --force –autostart
# virt-install --name=node1 --ram=1024 --arch=x86_64 --vcpus=1 --check-cpu --os-type=linux --os-variant='rhel6' -c /u01/iso/centos6.5.iso --disk path=/u01/images/centos6.5_vm001.img,device=disk,bus=virtio --bridge=br0 --noautoconsole --vnc --vncport=5921 --vnclisten=0.0.0.0

virsh基於模板創建虛擬機

# cp centos.img /u01/images/node1.img
# virsh dumpxml centos > /etc/libvirt/qemu/node1.xml
# virsh create /etc/libvirt/qemu/node1.xml -console

# virsh define /etc/libvirt/qemu/node3.xml
# virsh edit node3  不建議直接通過vim修改xml文件
修改id號
修改虛擬機的name
修改uuid
指定新虛擬機的硬盤文件
# virsh start node3

六、管理虛擬機

  • 鏡像格式轉換
    # qemu-img create -f vmdk -0 ? test.vmdk
    # qemu-img convert –O vmdk –o adapter_type=lsilogic test.qcow2 test.vmdk
    # qemu-img convert -f raw -O qcow2 node1.img node1.qcow2

-f:源鏡像的格式,它會自動檢測
-O:目標鏡像的格式
-o:其他選先

擴大磁盤容量
# qemu-img resize /u01/images/test.qcow2 50G

克隆
# virt-clone -o node1 -n node2 -f node2.qcow2
-o:原來的虛擬機名稱
-n:新的虛擬機名稱
-f:新的虛擬機磁盤文件

生成隨機mac
# openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'
cd:8b:7b:ba:c1:b5
創建快照
# qemu-img snapshot –c test-1.snap test.qcow2
恢復快照
#qemu-img snapshot -a test.-1.snap test.qcow2
刪除快照
#qemu-img snapshot -d test.-1.snap test.qcow2

virsh管理
# virsh define /etc/libvirt/qemu/node5.xml #將配置導入到虛擬機
# virsh start node3 #啓動虛擬機
# virsh create /etc/libvirt/qemu/centos6.5.xml #通過配置文件啓動
# virsh shutdown node3 #關閉虛擬機
# virsh destroy node3 #強制關閉電源
# virsh undefine node3 #刪除虛擬機
# virsh suspend node3 #掛起虛擬機
# virsh resume node3 #恢復被掛起的虛擬機
# virsh list --all #查看所有的虛擬機

virt-manager管理
# virt-manager

KVM 虛擬化詳解

  • 設置虛擬機名字
    KVM 虛擬化詳解
  • 設置磁盤屬性
    將默認的IDE硬盤換成virtio,並打上驅動程序,這樣性能就可以得到提升
    KVM 虛擬化詳解
  • 設置網卡屬性
    將默認的網卡換成virtio,並打上驅動程序,這樣性能就可以得到提升
    KVM 虛擬化詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章