【技术】基于CENTOS7的KVM安装

发布于 2019-03-15  5.2k 次阅读


KVM虚拟机简介

Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

1.系统

CENTOS7 X64 服务器BIOS开启虚拟化

检查CPU是否支持虚拟化

grep vmx /proc/cpuinfo

如果有vmx信息输出,就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机

2.安装KVM环境

yum -y install wget qemu-kvm qemu-img libvirt libvirt-client virt-viewer  virt-install libguestfs bridge-utils

安装包及其作用

wget              Linux下的下载程序
qemu-kvm          主要的KVM程序包
qemu-img          QEMU的磁盘管理工具
libvirt           C语言工具包,提供libvirt服务
libvirt-client    虚拟客户机提供的C语言工具包
virt-viewer       GUI连接程序,连接到已配置好的虚拟机
virt-install      基于libvirt服务的虚拟机创建命令
libguestfs        虚拟机磁盘管理工具
bridge-utils      创建和管理桥接设备的工具

启用libvirt

systemctl start libvirtd && systemctl enable libvirtd

配置KVM的网桥模式

cp ifcfg-eno1 ifcfg-br0
vi ifcfg-br0
TYPE="Bridge"                                      //这一行修改为Bridge
NAME="br0"                                         //修改设备名称为br0
#UUID=""                                           //这一行注释
DEVICE="br0"                                       //修改设备为br0

vi ifcfg-eno1
BRIDGE=br0                                         //添加这一行
#IPADDR=""                                         //注释掉这几行
#NETMASK=""
#GATEWAY=""
#DNS1=""

安装virtio驱动(Windows磁盘驱动):

wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
yum install virtio-win -y

3.创建虚拟机

创建磁盘到/home/kvm

qemu-img create -f raw template.img 100G
qemu-img create -f raw template_1.img 100G

下载镜像到/home/iso
/home/iso/cn_windows_server_2012_r2_x64_dvd_2707961.iso

生成配置文件

virt-install --name template --arch=x86_64 --ram 4096 --vcpus=4  --cdrom=/home/iso/cn_windows_server_2012_r2_x64_dvd_2707961.iso --disk path=/home/kvm/template.img,device=disk,bus=virtio --disk path=/home/kvm/template_1.img,device=disk,bus=virtio --disk path=/usr/share/virtio-win/virtio-win-0.1.141_amd64.vfd,device=floppy  --bridge=br0 --os-type=linux --os-variant=rhel5 --vnc --vncport=5910 --vnclisten=0.0.0.0

上面生成的就是一个4核4GB的虚拟机,加载前面创建的磁盘和镜像,vnc端口是5910

在VNC界面中虚拟机界面总是鼠标跟不上,这个需要修改kvm的配置文件

vi /etc/libvirt/qemu/template.xml                    //在<devices>标签中添加下面这段配置
<devices>   
......                                      
  <input type='tablet' bus='usb'/>                   //即添加这句话即可!
......    
</devices>

修改之后需要重建虚拟机

virsh destroy template
virsh create template.xml

4.其他

前面创建了一个名为template的虚拟机,安装好系统后我们可以以此为模板克隆虚拟机,命令我写成了一个shell脚本

#!/bin/bash
set -x
name=$1
port=$2
virt-clone --connect qemu:///system --original template --name $name --file /home/kvm/$name.img --file /home/kvm/$name\_1.img --auto-clone
cd /etc/libvirt/qemu
sed -i "s#<input type='mouse' bus='ps2'/>#<input type='tablet' bus='usb'/>#g" $name.xml
sed -i "s#port='-1' autoport='yes'#port='$port' autoport='no'#g" $name.xml
iptables -A INPUT -p tcp --dport $port -j ACCEPT
service iptables save
service iptables restart
virsh autostart $name
virsh create $name.xml

上面的脚本是基于iptables防火墙的,centos7默认是Firewalld防火墙,需要修改脚本或者安装iptables

脚本有两个参数,一个是虚拟机名,一个是vnc端口,运行脚本时在后面添加你需要的参数,如 ./shell.sh name port ,name和port需要写成自己需要的名字和端口号


没有你,良辰美景更与何人说