文章目录
  1. 1. Overview
  2. 2. 系统环境配置
    1. 2.1. 网络拓扑
    2. 2.2. 安装KVM
      1. 2.2.1. 确认cpu支持
      2. 2.2.2. 通过yum安装KVM
      3. 2.2.3. 加载kernel模块
      4. 2.2.4. 重启并确认内存模块加载
      5. 2.2.5. 配置网络
      6. 2.2.6. 安装xterm
  3. 3. 创建虚拟机
    1. 3.1. 创建虚拟机的磁盘
    2. 3.2. 创建虚拟机
  4. 4. 管理虚拟机
  5. 5. 克隆虚拟机
  6. 6. Reference

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:

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

通过yum安装KVM

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

加载kernel模块

1
[root@DannyGreen ~]# modprobe kvm-intel

重启并确认内存模块加载

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

配置网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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后终于看到了安装界面

1
2
3
# 不确定是否需要安装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/下。

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

创建虚拟机

1
[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]

克隆虚拟机

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

1
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
文章目录
  1. 1. Overview
  2. 2. 系统环境配置
    1. 2.1. 网络拓扑
    2. 2.2. 安装KVM
      1. 2.2.1. 确认cpu支持
      2. 2.2.2. 通过yum安装KVM
      3. 2.2.3. 加载kernel模块
      4. 2.2.4. 重启并确认内存模块加载
      5. 2.2.5. 配置网络
      6. 2.2.6. 安装xterm
  3. 3. 创建虚拟机
    1. 3.1. 创建虚拟机的磁盘
    2. 3.2. 创建虚拟机
  4. 4. 管理虚拟机
  5. 5. 克隆虚拟机
  6. 6. Reference