一.前期准备
1.确定机器有VT
终端输入命令:
grep -E -o '(vmx|svm)' /proc/cpuinfo
如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。
2.确保BIOS里开启VT:
Intel(R) Virtualization Tech [Enabled]
使用如下命令确定
lsmod | grep kvm
如果无相关信息,手动加载下
modprobe kvm-intel
二.桥接网络
使用桥接网络,虚拟机即可与其他机器互相访问。
1.复制ifcfg-em1 为 ifcfg-br0,并将ifcfg-br0改为如下配置
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.116
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
2.原网卡ifcfg-em1只保留如下配置,其他都注释掉:
NAME=em1
DEVICE=em1
ONBOOT=yes
BRIDGE=br0
3.重启网络
systemctl restart network
三.安装kvm
1.安装kvm
yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
2.安装x-windows,使用图形界面管理虚拟机
yum groupinstall "X Window System"
yum install "@X Window System"
3.安装中文字符,解决界面乱码问题
yum install dejavu-lgc-sans-fonts
yum groupinstall "Fonts" -y
4.启动kvm
systemctl start libvirtd systemctl enable libvirtd
5.如有错误:
couldn't connect to accessibility bus failed to connect to socket /tmp/dbus
解决方法:
export NO_AT_BRIDGE=1
四.使用
1.使用virt-manager管理虚拟机,可以完成克隆,安装,开启,关闭等大部分的动作
如是ssh命令登录服务器,需加上XC参数。
如是在windows环境下通过putty登录服务器,需打开x-windows,方法如下:
在http://sourceforge.net/projects/xming/下载Xming,并安装运行。
putty.exe ==> Connection/SSH/X11 ==> X11 forwarding/Enable打勾即可,X dispaly location可以空着
2.创建预分配文件
qemu-img create -f qcow2 -o preallocation=metadata /data/test.qcow2 80G
这里也可以使用存储池来做,方便使用,步骤参考如下:
定义存储池
virsh pool-define-as optimg --type dir --target /opt/kvm
构建
virsh pool-build optimg
查看
virsh pool-list --all
开启
virsh pool-start optimg
开机自动启动
virsh pool-autostart optimg
3.让虚拟机开机自动启动
virsh list --all 查看虚拟机名称及状态
virsh autostart +虚拟机名称
设置后可在/etc/libvirt/qemu/autostart下看到已设置自动启动KVM配置文件链接
4.在桥接网络下给虚拟机做NAT
有种情况是:服务器有两张网卡,一张外网,一张内网。当我们给kvm桥接的是内网时,虚拟机只能访问内网,无法访问外网。这时就可以利用iptables做NAT,让虚拟机也能访问外网。
首先开启转发
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
配置防火墙
#虚拟机ip 192.168.1.120 公网ip 1.1.1.1 公网网卡em1
iptables -t nat -A POSTROUTING -s 192.168.1.120 -o em1 -j SNAT --to 1.1.1.1
iptables -A FORWARD -d 192.168.1.120 -j ACCEPT
iptables -A FORWARD -s 192.168.1.120 -j ACCEPT
#注意新增的iptables -A FORWARD两条链要在下面这条之上
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#如不想单独配置每个虚拟机的ip,可把192.168.1.120改为网段192.168.1.0/24
#保存配置
service iptables save
虚拟机的网关指向桥接ip,配置完成后虚拟机即可上网
GATEWAY=192.168.1.116
5.克隆虚拟机的网卡问题
如果虚拟机是centos6.x的,克隆虚拟机后会有mac地址冲突的问题,导致克隆出来的虚拟机无法启动网卡.
centos7没有这个问题.
简单的处理步骤如下
删除/etc/udev/rules.d/70-persistent-net.rules这个文件
将ifcfg-eth0文件中的mac地址和UUID这两行内容注释掉
重启虚拟机,网卡恢复正常。
如果还是无法启动,查看新产生的/etc/udev/rules.d/70-persistent-net.rules内容,并将网卡的配置文件改成相应的内容
6. 虚拟机备份问题
采用qcow2格式的虚拟机镜像,通过scp备份到其他机器时,假如文件变成预分配的大小.比如预分配一个200G的qcow2文件,实际使用20G,备份文件变成200G时,可尝试用rsync的方式避免这个问题
rsync --progress --sparse -avhze 'ssh -p12220' centos6.6-x86-1.qcow2 root@192.168.1.100:/data/backups/kvm/
建议用存储池来放镜像,另外格式还是建议使用qcow2。
7. kvm克隆问题
除了使用系统自带的virt-lone外,也可以通过cp镜像文件来实现,方法如下:
关闭虚拟机
复制镜像文件
#cp -av source.img new.img
复制模板配置文件为new.xml
#cd /etc/libvirtd/qemu
#cp -av source.xml new.xml
修改如下选项
修改虚拟机的名称,如:<name>new</name>
修改disk位置:<source file='/data1/vmdisk/new.img'/>
修改uuid编号 ,如:<uuid>de8d962a-6334-a652-f66b-4da87d852343</uuid>
修改mac地址,如:<mac address='52:54:00:11:12:1f'/>
重启libvirt
#service libvirtd restart
8. 快照使用
virsh snapshot-create-as --domain xxx xxx-snap1 --disk-only --atomic --quiesce
这里需要注意的是,如果用了快照,镜像文件会变大.
9 转换镜像格式
查看镜像文件信息
qemu-img info /var/lib/libvirt/images/ATE1.img
转换镜像文件
关闭虚拟机,将raw转换为qcow2
qemu-img convert -f raw -O qcow2 old.raw new.qcow2
修改配置文件
vim /etc/libvirt/qemu/old.xml
将disk的路径和type改下
重启libvirt服务
service libvirtd restart
10 在终端进入虚拟机
有时候想在终端上直接进入虚拟机,可以使用virsh console 命令。
进入:
virsh console + 虚拟机名称
退出:
按右ctrl + ]
11 Unable to read from monitor: Connection reset by peer
有时候宿主机重启后,再去开虚拟机会提示如上错误信息,使用如下命令处理
virsh managedsave-remove domain
重置完成后,再启动虚拟机即可.