虚拟化之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
 
1
yum install qemu-kvm qemu-kvm-tools
 
 2)创建kvm 的管理工具
1
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-imgsubcommand[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-eth0ifcfg-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

 

 
6) 编写关联桥设备的脚本
 
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

 

7)创建虚拟机
 
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
 
 
好的基于qemu管理KVM虚拟机已经完成.希望大家能有所收获.

相关内容

    暂无相关文章