1 KVM是什么

KVM(Kernel­based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进

行管理,所以相对于Xen,其核心

源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载的核心模块

kvm.ko(kvm­intel.ko 或 kvm­amd.ko)。kvm

还需要一个经过修改的QEMU 软件(qemu­kvm),作为虚拟机上层控制和界面。KVM的虚拟化需要硬件支持(如 Intel

VT技术或者AMD V技术)。是基于硬件的

完全虚拟化。 KVM可以运行多个其本身运行未改动的镜像的虚拟机,例如Windows,Mac OS X ,每个虚拟机都

有各自的虚拟硬件,比如网卡、硬盘核图形适配

器等。

KVM和QEMU的关系

QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这

个方案实际上只实现了内核中对处理器(Intel VT)

, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用

了QEMU的代码并加以精简,连同KVM一起构成了

另一个独立的虚拟化解决方案:KVM+QEMU。

2 kvm相关安装包及其作用

qemu­kvm 主要的KVM程序包

python­virtinst 创建虚拟机所需要的命令行工具和程序库

virt­manager GUI虚拟机管理工具

virt­top 虚拟机统计命令

virt­viewer GUI连接程序,连接到已配置好的虚拟机

libvirt C语言工具包,提供libvirt服务

libvirt­client 虚拟客户机提供的C语言工具包

virt­install 基于libvirt服务的虚拟机创建命令

bridge­utils 创建和管理桥接设备的工具

3 安装kvm

1)检查cpu是否支持虚拟化

[root@kevin ~]# grep vmx /proc/cpuinfo

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

2)确保BIOS里开启虚拟化功能,即查看是否加载KVM模块

[root@kevin ~]# lsmod | grep kvm

kvm_intel 170086 0

kvm 566340 1 kvm_intel

irqbypass 13503 1 kvm

=========================================================如果没有加载,运行以下命令:

[root@kevin ~]# modprobe kvm

[root@kevin ~]# modprobe kvm­intel

[root@kevin ~]# lsmod | grep kvm

kvm_intel 170086 0

kvm 566340 1 kvm_intel

irqbypass 13503 1 kvm

=========================================================

内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空

间。

[root@kevin ~]# ll /dev/kvm

crw­rw­rw­. 1 root kvm 10, 232 1月 29 11:56 /dev/kvm

4 安装

yum install ­y qemu­kvm qemu­kvm­tools

yum install ­y libvirt

yum install ­y virt­install

yum install ­y python­urllib3

虚拟机安装日志查看

/var/log/libvirt/qemu/centos7_15.log

以下选择的类型是 ­­virt­type kvm 和之前测试的不一样

qemu­img create ­f raw /home/vm/centos7_15.raw 500G

virt­install \

­­virt­type kvm \

­­name centos7_15 \

­­vcpus 8 \

­­memory 32768 \

­­cdrom=/home/vm/CentOS­7­x86_64­Minimal­1511.iso \

­­disk path=/home/vm/centos7_15.raw \

­­network bridge=br0 \

­­graphics vnc,listen=0.0.0.0 \

­­os­type=linux \

­­os­variant=rhel7

注意:

以上选择的virt­type是kvm,如果选择的是qemu,会报内存分配错误 tcmalloc: large alloc 2013265920 bytes ==

访问外部网络

iptables ­t nat ­A POSTROUTING ­s 192.168.33.0/24 ­o eno1 ­j MASQUERADE

外网访问内部

iptables ­t nat ­A PREROUTING ­i eno1 ­d 172.16.2.164 ­p tcp ­­dport 53325 ­j DNAT ­­to­destination 192.168.33.15:22