RHEL 6.3 KVM虚拟化
1、安装RHEL 6.3 X_86操作系统,在安装界面中选择,在安装服务类型时选择“虚拟化”,不安装桌面版,节省硬件资源占用,通过命令操作虚拟机,或是先运行到runleve5,再安装好虚拟机后切换到runlevel3下。
2、系统配置
  #防火墙规则清除(建议清除)
  [root@localhost network-scripts]# iptables -F
  [root@localhost network-scripts]# iptables -L 
  Chain INPUT (policy ACCEPT)
  target  prot opt source      destination   
  
  Chain FORWARD (policy ACCEPT)
  target  prot opt source      destination   
  
  Chain OUTPUT (policy ACCEPT)
  target  prot opt source      destination   
  [root@localhost network-scripts]# service  iptables  save 
 #查看加载了kvm和kvm_intel的模块
 [root@localhost network-scripts]#  lsmod|grep kvm 
  kvm_intel     52570  6 
  kvm       314739  1 kvm_intel
3、安装成功后,进入系统,查看KVM安装状态,及主服务配置检查
  #安装KVM,最主要是添加4个组包
   @virtualization     //提供虚拟机的环境,主要包含qumu-kvm
   @virtualization-client    //管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer
   @virtualization-platform  //提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client
   @virtualization-tools  //管理离线虚拟机镜像的工具,主要有libguestfs根据需求选择软件包,一般都安装1,2,3 ,利用yum groupinstall "Virtualization" "Virtualization Client""Virtualization Platform"
  
  #查看KVM是否成功安装
  [root@localhost network-scripts]# virsh -c qemu:///system list 
   Id 名称       状态
  ----------------------------------------------------
  
  #查看libvirtd服务是否开杨自启动
  [root@localhost network-scripts]# chkconfig --list libvirtd
  libvirtd  0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭
  [root@localhost network-scripts]# chkconfig  libvirtd  on   //可使用该命令打开自启动level级别
  
  #查看libvirtd服务运行状态
  [root@localhost network-scripts]# service libvirtd status
  libvirtd (pid  2297) 正在运行...
  
4、网卡桥接配置   
  #为了让虚拟机作为独立主机提供服务,需要让其桥接上网,所以我们需要对eth0网卡配置成一个桥接网络,首先我们需要安装一个软件包:bridge-utils,可以通过 rpm -qa bridge-utils 查看是否已经安装。
  #新建br0虚拟桥接接口,操作如下
  [root@localhost network-scripts]# pwd
  /etc/sysconfig/network-scripts
  [root@localhost network-scripts]# cp ifcfg-eth0  ifcfg-br0 
  [root@localhost network-scripts]# cat ifcfg-br0 
  DEVICE=br0
  BOOTPROTO=static
  ONBOOT=yes
  TYPE=Bridge
  NAME="System br0"
  IPADDR=192.168.0.200
  NETMASK=255.255.255.0
  GATEWAY=192.168.0.1
  NETWORK=192.168.0.0
  
  #修改eth0物理硬件网络配置文件,配置如下
  [root@localhost network-scripts]# cat ifcfg-eth0 
  DEVICE=eth0
  #BOOTPROTO=none
  #NM_CONTROLLED=yes
  ONBOOT=yes
  TYPE=Ethernet
  #UUID="fc12c3ed-7942-4c7f-bb8a-152255718246"
  HWADDR=00:1e:0b:1f:f4:18
  DEFROUTE=yes
  PEERROUTES=yes
  IPV4_FAILURE_FATAL=yes
  IPV6INIT=no
  NAME="System eth0"
  #IPADDR=192.168.0.200
  #NETMASK=255.255.255.0
  #GATEWAY=192.168.0.1
  #DNS1=192.168.0.1
  USERCTL=no
  BRIDGE=br0
  
  #查看虚拟桥接接口
  [root@localhost network-scripts]# brctl show
  bridge name  bridge id      STP enabled  interfaces
  br0    8000.001e0b1ff418    no     eth0 
  virbr0    8000.5254001bcb42    yes    virbr0-nic  //系统默认生成接口主要用于NAT,如果要删除可以先ifconfig virbr0 down接口,然后利用brctl delbr virbr0删除掉即可
  #其实我们在虚拟机搭建的时候,我们最终关心的网卡是: eth0, br0, vnet0,vnet1… 其中,我们的eth0是原来的物理网卡,br0是我们虚拟出来的桥设备,而vnetXXX就是桥接映射到虚拟机里面用到的网卡。当配置完了之后,我们使用ifconfig,查看起来的话,eth0是没有ip地址的,而br0仿佛是虚拟出来的一个原来eth0的访问接口,它具有ip地址,可以代替原来的eth0被访问,而vnetXX的地址可以在建立虚拟机之后在虚拟机里面配置,桥接后可以被外部访问。
  #没有虚拟机运行的时候,vnet*是看不到的,只有运行虚拟以后才会看到:如下
  [root@localhost qemu]# brctl show
  bridge name  bridge id      STP enabled  interfaces
  br0    8000.00e066446b42    no     eth0
                vnet0
  virbr0    8000.52540040831e    yes    virbr0-nic
  
