目录
KVM 工作原理
用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。KVM Driver 为
虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAUNCH 指令进入客户模式,装载 Guest
OS 并运行。Guest OS 运行过程中如果发生中断或者影子缺页等异常,将暂停 Guest OS
的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不
需要 I/O 则处理完成后重新进入客户模式。如果需要 I/O 则进入到用户模式,由 Qemu 来处
理 I/O,处理完成后进入内核模式,再进入客户模式
确认CPU支持虚拟化技术:
执行命令检查CPU是否支持Intel VT-x或AMD-V:
grep -E 'vmx|svm' /proc/cpuinfo
如果输出中包含vmx(Intel)或svm(AMD),则表示CPU支持虚拟化技术。
关闭NetworkManager服务:
为避免不明错误,关闭NetworkManager服务:
systemctl stop NetworkManager
systemctl disable NetworkManager
方法一安装KVM
安装必要的软件包:
使用yum安装KVM及相关组件:
yum install -y qemu-kvm qemu-img libvirt libvirt-python virt-manager libvirt-client virt-install bridge-utils
启动并设置libvirtd服务开机自启:
systemctl start libvirtd
systemctl enable libvirtd
方法2 YUM 安装 KVM
在 CentOS 的系统光盘镜像中,已经提供了安装 KVM 所需软件。通过部署基于光盘镜
像的本地 YUM 源,直接使用 YUM 安装所需软件即可,安装 KVM 所需软件具体包含以下
几个。
yum groupinstall -y "GNOME Desktop" //安装 GNOME 桌面环境
yum -y install qemu-kvm //KVM 模块
yum -y install qemu-kvm-tools //KVM 调试工具,可不安装
yum -y install virt-install //构建虚拟机的命令行工具
yum -y install qemu-img //qemu 组件,创建磁盘、启动虚拟机等
yum -y install bridge-utils //网络支持工具
yum -y install libvirt //虚拟机管理工具
yum -y install virt-manager //图形界面管理虚拟
需要注意的是:在使用 YUM 安装完桌面后执行 ln -sf
/lib/systemd/system/graphical.target /etc/systemd/system/default.target 命令,将系统的默
认运行 target 更改为 graphical.targe。重启后系统将进入图形化界面。若不执行上述命令更
改系统的默认运行 target,重启时可能报错。
验证
重启系统后,查看 CPU 是否支持虚拟化,对于 Intel 的服务器可以通过以下命令查看,
只要有输出就说明 CPU 支持虚拟化;AMD 服务器可用 cat /proc/cpuinfo | grep smv 命令查
看。
[root@bdqn ~]# cat /proc/cpuinfo | grep vmx
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush
dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl
xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1
sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm ida arat epb pln pts
dtherm tpr_shadow vnmi ept vpid tsc_adjus
检查 KVM 模块是否安装:
[root@bdqn ~]# lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
配置 KVM 网络
宿主服务器安装完成 KVM,首先要设定网络,在 libvirt 中运行 KVM 网络有两种方法:
NAT 和 Bridge,默认是 NAT。
关于两种网络模式的说明:
Ø 用户模式,即 NAT 方式,这种方式是默认网络,数据包由 NAT 方式通过主机的网卡接
口进行传送,可以访问外网,但是无法让外部主机访问虚拟机内部网络。
Ø 桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接
访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。
这里以 Bridge(桥接)为例进行操作演示。注:宿主机 IP 地址为 192.168.10.1 。
[root@bdqn ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
第 8 页 共 24 页
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=58b0765c-572c-4f63-89a7-1bf720b1fab0
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
[root@bdqn ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
重启 network 服务。
[root@bdqn ~]# /etc/init.d/network restart
第 9 页 共 24 页
Restarting network (via systemctl): [ OK ]
确认 IP 地址信息。
[root@bdqn ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::3362:2f44:ebd1:62e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:3a:81:cc txqueuelen 1000 (Ethernet)
RX packets 3 bytes 234 (234.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19 bytes 2613 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:3a:81:cc txqueuelen 1000 (Ethernet)
RX packets 200 bytes 17407 (16.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 184 bytes 24024 (23.4 KiB)
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 550 bytes 47778 (46.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 550 bytes 47778 (46.6 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:64:3e:58 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
virt-manager 是基于 libvirt 的图像化虚拟机管理软件。需要注意的是,不同发行版上的
virt-manager 版本可能有所不同,图形界面和操作方法也可能不同。本文使用了 CentOS
7.3。创建 KVM 虚拟机最简单的方法是通过 virt-manager 接口。从控制台窗口启动这个工
具,以 root 身份输入 virt-manager 命令,出现如图
虚拟化管理步骤如下。
(1)创建存储池
双击 QEMU/KVM,选择“存储”选项卡,然后单击“+”按钮新建存储池。如图所示,单
击“前进”按钮,根据提示输入或浏览用以设置存储目录,如/data_kvm/store,最后单击“完成”
按钮即可。
(2)创建镜像存储池
以同样的操作创建一个镜像存储池,命名为 bdqn_iso,目录为/data_kvm/iso 即可。在
安装操作系统时,需要把镜像上传到服务器目录/data_kvm/iso,如图
(3)创建存储卷
单击刚创建好的“bdqn”,单击对话框中“卷”右边的 “+”按钮建立一个存储卷,并设置最
大容量,如图
(4)新建虚拟机
单击“完成”按钮后,回到虚拟系统管理器。右击“QEMU/KVM”,然后选择“新建”选项,
在弹出的对话框中按图 1.8 所示选择“本地安装介质”,然后单击“前进”按钮。
单击“浏览”按钮选择镜像文件,再选择操作系统型及版本,如图
单击“前进”按钮,在图所示的对话框中适当分配内存和 CPU 资源,如 1 核 CPU、
1GB 内存。
单击“前进”按钮,在如图 所示的对话框中点选“选择或创建自定义存储”单选按钮,
单击“管理”按钮选择文件,然后单击“前进”按钮。
在如图所示将虚拟机名称命名为“CentOS 7.3“,并勾选话框中的“在安装前自定义
配置”复选框,单击“完成”按钮,弹出如图
在“引导选项”视图中勾选“主机引导时启动虚拟机”复选框,这样在物理宿主机启动后,
这个 VM 也会启动,最后单击“应用”按钮,如图
最后单击“开始安装”按钮即可,整个虚拟化配置过程完成。下面就是安装操作系统的工
作,和平时安装 Linux 系统一样