KVM的虚拟化简介
KVM(全称Kernel-based Virtual Machine)是一套开源的全虚拟化解决方案,同时也支持半虚拟化。KVM不同于其他(如Xen),它是集成到Linux内核的Hypervisor,在X86架构上需要硬件支持(如Intel VT技术或者AMD V技术)虚拟化技术。KVM由一个可加载的内核模块kvm.ko提供核心虚拟化基础构造,和一个处理器特殊的模块kvm-intel.ko 或者 kvm-amd.ko组成。
在KVM虚拟主机上,可以允许运行多个Linux或Windows虚拟机,每个虚拟机都有各自的虚拟硬件:网卡、磁盘、图形适配器等。
这里KVM的安装环境是VMware和CentOS6.7_64位系统
-
前提需要足够大的硬件配置支持,如KVM主机内存需要至少2个G,硬盘需要40G以上。
-
检查CPU是否支持虚拟化技术,查看虚拟机设置虚拟化引擎部分,把【虚拟化Inter VT-x/EPT或AMD-V/RVI(V)】选项打钩。
-
同时可以在主机下查看CPU是否支持虚拟化,可以使用egrep 'vmx|svm' --color /proc/cpuinfo查看,若有输出则支持。
现在开始安装KVM
Step1:清除防火墙规则并把Selinux关闭
1
2
3
4
|
[root@kvm ~]
# service iptables stop
[root@kvm ~]
# iptables -F
[root@kvm ~]
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@kvm ~]
# setenforce 0
|
Step2:安装KVM核心包和其他所必须的虚拟化软件包
kvm: KVM核心模块,它在默认Linux内核中提供KVM管理程序
virt: 创建、克隆、虚拟机命令,以及图形化管理工具virt-manager
qemu-img: qemu组件,使用qemu命令来创建磁盘等
libvirts: 虚拟机管理工具,使用virsh等命令来管理和控制虚拟机
bridge-utils: 设置网络网卡桥接
KVM的安装需要解决的依赖比较多,其中virt需要安装200多个依赖包,安装过程比较费时,大约十几分钟,这取决于你的机器。
1
|
[root@kvm ~]
# yum -y install kvm virt* libvirt qemu-img bridge-utils
|
Step3:确认安装KVM是否已经成功
检查KVM模块是否加载
1
2
3
|
[root@kvm ~]
# lsmod |grep kvm
kvm_intel 55624 0
kvm 341551 1 kvm_intel
|
查看virt版本
1
2
3
4
|
[root@kvm ~]
# virt-install --version
0.600.0
[root@kvm ~]
# virsh --version
0.10.2
|
1
2
3
|
[root@kvm ~]
# virsh list --all
Id Name State
----------------------------------------------------
|
Step4:接下来可以创建并安装虚拟机,首先是配置网卡
进入/etc/sysconfig/network-scripts/目录下,拷贝eth0网卡配置文件ifcfg-eth0为ifcfg-br0
1
2
|
[root@kvm ~]
# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]
# cp ifcfg-eth0 ifcfg-br0
|
编辑ifcfg-eth0文件
1
2
3
4
5
6
7
8
|
DEVICE=eth0
HWADDR=00:0C:29:6C:57:4E
TYPE=Ethernet
UUID=41b2bd36-fc1a-4bbf-ab3f-2e11a9fc888a
ONBOOT=
yes
NM_CONTROLLED=
yes
BOOTPROTO=none
BRIDGE=br0
|
编辑ifcfg-br0文件
1
2
3
4
5
6
7
8
9
10
11
|
DEVICE=br0
#HWADDR=00:0C:29:6C:57:4E
TYPE=Bridge
UUID=41b2bd36-fc1a-4bbf-ab3f-2e11a9fc888a
ONBOOT=
yes
NM_CONTROLLED=
yes
BOOTPROTO=static
IPADDR=192.168.1.33
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
|
重启网络服务
1
2
3
4
5
6
7
8
|
[root@kvm network-scripts]
# service network restart
Shutting down interface br0: [ OK ]
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface br0: Determining
if
ip address 192.168.1.33 is already
in
use
for
device br0...
[ OK ]
|
查看一下网卡信息,其中br0就是刚刚创建的网卡配置文件,可以看到设置的IP已经生效
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@kvm ~]
# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:6C:57:4E
inet addr:192.168.1.33 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe6c:574e
/64
Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1211 errors:0 dropped:0 overruns:0 frame:0
TX packets:193 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:100106 (97.7 KiB) TX bytes:18094 (17.6 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:6C:57:4E
inet6 addr: fe80::20c:29ff:fe6c:574e
/64
Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:160842 errors:0 dropped:0 overruns:0 frame:0
TX packets:84216 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:210835385 (201.0 MiB) TX bytes:7062228 (6.7 MiB)
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:65536 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)
virbr0 Link encap:Ethernet HWaddr 52:54:00:07:F1:48
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)
|
Step5:启动或重启libvirtd和messagebus服务
启动libvirtd、messagebus
1
2
3
4
|
[root@kvm ~]
# service libvirtd start
Starting libvirtd daemon: [ OK ]
[root@kvm ~]
# service messagebus start
Starting system message bus: [ OK ]
|
查看网络接口列表
1
2
3
4
|
[root@kvm ~]
# brctl show
bridge name bridge
id
STP enabled interfaces
br 08000.000c296c574e no eth0
virbr0 8000.52540007f148
yes
virbr0-nic
|
Step6:创建一个虚拟机
首先创建一个用来存放虚拟机的目录/kvm,当然要先查看一下磁盘大小情况再选择的位置
1
2
3
4
5
6
7
|
[root@kvm ~]
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3
ext4 43G 1.3G 39G 4% /
tmpfs tmpfs 932M 0 932M 0%
/dev/shm
/dev/sda1
ext4 190M 31M 149M 18%
/boot
[root@kvm ~]
# mkdir /kvm
|
创建一个预分配的元数据选项的qcow2格式镜像文件(用来存储虚拟机的磁盘镜像)
1
2
|
[root@kvm ~]
# qemu-img create -f qcow2 -o preallocation=metadata /kvm/centos6.7_v1.img 10G
Formatting
'/kvm/centos6.7_v1.img'
,
fmt
=qcow2 size=10737418240 encryption=off cluster_size=65536 preallocation=
'metadata'
|
stat命令输出磁盘镜像信息
1
2
3
4
5
6
7
8
|
[root@kvm ~]
# stat /kvm/centos6.7_v1.img
File: `
/kvm/centos6
.7_v1.img'
Size: 10739318784Blocks: 3488 IO Block: 4096 regular
file
Device: 803h
/2051dInode
: 2490371 Links: 1
Access: (0644
/-rw-r--r--
) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-01-15 17:08:46.695998217 +0800
Modify: 2016-01-15 17:08:46.694998217 +0800
Change: 2016-01-15 17:08:46.694998217 +0800
|
info命令查看磁盘镜像的大小信息
1
2
3
4
5
6
|
[root@kvm ~]
# qemu-img info /kvm/centos6.7_v1.img
image:
/kvm/centos6
.7_v1.img
file
format
: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.7M
cluster_size: 65536
|
下面通过文本模式安装一个512内存、1核心、磁盘大小10G的linux系统。使用virt-install命令来创建虚拟机
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@kvm ~]
# virt-install \
--name centos6.7_v1 \
--
ram
512 \
--disk path=
/kvm/centos6
.7_v1.img,
format
=qcow2,size=10,bus=virtio \
--vcpus 1 \
--os-
type
linux \
--os-variant rhel6 \
--network bridge=br0 \
--graphics none \
--location=
/dev/sr0
\
--console pty,target_type=serial \
--extra-args
'console=ttyS0,115200n8 serial'
|
部分输出内容
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
|
Starting
install
...
Retrieving
file
.treeinfo... | 676 B 00:00 ...
Retrieving
file
vmlinuz... | 8.1 MB 00:00 ...
Retrieving
file
initrd.img... | 69 MB 00:00 ...
Creating domain... | 0 B 00:00
Connected to domain centos6.7_v1
Escape character is ^]
[1;256r
Google, Inc.
Serial Graphics Adapter 12
/07/11
SGABIOS $Id: sgabios.S 8 2010-04-22 00:03:40Z nlaredo $ (mockbuild@c6b18n1.dev.centos.org) Wed Dec 7 17:04:47 UTC 2011
Term: 121x32
4 0
SeaBIOS (version seabios-0.6.1.2-30.el6)
Machine UUID 51dca1d8-adbc-51d1-1f39-343ad2c7a49f
gPXE (http:
//etherboot
.org) - 00:03.0 C100 PCI2.10 PnP BBS PMM1FE0@10 C100
Probing EDD (edd=off to disable)... ok
......
Greetings.
anaconda installer init version 13.21.239 starting
mounting
/proc
filesystem...
done
creating
/dev
filesystem... usb 2-1: new full speed USB device number 2 using uhci_hcd
done
starting udev...
done
mounting
/dev/pts
(unix98 pty) filesystem... udevd[48]: error setting
/sys/class/firmware/timeout
: No such
file
or directory
done
mounting
/sys
filesystem...
done
anaconda installer init version 13.21.239 using a serial console
trying to remount root filesystem
read
write...
done
Welcome to CentOS
for
x86_64
┌───────────┤ Disc Found ├───────────┐
│ │
│ To begin testing the media before │
│ installation press OK. │
│ │
│ Choose Skip to skip the media
test
│
│ and start the installation. │
│ │
│ ┌────┐ ┌──────┐ │
│ │ OK │ │ Skip │ │
│ └────┘ └──────┘ │
│ │
│ │
└────────────────────────────────────┘
<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next
screen
|
接下来的安装操作就变得简单了,安装完成选择Reboot就进入虚拟机了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
┌─────────────────────┤ Package Installation ├──────────────────────┐
│ │
│ │
│ 0% │
│ │
│ Packages completed: 6 of 225 │
│ │
│ Installing glibc-common-2.12-1.166.el6.x86_64 (107 MB) │
│ Common binaries and locale data
for
glibc │
│ │
│ │
│ │
└───────────────────────────────────────────────────────────────────┘
|
查看一下磁盘信息和登录信息
1
2
3
4
5
6
|
[root@localhost ~]
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
ext4 8.3G 644M 7.3G 9% /
tmpfs tmpfs 246M 0 246M 0%
/dev/shm
/dev/vda1
ext4 477M 33M 419M 8%
/boot
|
1
2
3
4
|
[root@localhost ~]
# last
root ttyS0 Fri Jan 15 18:01 still logged
in
reboot system boot 2.6.32-573.el6.x Fri Jan 15 18:00 - 18:03 (00:02)
wtmp begins Fri Jan 15 18:00:36 2016
|
退出返回到KVM主机,键入ctrl+]即可,在KVM主机中使用virsh list可以查看虚拟机列表
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
4 centos6.7_v1 running
进入虚拟机,使用virsh console命令
1
2
3
4
|
[root@kvm ~]
# virsh console centos6.7_v1
Connected to domain centos6.7_v1
Escape character is ^]
[root@localhost ~]
#
|
使用virsh命令管理虚拟机
1
|
[root@kvm ~]
# virsh shutdown hostname #关闭虚拟机,需要在虚拟机中安装acpid服务并启动
|
1
|
[root@kvm ~]
# virsh destroy hostname #强制关闭电源
|
1
|
[root@kvm ~]
# virsh undefine hostname #删除虚拟机
|