5、虚拟机安装   
  [root@localhost ~]# virt-install  -v --name=tt-test1 --ram=1024 --vcpus=1 --disk path=/home/kvmimg/tt-test1.img,size=20 --network bridge=br0 --cdrom=/dev/sr0 --autostart  --connect qemu:///system 
  #我的安装选择使用本地的光驱安装:/dev/sr0,如果以上为在图形界面下的安装方式,会自动弹出安装界面,加--nographics参数不会自动弹出窗口,--network bridge=br0使用哪个接口桥接虚拟机网络,--location=ftp://192.168.0.200/rhel6_dvd/远程安装文件,--autostart 让虚拟机随系统启动而启动,如果在字符界面下会找不到输出端,可以设置KS-cfg文件实现静默安装。可在桌面环境下安装一个模板虚拟后,在把宿主机切到字符界面runlevel3,用virt-clon命令克隆虚拟机。
  #虚拟机的配置文件保存在/etc/libvirt/qemu目录下,扩展名是xml,这文件只能用virsh edit来编辑用vi无效,修改相应的文件即可重新配置虚拟机。  
  [root@localhost ~]# virt-install --help  //可查看简要的安装参数介绍
  [root@localhost ~]# man virt-install   //可查看详细的man手册
  #源主机网络配置,因为clone后,/etc/sysconfig/network-scripts/ifcfg-eth0仍然为源主机的MAC,所以需要脚本配合修改ifcfg-eth0的MAC才能成功访问新主机。
  #删除配置文件,让系统在clone后再启动时重新生成
  [root@localhost qemu]# rm -rf /etc/udev/rules.d/70-persistent-net.rules 
  #根据/etc/udev/rules.d/70-persistent-net.rules中的MAC自动修改/etc/sysconfig/network-scripts/ifcfg-eth0中的MAC
  [root@localhost ~]# cat replace.sh 
  #!/bin/bash  
  newmac=`grep ATTR /etc/udev/rules.d/70-persistent-net.rules   | cut -d, -f4 |cut -d\" -f2 `
  old=`grep HWADDR /etc/sysconfig/network-scripts/ifcfg-eth0  |cut -d= -f2 `
  sed -i "s/$old/$newmac/g" /etc/sysconfig/network-scripts/ifcfg-eth0
  rm -rf /etc/udev/rules.d/70-persistent-net.rules
  rm -rf /root/replace.sh
  reboot
  #将脚本加入到自启动执行
  [root@localhost ~]# cat /etc/rc.local 
  #!/bin/sh
  #
  # This script will be executed *after* all the other init scripts.
  # You can put your own initialization stuff in here if you don't
  # want to do the full Sys V style init stuff.
  
  touch /var/lock/subsys/local
  /root/replace.sh      
  
6、虚拟机克隆
 //源主机必须为关闭或是暂停的状态  
  root@localhost ~]# virt-clone -o tt-test2 -n tt-test3 -f /home/kvmimg/tt-test3.img 
  正在克隆 tt-test2.img         76% [===============================    ]  68 MB/s |  15 GB  01:10 ETA 
  
7、虚拟机管理(以下命令同样适用的Xen server管理)
  //打开图形化界面进行管理 
  [root@localhost ~]# virt-manager  //也可从桌面“应用程序”“系统工具”“虚拟系统管理器”进入
  //设置主机引导时启动虚拟机
  [root@localhost ~]# virsh  autostart    tt-test2
  //启动虚拟机  
  [root@localhost ~]# virsh  start    tt-test2 
  域 tt-test2 已开始
  //关闭虚拟机  
  [root@localhost ~]# virsh  shutdown    tt-test2  
  域 tt-test2 被关闭      
  //查看当前运行的主机
  [root@localhost ~]# virsh list 
   Id 名称       状态
  ----------------------------------------------------   
   1  tt-test2        running   
  //打开终端显示   
  [root@localhost ~]# virt-viewer  tt-test2
  //更多使用方法
  [root@localhost ~]# virsh --help  
  //更多的虚拟机控制命令,详情man command查看  
  [root@localhost ~]# virt- 
  virt-clone    virt-host-validate  virt-install  virt-pki-validate   virt-viewer   virt-who
  virt-convert  virt-p_w_picpath    virt-manager  virt-top   virt-what     virt-xml-validate