KVM是Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中,硬件需要支持VT技术(如Intel VT技术或者AMD V技术)。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少,KVM目前已成为学术界的主流VMM之一。本篇博客将介绍部署虚拟化环境、创建虚拟机实例,以及虚拟机的基本管理。
搭建KVM虚拟化平台
搭建KVM最简单的方法就是在安装系统的时候,选择桌面安装,然后选择虚拟化选项,KVM平台就随着系统的安装自动就搭建成功了。
如果需要在已有的系统上搭建KVM平台,安装的步骤如下:
(1)安装KVM所需软件
1
2
3
4
5
6
7
8
|
[root@localhost ~]
# yum -y groupinstall "Desktop" //安装GNOME桌面环境
[root@localhost ~]
# yum -y install qemu-kvm.x86_64 //KVM模块
[root@localhost ~]
# yum -y install qemu-kvm-tools.x86_64 //KVM调试工具,可不安装
[root@localhost ~]
# yum -y install python-virtinst.noarch //python组件,记录创建VM时的xml文件
[root@localhost ~]
# yum -y install qemu-img.x86_64 //qemu组件,创建磁盘、启动虚拟机等
[root@localhost ~]
# yum -y install bridge-utils.x86_64 //网络支持工具
[root@localhost ~]
# yum -y install libvirt //虚拟机管理工具
[root@localhost ~]
# yum -y install virt-manager //图形界面管理虚拟机
|
(2)检查KVM模块是否安装
1
2
3
|
[root@localhost ~]
# lsmod | grep kvm
kvm_intel 54285 0
kvm 333172 1 kvm_intel
|
(3)设置KVM网络
宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认为NAT
用户模式(NAT):这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外网访问虚拟机网络
桥接模式(Bridge):这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的主机可以直接访问到虚拟机内部
这里的网络配置为桥接模式Bridge
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
[root@localhost ~]
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:0c:29:1c:b4:fb
ONBOOT=
yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0
[root@localhost ~]
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Ethernet
ONBOOT=
yes
NM_CONTROLLED=no
BOOTPROTO=static
TYPE=Bridge
IPADDR=192.168.1.1
NETMASK=255.255.255.0
[root@localhost ~]
# service network restart
正在关闭接口 br0: [确定]
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
弹出界面 br0: Determining
if
ip address 192.168.1.1 is already
in
use
for
device br0...
[确定]
[root@localhost ~]
# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:1C:B4:FB
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe1c:b4fb
/64
Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1504 (1.4 KiB) TX bytes:3128 (3.0 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:1C:B4:FB
inet6 addr: fe80::20c:29ff:fe1c:b4fb
/64
Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:468 errors:0 dropped:0 overruns:0 frame:0
TX packets:365 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:45694 (44.6 KiB) TX bytes:42592 (41.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1
/128
Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2256 (2.2 KiB) TX bytes:2256 (2.2 KiB)
virbr0 Link encap:Ethernet HWaddr 52:54:00:B1:C5:BC
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
|
(4)安装虚拟机
1)创建虚拟机的存储目录
2)打开虚拟系统管理器
使用KVM命令集管理虚拟机
1. KVM基本功能管理
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
[root@localhost ~]
# ls /etc/libvirt/qemu //查看KVM的配置文件存放目录
autostart networks web.xml
//web
.xml是虚拟机系统的配置文件
[root@localhost ~]
# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:
'help'
来获得命令的帮助信息
'quit'
退出
virsh
# help //查看命令帮助信息
virsh
# list --all //查看虚拟机的状态
Id 名称 状态
----------------------------------------------------
5 web running
virsh
# shutdown web //关机,首先需要确认acpid服务安装并运行
域 web 被关闭
virsh
# start web //开机
域 web 已开始
virsh
# destroy web //强制虚拟机关闭电源
域 web 被删除
virsh
# create /etc/libvirt/qemu/web.xml //通过配置文件启动虚拟机
域 web 被创建(从
/etc/libvirt/qemu/web
.xml)
virsh
# suspend web //挂起虚拟机
域 web 被挂起
virsh
# list --all
Id 名称 状态
----------------------------------------------------
8 web 暂停
virsh
# resume web //恢复虚拟机
域 web 被重新恢复
virsh
# autostart web //创建/etc/libvirt/qemu/autostart目录,开机自动启动虚拟机
域 web标记为自动开始
virsh
# exit //和quit命令相同,退出virsh虚拟化的交互式终端
[root@localhost ~]
# virsh dumpxml web > /etc/libvirt/qemu/web_bak.xml //导出虚拟机配置
[root@localhost ~]
# virsh shutdown web //关闭虚拟机
域 web 被关闭
[root@localhost ~]
# virsh undefine web //删除虚拟机
域 web 已经被取消定义
[root@localhost ~]
# ls /etc/libvirt/qemu //web的配置文件被删除,但磁盘文件不会被删除
autostart networks web_bak.xml
[root@localhost ~]
# virsh list --all //查不到web的信息,说明此虚拟机已被删除
Id 名称 状态
----------------------------------------------------
[root@localhost ~]
# mv /etc/libvirt/qemu/web_bak.xml /etc/libvirt/qemu/web.xml
[root@localhost ~]
# virsh define /etc/libvirt/qemu/web.xml //通过备份的文件重新定义虚拟机
定义域 web(从
/etc/libvirt/qemu/web
.xml)
[root@localhost ~]
# virsh list --all //虚拟机已经恢复
Id 名称 状态
----------------------------------------------------
- web 关闭
[root@localhost ~]
# vim /etc/libvirt/qemu/web.xml //修改配置文件,用来修改系统内存、磁盘文件等信息
[root@localhost ~]
# virsh edit web //和上面的命令一样,修改web.xml配置文件
编辑了域 web XML 配置。
|
2. KVM文件管理
通过文件管理可以直接查看、修改、复制虚拟机的内部文件,虚拟机磁盘文件有raw和qcow2格式
raw格式:KVM虚拟机默认的格式,性能好、速度快,但不支持镜像、Zlib磁盘压缩、AES加密等
qcow2格式:是KVM支持的磁盘镜像格式,支持快照、、Zlib磁盘压缩、AES加密等
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
28
29
30
31
|
[root@localhost ~]
# yum -y install libguestfs-tools //安装此工具,可以直接读取qcow2格式的磁盘文件
[root@localhost ~]
# qemu-img info /data_kvm/store/web_kvm.img //查看当前磁盘格式为raw
image:
/data_kvm/store/web_kvm
.img
file
format
: raw
virtual size: 9.8G (10485760000 bytes)
disk size: 9.8G
[root@localhost ~]
# virsh shutdown web //关闭虚拟机
域 web 被关闭
[root@localhost ~]
# qemu-img convert -f raw -O qcow2 /data_kvm/store/web_kvm.img /data_kvm/store/web_kvm.qcow2
//
将raw格式转换为qcow2格式
[root@localhost ~]
# virsh edit web //修改web.xml配置文件
……
//
省略部分内容
<disk
type
=
'file'
device=
'disk'
>
<driver name=
'qemu'
type
=
'qcow2'
cache=
'none'
/>
//
此行将raw改为qcow2
<
source
file
=
'/data_kvm/store/web_kvm.qcow2'
/>
//
此行将img改为qcow2
<target dev=
'vda'
bus=
'virtio'
/>
<address
type
=
'pci'
domain=
'0x0000'
bus=
'0x00'
slot=
'0x05'
function
=
'0x0'
/>
<
/disk
>
……
//
省略部分内容
[root@localhost ~]
# virt-cat -a /data_kvm/store/web_kvm.qcow2 /etc/sysconfig/network //类似于cat命令
NETWORKING=
yes
HOSTNAME=web
[root@localhost ~]
# virt-edit -a /data_kvm/store/web_kvm.qcow2 /etc/resolv.conf //类似于vim命令,用于编辑文件
[root@localhost ~]
# virt-df -h web //用于查看虚拟机的磁盘信息
Filesystem Size Used Available Use%
web:
/dev/sda1
484M 34M 425M 8%
web:
/dev/VolGroup/lv_root
8.2G 2.9G 4.9G 35%
|
3. 虚拟机克隆
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@localhost ~]
# virsh list --all //查看虚拟机状态
Id 名称 状态
----------------------------------------------------
- web 关闭
[root@localhost ~]
# virt-clone -o web -n www -f /data_kvm/store/www.qcow2 //从web克隆www
[root@localhost ~]
# virsh list --all //查看虚拟机状态
Id 名称 状态
----------------------------------------------------
- web 关闭
- www 关闭
|
4. 虚拟机快照
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
|
[root@localhost ~]
# virsh snapshot-create web //对web创建快照
Domain snapshot 1516736781 created
[root@localhost ~]
# virsh snapshot-current web //查看虚拟机快照的版本信息
<domainsnapshot>
<name>1516736781<
/name
>
……
//
省略部分内容
[root@localhost ~]
# virsh snapshot-list web //查看快照信息
名称 Creation Time 状态
------------------------------------------------------------
1516736781 2018-01-24 03:46:21 +0800 shutoff
[root@localhost ~]
# virsh snapshot-create web //创建新快照
Domain snapshot 1516737252 created
[root@localhost ~]
# virsh snapshot-list web //查看快照信息
名称 Creation Time 状态
------------------------------------------------------------
1516736781 2018-01-24 03:46:21 +0800 shutoff
1516737252 2018-01-24 03:54:12 +0800 shutoff
[root@localhost ~]
# virsh snapshot-revert web 1516736781 //恢复虚拟机状态至1516736781
[root@localhost ~]
# virsh snapshot-delete web 1516737252 //删除快照
Domain snapshot 1516737252 deleted
|
本篇博客只介绍了一些常用的KVM命令,其他命令可以通过查看help帮助信息或上网查找。由于KVM命令集的庞大很难清除明了,所以通常都是在桌面环境下通过图形界面管理,直观方便。