在CentOS 6上安装部署KVM虚拟机


Overview

很多新的开源库对kernel的要求是3.0+,对gcc的要求是4.8+,但是我的开发机用的是旧版本的CentOS 6,升级kernel和gcc比较麻烦,因此在由于要不要一步到位升级成CentOS 7。CentOS 7修改了一些系统管理方面的应用,由于不太熟悉,所以不大想升级。正好后面考虑自己搞个小集群玩玩,于是准备研究一下虚拟化技术。

系统选型方面由于没装X,放弃了比较常见的virtualbox和vmware等老牌虚拟机技术。主要考虑两个,一个是老牌企业级虚拟化技术Xen和Linux本身主推的KVM技术。

最终选定的是KVM,主要原因是,Xen被收购之后和RedHat的使用免费服务收费模式一样,尽管Xen历史更久更成熟,还是放弃了Xen。而且Xen本身被踢出了CentOS 6的默认安装,并且采用编译内核的方式,侵入性太高。而KVM是Linux主推的技术,本身集成性已经比较好了,而且安装也比Xen方便一些,所以简单起见,还是选择了KVM。

系统环境配置

网络拓扑

理想条件的家里网络拓扑图
网络的话,虚拟机桥连宿主机网卡和路由器相连,这样可以实现从工作地方便访问虚拟机的目的,互联也方便。

安装KVM

确认cpu支持

理论上现代的intel服务器cpu都支持KVM,特别是x86_64架构的cpu。需要确认一下cpu是否有vmx指令集,AMD信仰系列的话叫svm:

[root@DannyGreen ~]# grep vmx /proc/cpuinfo

通过yum安装KVM

[root@DannyGreen ~]# yum install -y kvm virt-* libvirts bridge-utils qemu-img

加载kernel模块

[root@DannyGreen ~]# modprobe kvm-intel

重启并确认内存模块加载

[root@DannyGreen ~]# reboot
[root@DannyGreen ~]# lsmod | grep kvm
kvm_intel              55624  0 
kvm                   341551  1 kvm_intel

配置网络

[root@DannyGreen ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE=br0
HWADDR=78:e3:b5:08:82:54
TYPE=Bridge
UUID=fcf1edd7-40a6-429a-aa33-32eae87a480a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.199.14
NETMASK=255.255.255.0
GATEWAY=192.168.199.1
DNS1=192.168.199.1
IPV6INIT=no
USERCTL=no
[root@DannyGreen ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=78:e3:b5:08:82:54
TYPE=Ethernet
UUID=fcf1edd7-40a6-429a-aa33-32eae87a480a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
BRIDGE=br0
IPV6INIT=no
USERCTL=no

[root@DannyGreen ~]# service network restart

至此,KVM宿主机的系统环境就部署好了。

安装xterm

在纯命令行创建虚拟机时,出不来安装界面,错误提示:

cpu0 disabled perfctr wrmsr: 0xc1 data 0xffff

网上信息比较少,也不知道在说啥,只有一个比较靠谱,大概问题就是要想用libvirtd,必须得有x环境才行。我在windows上得装一个Xming,然后ssh客户端(xshell)开启x11转发,用xterm才看到安装界面。用xterm安装时终于见到了安装界面,其实上面那段提示一点关系都没有,主要问题就是纯文本模式显示不出来……
使用xterm后终于看到了安装界面

# 不确定是否需要安装x window,因为之前打算装gnome了,结果只要xterm就搞定了
[root@DannyGreen ~]# yum groupinstall -y 'X Window System'
[root@DannyGreen ~]# yum install -y xterm

update: MacOS下可以用XQuartz来启动xterm。在XQuartz的terminal里直接输入ssh -Y [host]就可以登录了。

创建虚拟机

创建虚拟机的磁盘

由于我/home分区的磁盘空间最大,所以我的镜像主要放在/home/kvmdisk/下。

[root@DannyGreen ~]# qemu-img create -f qcow2 -o preallocation=metadata /home/kvmdisk/centos7.img 50G

创建虚拟机

[root@DannyGreen ~]# virt-install --name=centos7 --ram 4096 --vcpus=4 -f /home/kvmdisk/centos7.img --cdrom=/home/kvmdisk/CentOS-7-x86_64-Minimal-1503-01.iso --arch=x86_64 --os-type=linux --bridge=br0

执行命令之后会启动virt-manager进行安装,注意这里一定要X环境才能看得见……之后就和正常安装系统一样,网络配置方法和真机差不多。

管理虚拟机

  • 开机virsh start [name]
  • 关机virsh shutdown [name]
  • 强制关闭virsh destroy [name]
  • 查看全部虚拟机virsh list --all
  • 删除虚拟机virsh undefine [name]
  • 修改虚拟机配置virsh edit [name]

克隆虚拟机

在原始虚拟机关闭的情况下,就可以克隆虚拟机了:

virt-clone --original=datanode0 --name=datanode1 --file=/home/kvmdisk/datanode1.img

克隆好虚拟机之后因为是完全克隆的,所以网卡配置啥的是和源机器一样,所以还得改一下,这里用virsh console登陆之后,首先打开文件/etc/udev/rules.d/70-persistent-net.rules,这里有两个eth0的MAC地址,一般第一个是源机器的,删了就行,然后修改/etc/sysconfig/network-scripts/ifcfg-eth0,将MAC改成另外一个,这个也可以通过virsh edit [name]查询到,UUID不知道不改行不行,反正顺手改了吧,然后重启虚拟机,网卡就能用了。

看到网上文章说直接cp镜像文件,然后添加一个xml配置也能克隆虚拟机,但是我试过是不行的,镜像文件是个空洞文件,拷贝完实际大小和原始不一样,也不清楚是为什么。虽然执行virt-clone时间很久,我250G的镜像要克隆1小时多,但好歹能用……

Reference

  1. Centos6.5 x86_64系统安装kvm虚拟机—基础篇
  2. Centos6.5系统安装kvm虚拟机之克隆、拷贝文件安装新虚拟机
  3. 通过 libvirt和convirt来管理 KVM 虚拟机
  4. Redhat/CentOS6.2 x86系统KVM虚拟机网络配置NAT方式
  5. CentOS Linux解决Device eth0 does not seem to be present

文章作者: Odin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Odin !
  目录