最近研究了OpenStack,不可避免的用到了KVM,先总结下对KVM的学习。

一.KVM原理

    KVM是在x86平台上面实现的一种全虚拟化的方案,下面的这个图是我从网上抄来的。基本上可以说明KVM的结构。

                         KVM(一)安装篇_第1张图片

    最底下是CPU,内存,IO等物理资源。物理资源上面是VMM(虚拟机监视器),和XEN,EXSI等这些虚拟化不一样的是。 KVM的VMM其实是作为linux的一个模块实现的,所以我们安装KVM的时候,只需要在linux操作系统上面加载kvm模块就OK了,而不需要对专门的VMM系统或者对原有的系统进行修改。

    VMM层是跑在linux的内核态的,在linux的用户态,有个叫QEMU的东西,我们可以把QEMU看作是内核kvm模块和虚拟机之间的桥梁,虚拟机和内核kvm模块通信要通过QEMU,QEMU也给咱们提供了管理虚拟机的一些命令行工具。 图里面的/dev/kvm这个文件,就是QEMU和内核kvm模块交流的通道。

    图里面还有些东西没描绘出来的是,如果仅仅是QEMU管理虚拟机的话,KVM也就只能叫做是软件虚拟化了,其实KVM是一个硬件虚拟化的方案,硬件虚拟化物理平台本身提供了对特殊指令的截获和重定向的硬件支持。显然,这么做减少了软件虚拟化过程中的IO开销等等性能损耗,提高了虚拟机的性能。

    表达的不太好,差不多是这个意思吧

二.硬件环境准备

    前面说到了KVM是一套硬件虚拟化方案,主要用到的是Intel VT和AMD-V技术。目前Intel和AMD在硬件方面都已经实现了CPU, 芯片,内存方面的虚拟化,IO方面的虚拟化也快了。Intel的内存虚拟化叫做EPT。

    所以安装虚拟机之前,先在BIOS里面开启这些虚拟化相关的选项。

三.环境准备

  1. 看一下CPU虚拟化是否已经开启

 egrep '(vmx|svm)' --color=always /proc/cpuinfo

 2.检查一下kvm模块是否已经加载至内核

root@kvm:~# lsmod  |  grep  kvm
kvm_intel             121968  0 
kvm                   287749  1 kvm_intel

   如果查不到的话,就需要执行下下面的这个命令

 modprobe kvm-intel或者modprobe kvm-amd

   如果执行上面的命令还是加载失败的时候,那说明内核不支持kvm,那就要重新编译下内核了,不过2.6.?之后的内核都已经支持kvm了。

3.安装软件

aptitude -y install kvm bridge-utils

其中kvm是编译好的debian平台下的qemu-kvm,bridge-utils是linux网桥,构建KVM桥接或者NAT模式的网络的时候需要用到。

四.虚拟机安装

  1. 创建一个磁盘文件

kvm-img create -f qcow2 debian.qcow2  10G

qcow2是类型是KVM提倡使用的类型,这种类型支持压缩,支持加密,支持稀疏文件,支持一个镜像文件中有多个虚拟机快照。什么叫稀疏文件呢?这个和咱们用Vmware的时候差不多,就是咱们虽然创建了一个10G的磁盘文件,但是qcow2类型不会一下子把这10G大小全占用,而是按需取用。这样做的好处,显然可以节省磁盘空间,坏处也很明显,当磁盘不够用的时候,临时去宿主机请求磁盘,这个增加了IO的开销。

咱们也可以用dd创建一个linux默认的raw格式的磁盘文件

dd if=/dev/zero of=./debian.img count=8192 bs=1M

2.安装操作系统

设置从光盘启动,系统安装到debian.qcow2上面

kvm  -smp 2 -m 128 -boot order=cd -hda ./debian.qcow2 -cdrom  ./debian-7.4.0-amd64-netinst.iso  -vnc :1

安装命令里面设置了-vnc :1,我们用vncview连接上去,就可以看到操作系统的安装界面了。和平常的操作系统一样,安装就OK了

3.启动虚拟机

安装完毕了,可以在命令行启动虚拟机。默认启动的VNC端口是5900,可以用vncview连接上去

kvm debian.qcow2

我这里启动虚拟机的时候,没有加任何参数,使用的都是默认值,cpu默认是1颗,内存默认是128M,网络默认是KVM自带的user模式的网络。下一篇写写网络配置。