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

一、前言

二、环境

三、安装与配置

四、创建kvm虚拟机

五、管理kvm虚拟机

六、克隆kvm虚拟机

七、网络配置(bridge)

附1:宿主机执行以下指令(shutdown,reboot)虚拟机没有反应。

附2:宿主机重启网络服务时出现错误(配置bridge时)

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

一、前言

    KVM,即Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,

新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization。

二、环境

系统:rhel6.5 64位

软件包组:

virtualization             提供虚拟机的环境,主要包含qemu-kvm

virtualization-client      管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer

virtualization-platform    提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client

virtualization-tools       管理离线虚拟机镜像的工具,主要有libguestfs

根据需求选择软件包,一般都安装前三个,也可以只安装个别主要的包。

为了减少不必要的麻烦,请关闭防火墙和SELinux

# cat /proc/cpuinfo |grep flags     需要全虚拟化支持为vmx(Inter)或svm(AMD)

如果确定物理机支持cpu虚拟化技术,而使用上述命令查找不到相应指令,请参考以下解决办法:

http://yinuoqianjin.blog.51cto.com/8360868/1557987

三、安装与配置

# yum groupinstall "Virtualization" "Virtualization Client""Virtualization Platform"# yum install qemu-kvm virt-manager libvirt         //也可只安装个别主要的包# lsmod |grep kvm                                   //kvm模块一定要加载kvm_intel              53484  0 kvm                   316506  1 kvm_intel# service libvirtd start                            //启动libvirt服务         Starting libvirtd daemon:             [  OK  ]

四、创建kvm虚拟机(图形界面)

1.在kvm宿主机创建虚拟机存储位置

# mkdir /data

2.可以利用vnc远程连接kvm宿主机,进行管理。Application→System Tools→Virtual Machine Manager

3.进入Virtual Machine Manager管理界面,新建一个虚拟机。

5.输入虚拟机名称,选择“Local Install media”

6.选择“Use CDROM or DVD”,及使用vmware的虚拟光驱

7.选择内存及cpu,依机器性能本身而定

8.选择虚拟机磁盘大小,及存储位置

9.新建虚拟机信息预览

下面就会开始安装,和安装操作系统是一样的步骤。

安装后的界面:

五、管理kvm虚拟机

常用命令:

virsh list       显示虚拟机运行状态

virsh console    使用文本方式连接虚拟系统

virsh start      开启虚拟系统

virsh shutdown   关闭虚拟系统

# vim  /etc/libvirt/qemu/vm01.xml    //配置文件路径

注:虚拟机和宿主机之间切换使用ctrl+】(右方括号)

# virsh console vm01Connected to domain vm01Escape character is ^]               //如无法进入,解决办法:http://yinuoqianjin.blog.51cto.com/8360868/1562588

六、克隆kvm虚拟机

# virt-clone -o vm01 -n vm02 -f /data/vm02      //vm01需要关机# ll -h /data-rwxr-xr-x 1 root root 8.0G Oct 13 17:40 vm01.img-rwxr-xr-x 1 root root 8.0G Oct 13 17:42 vm02.img

七、网络配置(bridge)

kvm上网有两种配置,一种是default,它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,

但不支持外界访问虚拟机。另外一种方式是bridge方式,可以使用虚拟机成为网络中具有独立IP的主机。

具体思路:在宿主机上虚拟出一块网卡,让自身的eth0桥接到它上面。

1.宿主机配置网卡信息

# cat /etc/sysconfig/network-scripts/ifcfg-kvmbr0     //新建一块虚拟网卡kvmbr0,并配置IP,类型为桥接DEVICE=kvmbr0TYPE=BridgeONBOOT=yesBOOTPROTO=staticIPADDR=192.168.10.10NETMASK=255.255.255.0GATEWAY=192.168.10.1DEFROUTE=yes# cat /etc/sysconfig/network-scripts/ifcfg-eth0        //宿主机自身网卡,不配IP,桥接到kvmbr0DEVICE=eth0HWADDR=00:0c:29:13:43:42TYPE=EthernetUUID=3a53422d-b30f-4623-bf50-dada471e85b3ONBOOT=yesNM_CONTROLLED=no                 //NM_CONTROLLED这个属性值,根据RedHat公司的文档是必须设置为“no”的BOOTPROTO=noneBRIDGE=kvmbr0NAME="System eth0"

2.重启宿主机网络服务

# service NetworkManager start

3.校验桥接接口

# brctl showbridge name	bridge id	STP enabled	interfaceskvmbr0	    8000.000c29134342	     no            eth0

4.vm01虚拟机网卡配置

# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0HWADDR=52:54:00:88:6A:CETYPE=EthernetUUID=d1fca21a-a8d0-4a98-87ff-ab0a1e624ce2ONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=staticIPADDR=192.168.10.20NETMASK=255.255.255.0

5.1图形配置

选择新建的kvmbr0网卡设备

如出现下面报错,需要重启宿主机来解决。

5.2命令配置:  

# vim  /etc/libvirt/qemu/vm01.xml 
      
      
      
      
    

6.总结

宿主机和虚拟机在同一网段内,vm01虚拟机就是独立于网络内的一台机器了。

Bridge方式的适用范围:服务器主机虚拟化。

NAT方式的适用范围:桌面主机虚拟化。

附1:宿主机执行以下指令虚拟机没有反应。

# virsh shutdown vm02Domain vm02 is being shutdown# virsh reboot vm02Domain vm02 is being rebooted

解决办法(虚拟机安装acpid即可):

  1. 虚拟机挂载光盘

1.1.进入宿主机桌面,利用图形管理方式让虚拟机加载系统光盘

1.2.进入vm02虚拟机,点击叹号的标志

1.3.选择光驱,连接即可。

2.挂载,配置本地源。(略)

3.安装并开启acpid服务。

# yum install acpid		  # service acpid startStarting acpi daemon: [  OK  ]

附2:宿主机重启网络服务时出现下面错误(配置bridge时)

Bringing up interface kvmbr0:  Error: Connection activation failed: Failed to determine connection's virtual interface name [FAILED]

解决办法:因为NetworkManager不支持桥接,需要关闭该服务。

# service NetworkManager stopStopping NetworkManager daemon:                   [  OK  ]				# chkconfig --list |grep NetworkManager NetworkManager 	0:off	1:off	2:on	3:on	4:on	5:on	6:off		# chkconfig NetworkManager off# chkconfig --list |grep NetworkManager NetworkManager 	0:off	1:off	2:off	3:off	4:off	5:off	6:off