Centos 7下部署kvm (qemu)

上周抢到了一台Kimsufi的KS-3C特价独服,i3-2130 CPU, 8GB内存, 2TB硬盘,月付8.99欧元。性价比非常高,终于不用和其他人挤在一起啦!唯一的缺点就是无论法国还是加拿大机房,对中国的延迟都太高了,普遍300ms往上。不过实际页面打开速度还不错,加了锐速后速度更上一层楼,而且全国ping超时也不严重,所以准备长期持有做站。

不过这个配置的独服,就建几个博客太浪费,但是只有一个IP,想挂机都不给力。正好手上还有几个小内存vps,于是想到了在独服这里开几个NAT vps,然后通过那几台小内存vps上的代理挂机。这里把我创建虚拟机(vps)的过程记录下来,供大家参考。

首先安装相关软件:

yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

启动服务:

systemctl enable libvirtd && systemctl start libvirtd

接着就可以用virt-install工具,制作虚拟机实例:

virt-install --virt-type kvm --name VM0 --ram 512 --vcpus=1 \
--network network=default --cdrom /centos.iso --disk path=/vm-images/vm0.img,size=8 \
--graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6

几个参数的解释
–name: 顾名思义,虚拟机的名字。这个随便取的
–ram: 分配给这台虚拟机的内存,可以指定768M或者2G这种,不加单位就是M
–cdrom: 系统安装盘的iso文件,这里安装的是centos 6.8 minimal系统
–disk: 将要做成的虚拟机硬盘路径,以及大小(预分配),以G为单位
–graphics: 虚拟机的视频输出,这里让其输出到vnc
最后的–os-variant,这里因为要安装centos 6所以指定为rhel6。

上述命令回车后可能会出现下面的错误:

ERROR internal error: process exited while connecting to monitor:
qemu-kvm: -chardev pty,id=charserial0: Failed to create chardev

不要慌,解决方法是修改/etc/fstab,找到devpts那行,改成下面这个后重启服务器:

devpts /dev/pts devpts gid=5,mode=620 0 0

顺便提一下,如果装的是windows,则使用下列命令:

virt-install --virt-type kvm --name WIN0 --ram 2048 --vcpus=2 \
--network network=default --cdrom /win7.iso \
--disk path=/vm-images/win0.img,size=40,format=qcow2,bus=virtio,cache=none,io=native \
--graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=windows --os-variant=win7 \
--video cirrus

注意最后的–video参数,是安装win7时必须指定的,否则会卡在windows徽标处。

OK,现在centos安装程序应该被启动了。通过命令获得它监听的端口

# virsh vncdisplay VM0
:0

在本地开一个VNC客户端,连接独服的5900端口。如果是:1的话,则是5901端口,以此类推。
连上去以后,就能看到熟悉的centos 6的文本安装界面了,简单地设定一下,虚拟机重启完成了安装。
然而此时虚拟机关机后并不会自动重启,所以我们还得手动敲入命令启动……

virsh start VM0

重新通过VNC连上虚拟机,root用户登录,执行一下ifup eth0,会自动分配NAT IP给虚拟机,可以访问外网啦!
为了让虚拟化层能重启和关闭虚拟机,必须在虚拟机内安装并运行acpid服务:

yum install acpid
chkconfig acpid on
servide acpid start

OK,到这里kvm虚拟机的创建就大功告成,后面随便你怎么折腾吧!附上几个常用命令,按惯例,VM0、VM1为虚拟机名。
1、启动虚拟机
virsh start VM0

2、关闭虚拟机(虚拟机是Linux的话需要启动acpid才有效)
virsh shutdown VM0

3、强行终止虚拟机
virsh destroy VM0

4、删除虚拟机
virsh undefine VM0
然后rm掉对应的虚拟硬盘文件。

5、克隆虚拟机

virsh suspend VM0
virt-clone --connect qemu:///system --original VM0 --name VM1 --file /vm-images/vm1.img
virsh resume VM0
virsh start VM1

附上一个探针截图看看效果(开了5个虚拟机):
Running_5_VMs

附送一个优化虚拟机IO的小Tips:
可能你会发现稍微开多几个虚拟机,Host的系统负载就会狂飙,就像上图那样。实际上我达到过70几的负载,整个虚拟机都卡得动不了。
这时就需要修改虚拟机的配置文件,给虚拟硬盘加几个io相关的参数。下面以VM0为例:

# virsh --connect qemu:///system
> edit VM0

执行上述命令后,就进入了VM0的配置文件。找到下面这段,往硬盘的driver标签中加入下文的cache和io属性。

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='writeback' io='native'/>
      <source file='/vm-images/vm0.img'/>
      <target dev='vda' bus='virtio'/>

对所有虚拟机都做同样改动。然后启动虚拟机,会发现系统负载下来了好多。

References:
[1] http://docs.openstack.org/zh_CN/image-guide/content/virt-install.html
[2] https://linux.dell.com/files/whitepapers/KVM_Virtualization_in_RHEL_7_Made_Easy.pdf
[3] https://raymii.org/s/articles/virt-install_introduction_and_copy_paste_distro_install_commands.html
[4] http://serverfault.com/questions/407842/incredibly-slow-kvm-disk-performance-qcow2-disk-files-virtio

本文为悠然居(https://wordpress.youran.me/)的原创文章,转载请注明出处!

One thought on “Centos 7下部署kvm (qemu)”

Leave a Reply

Your email address will not be published. Required fields are marked *