检查CPU是否支持硬件虚拟化
在开始安装KVM之前,需要检查系统中的CPU是否支持硬件虚拟化的特性,执行下面的命令:
grep -E '(vmx|svm)' /proc/cpuinfo
观察输出结果中是否包含vmx或svm,如果没有输出信息或者不包含vmx或svm,则说明不支持硬件虚拟化。
安装KVM和其关联的包
运行下面的命令来安装KVM和其相关联的包(以管理员权限安装):
sudo yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils
安装完成后,输出内容:
已安装: libvirt.x86_64 0:3.2.0-14.el7_4.3 libvirt-client.x86_64 0:3.2.0-14.el7_4.3 libvirt-python.x86_64 0:3.2.0-3.el7_4.1 virt-install.noarch 0:1.4.1-7.el7 virt-manager.noarch 0:1.4.1-7.el7 virt-viewer.x86_64 0:5.0-7.el7 作为依赖被安装: gnutls-dane.x86_64 0:3.3.26-9.el7 gnutls-utils.x86_64 0:3.3.26-9.el7 ldns.x86_64 0:1.6.16-10.el7 libvirt-daemon-config-nwfilter.x86_64 0:3.2.0-14.el7_4.3 libvirt-daemon-driver-lxc.x86_64 0:3.2.0-14.el7_4.3 python-ipaddr.noarch 0:2.1.11-1.el7 unbound-libs.x86_64 0:1.4.20-34.el7 virt-manager-common.noarch 0:1.4.1-7.el7
启动和启用 libvirtd 服务
执行:
systemctl start libvirtd
结果:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or units. Authenticating as: root Password: ==== AUTHENTICATION COMPLETE ===
执行:
systemctl enable libvirtd
结果:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files === Authentication is required to manage system service or unit files. Authenticating as: root Password: ==== AUTHENTICATION COMPLETE === ==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon === Authentication is required to reload the systemd state. Authenticating as: root Password: ==== AUTHENTICATION COMPLETE ===
检查KVM模块是否正确加载
lsmod | grep kvm
其结果应该包含如下两条内容:
kvm_intel 170086 0 kvm 566340 1 kvm_intel
如果不包含 kvm_intel,则说明BIOS中的CPU设置 Intel Virtual Technology 没有启用,需要启用。
启动Virt Manager
执行以下命令,启动vir manager,virt manager是一个图形化界面:
virt-manager
打开的图形窗口如下所示:
配置桥接方式(Bridge Interface)
如果需要在虚拟网络连接之外的地方访问虚拟机,就需要配置该种方式的网络链接。
首先拷贝一份配置文件,注意这个文件“ifcfg-enp3s0”,可能有些版本这个文件的名称是不同的,根据文件名称的形式应该能够识别出来。
cd /etc/sysconfig/network-scripts/ cp ifcfg-enp3s0 ifcfg-br0
原文件内容为:
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPADDR=192.168.0.251 GATEWAY=192.168.0.1 NETMASK=255.255.255.0 DNS1=192.168.0.1 IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp3s0" UUID="99244a4d-8cac-4023-9a09-8e50c547cd3a" DEVICE="enp3s0" ONBOOT="yes"
修改后的文件内容:
sudo vi ifcfg-enp3s0 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp3s0" UUID="99244a4d-8cac-4023-9a09-8e50c547cd3a" DEVICE="enp3s0" ONBOOT="yes" BRIDGE="br0"
修改桥接文件内容:
sudo vi ifcfg-br0 TYPE="Bridge" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPADDR=192.168.0.201 GATEWAY=192.168.0.1 NETMASK=255.255.255.0 DNS1=192.168.0.1 IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" UUID="99244a4d-8cac-4023-9a09-8e50c547cd3a" DEVICE="br0" ONBOOT="yes"
使用桥接方式设置网络链接,配置的操作系统就相当于处于宿主机所在局域网中的一台独立的主机,因此,配置时网管、DNS等要与宿主机一致。而IP地址则随便配置一个尚未分配的即可。
重启网络服务,启用这些配置:
systemctl restart network
重启之后查看网络连接信息:
@iflysse packages]$ ifconfig br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.251 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::8b3:3ff:fe3f:4da8 prefixlen 64 scopeid 0x20<link> ether b0:6e:bf:bb:12:ad txqueuelen 1000 (Ethernet) RX packets 2395927 bytes 3139412719 (2.9 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1143045 bytes 69576537 (66.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether b0:6e:bf:bb:12:ad txqueuelen 1000 (Ethernet) RX packets 9658569 bytes 3628451207 (3.3 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1157607 bytes 70419297 (67.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 4863 bytes 483460 (472.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4863 bytes 483460 (472.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:14:bd:2f txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
并且能够正常访问网络,说明配置成功。
开始创建虚拟机
使用如下命令打开图形窗口:
virt-manager
在文件选项中点击“新建虚拟机”:
我这里使用ISO文件进行安装,接下来选择镜像文件的路径:
点击下一步,选择内存和CPU资源:
然后选择硬盘,此处由于默认位置太少,所以重新选择一个存储池。点击窗口左侧列表下面的绿色的加号,会出现添加新存储池的窗口:
选择一个新的存储池的位置,我的系统中home目录空间比较大,因此我就放在我的目录下:
完成之后点击右侧窗口上半部分的加号,创建镜像文件:
在弹出来的添加存储卷窗口中设置文件名称和格式以及大小:
创建完成后,选择该文件即可:
点击选择卷即可。
然后继续前进,设置虚拟机名称和网络链接方式,然后点击完成,即可启动虚拟机。