虛擬化之KVM

一: KVM 虛擬機

  KVM即Kernel Virtual Machine,最初是由以色列公司Qumranet開發。2007年2月被導入Linux 2.6.20核心中,成爲內核源代碼的一部分。2008年9月4日,Redhat收購了Qumranet,至此Redhat擁有了自己的虛擬化解決方案,之後便捨棄Xen開始全面扶持KVM,從RHEL6開始KVM便被默認內置於內核中。本文介紹KVM虛擬化平臺部署及管理。


  KVM必須在具備Intel VT或AMD-V功能的x86平臺上運行。KVM包含一個爲處理器提供底層虛擬化,可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一個經過修改的QEMU(qemu-kvm),作爲虛擬機上層控制和界面。

  由於KVM僅是一個簡單的虛擬化模塊,所以它的內存管理沒有自我實現,需藉助於Linux內核實現內存管理。KVM能夠使用Linux所支持的任何存儲,在驅動程序的實現上,直接藉助於Linux內核來驅動任何硬件。在性能上KVM繼承了Linux很好的性能和伸縮性,在虛擬化性能方面,已經達到非虛擬化原生環境95%左右的性能(官方數據)。KVM拓展性也非常好,客戶機和宿主機都可以支持非常多的CPU數量和非常大的內存,可以過載使用CPU和內存,還可藉助KSM技術實現對內存的過量使用,且保證性能依舊非常不錯。

  KVM的架構非常簡單,就是內核的一個模塊,用戶空間通過qemu模擬硬件提供給虛擬機使用,一個虛擬機就是一個普通的Linux進程,通過對這個進程的管理,就可以完成對虛擬機的管理。


二:KVM 的部署


 1) 安裝kvm


yum install qemu-kvm qemu-kvm-tools


 2)創建kvm 的管理工具

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

 

 3)kvm 命令詳解

   qemu-kvm的標準選項

   qemu-kvm的標準選項主要涉及指定主機類型、CPU模式、NUMA、軟驅設備、光驅設備及硬件設備等


-name name:設定虛擬機名稱;
-M machine:指定要模擬的主機類型,如Standard PC、ISA-only PC或Intel-Mac等
-m megs:設定虛擬機的RAM大小;
-cpu model:設定CPU模型,如coreduo、qemu64等
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:設定模擬的SMP
架構中CPU的個數等、每個CPU的核心數及CPU的socket數目等;PC機上最多可以模擬255顆CPU;maxcpu
s用於指定熱插入的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和w
ritethrough四個;
    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


   網絡選項

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:創建一
個新的網卡設備並連接至vlan n中;macaddr用於爲其指定MAC地址,name用於指定一個在監控時顯示
的網上設備名稱;emu可以模擬多個類型的網卡設備
-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.1
6-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


 4)創建磁盤映像

qemu-img是qemu用來實現磁盤映像管理的工具組件,其有許多子命令,分別用於實現不同的管理功能,而每一個子命令也都有一系列不同的選項。其使用語法格式爲“qemu-img  subcommand  [options]”,支持的子命令如下。
◇create:創建一個新的磁盤映像文件;
◇check:檢查磁盤映像文件中的錯誤;
◇convert:轉換磁盤映像的格式;
◇info:顯示指定磁盤映像的信息;
◇snapshot:管理磁盤映像的快照;
◇commit:提交磁盤映像的所有改變;
◇rbase:基於某磁盤映像創建新的映像文件;
◇resize:增大或縮減磁盤映像文件的大小;
使用create子命令創建磁盤映像的命令格式爲“create [-f fmt] [-o options] filename [size]”,例如下面的命令創建了一個格式爲qcow2的120G的稀疏磁盤映像文件。
# qemu-img create -f qcow2  /VM/images/rhel5.8/hda 120G
Formatting '/VM/images/rhel5.8/hda', fmt=qcow2 size=128849018880 encryption=off cluster_size=65536

 



mkdie /kvm/images -pv
qemu-img create -f qcow2 -o size=50G,preallocation="metadata" /kvm/images/centos6.qcow2


 5)創建橋設備


如果沒有安裝需要先安裝 bridge-utils
yum install bridge-utils

cp /etc/sysconfig/network-scripts/ifcfg-eth0  ifcfg-br0

vim ifcfg-bro   #搭建橋

DEVICE=br0      #此處類型爲橋
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
TYPE=Bridge
IPADDR=192.168.2.153
NETMASK=255.255.255.0
GATEWAY=192.168.2.1

vim ifcfg-etho

DEVICE=eth0 
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0      #關聯到橋br0上面


查看橋信息
brctl show
bridge namebridge id STP enabledinterfaces
br0 8000.000c291c8e76no eth0


5) 編寫關聯橋設備的腳本

vim /kvm/scripts/qemu-ifup

#! /bin/bash
#
switch=br0
if [ -n "$1" ]; then
    ip link set $1 up
    sleep 1
    brctl addif $switch $1
    exit 0
else
    echo "ERROR no interface"
fi



vim /kvm/scripts/qemu-ifdown

#!/bin/bash

#
switch=br0

if [ -n "$1" ]; then
    brctl delif $switch $1
    ip link set $1 down
    exit 0
else
    echo "Error no interface"
    exit 1
fi


6)創建虛擬機

qemu-kvm -name "centos6.6" -m 512 -smp 2 -drive file=/kvm/images/centos6.qcow2,media=disk,format=qcow2 -drive file=/kvm/images/cirros-0.3.3-x86_64-disk.img,media=cdrom -net nic -net tap,ifname=vnet0,script=/kvm/scripts/qemu-ifup,downscript=/kvm/scripts/qemu-ifdown -boot order=dc,once=d


vncviewer :5900



wKioL1YskqujZlx4AAB73sPoAA8650.jpg


好的基於qemu管理KVM虛擬機已經完成.希望大家能有所收穫.










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