Linux服务器应用KVM实现虚拟化


安装

Ubuntu 11.10 server x86_84

检查CPU是否支持虚拟化技术
egrep -o '(vmx|svm)' /proc/cpuinfo
vmx
vmx
显示VMX表示支持
安装KVM
apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils
测试运行环境
kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
表示运行正常.
INFO: /dev/kvm does not exist(/dev/kvm不存在)
HINT: sudo modprobe kvm_intel
INFO: Your CPU supports KVM extensions(你的处理器支持KVM扩展)
INFO: KVM (vmx) is disabled by your BIOS(KVM [vmx]被你的BIOS禁用)
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),(进入你的BIOS设置界面,启用虚拟化技术[VT],)
and then hard poweroff/poweron your system(然后对你的系统执行硬关机/开机操作)
KVM acceleration can NOT be used(KVM加速无法使用)
表示需要再bios中开启虚拟化功能.
检查运行状态
virsh -c qemu:///system list
Id Name State
----------------------------------
表示运行正常.
安装vncserver,用于图形化管理虚拟机管理器
apt-get install vnc4server
vncserver
用VNC客户端连接ip:5901
使用虚拟机管理器创建虚拟机
再vnc客户端使用一下命令启动虚拟机管理器
virt-manager -c qemu:///system localhost
启动后,创建虚拟机安装即可.
远程管理和CLI
PC机安装virt-manager,可进行远程管理(需要安装ssh-askpass)
virt-manager -c qemu+ssh://192.168.1.210/system

重载iptables后如果出现虚拟机nat连接的网络无法访问,可以先关闭虚拟机,重启libvirt-bin再开启虚拟机
service libvirt-bin restart
ubuntu使用桥接方式让虚拟机连接网络
使用桥接方式:虚拟机和真实机处于同一对等网络(需要给虚拟机配置与真实机同一网段的IP).
#增加桥接接口(先安装bridge-utils)
vi /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
bridge_ports eth0
        address 183.62.9.66
        netmask 255.255.255.248
        network 183.62.9.64
        broadcast 183.162.9.71
        gateway 183.62.9.65

即把原来eth0的ip配置给br0,bridge_ports中加入eth0.
#配置好后重启网络
/etc/init.d/networking restart
#检查桥接
brctl show
#STP说明
STP(生成树协议).如果只有一个路由器,是绝对不可能形成一个环的.
所以可以关闭这个功能.(这样也可以减少网络环境的数据包污染): 
brctl stp br0 off
完成网络配置后,在创建虚拟机时,网络选择桥接,并速度br0 即可,安装好虚拟机后再给虚拟机的系统配置好网络即可.

CentOS 6.3 x86_64 (32位无法安装)

安装
yum groupinfo 'Virtualization' 'Virtualization Client' 'Virtualization Platform' ##查看需要安装的软件包
virt-manger与virt-viewer是基于X Window的图形化管理工具,优点呢就是操作简单、鼠标点点,坏处自然就是要装一堆图形组件,对于服务器来说这些东西有些太多余。
服务器上最好用的当然是命令行工具
yum install libvirt-client python-virtinst
libvirt-client 提供了 virsh,主要功能为:启动、重启、停止等管理功能。
python-virtinst 提供了 virt-install 安装工具。

yum -y groupinstall 'Virtualization' 'Virtualization Client' 'Virtualization Platform' ##安装
软件包安装完毕后,加载KVM模块
# modprobe kvm
检查
# lsmod |grep kvm
如果显示两行,说明模块正确加载
kvm_intel 47790 0
kvm 300762 1 kvm_intel
如果只显示一行,请检查cpu是否支持VT技术,bios中是否将cpu的VT开启
安装vnc
yum install tigervnc-server
yum install xorg-x11-twm
yum install xterm
检查运行状态
virsh -c qemu:///system list
Id Name State
----------------------------------
表示运行正常.
桥接
/etc/init.d/NetworkManager stop
chkconfig NetworkManager off
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.100.30
PREFIX=24
GATEWAY=192.168.100.1
DNS1=114.114.114.114
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=br0
vi /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
service network restart
关闭selinux后报错:
unsupported configuration: Unable to find security driver for label selinux
vi /etc/libvirt/qemu.conf
security_driver = "none"
rm -rf /var/lib/libvirt/qemu/save/*
/etc/init.d/libvirtd restart
使用虚拟机管理器创建虚拟机
用VNC客户端连接ip:5901
再vnc客户端使用一下命令启动虚拟机管理器
virt-manager -c qemu:///system localhost
启动后,创建虚拟机安装即可.
问题处理
#启动后如果出现乱码
yum install dejavu-lgc-sans-fonts

#如果用nat连接网络的,virbr0消失了解决办法
先停止 dnsmasq:service dnsmasq stop
再运行:virsh net-start default
查看下ifconfig,查看netstat -nalp|grep dnsmasq
virsh 命令快速参考
virsh+命令+虚拟机id

virsh 命令行选项的快速参考

help打印基本帮助信息。
list列出所有客户端。
dumpxml输出客户端 XML 配置文件。
create从 XML 配置文件生成客户端并启动新客户端。
start启动未激活的客户端。
destroy强制客户端停止。
define为客户端输出 XML 配置文件。
domid显示客户端 ID。
domuuid显示客户端 UUID。
dominfo显示客户端信息。
domname显示客户端名称。
domstate显示客户端状态。
quit退出这个互动终端。
reboot重新启动客户端。
restore恢复以前保存在文件中的客户端。
resume恢复暂停的客户端。
save将客户端当前状态保存到某个文件中。
shutdown关闭某个域。
suspend暂停客户端。
undefine删除与客户端关联的所有文件。
migrate将客户端迁移到另一台主机中。

使用以下 virsh 命令管理客户端及管理程序资源:
命令Description
setmem为客户端设定分配的内存。
setmaxmem为管理程序设定内存上限。
setvcpus修改为客户端分配的虚拟 CPU 数目。
vcpuinfo显示客户端的虚拟 CPU 信息。
vcpupin控制客户端的虚拟 CPU 亲和性。
domblkstat显示正在运行的客户端的块设备统计。
domifstat显示正在运行的客户端的网络接口统计。
attach-device使用 XML 文件中的设备定义在客户端中添加设备。
attach-disk在客户端中附加新磁盘设备。
attach-interface在客户端中附加新网络接口。
detach-device从客户端中分离设备,使用同样的 XML 描述作为命令attach-device。
detach-disk从客户端中分离磁盘设备。
detach-interface从客户端中分离网络接口。

这些是其它 virsh 选项:
命令Description
version显示 virsh 版本
nodeinfo有关管理程序的输出信息