创建基于 KVM 的虚拟服务器

使用完全虚拟化在 Linux VM 系统管理程序上构建虚拟服务器的 3 个步骤

Comments

Linux Kernel-based Virtual Machine (KVM) 是一款 Linux 开放源码虚拟化软件,基于硬件虚拟化扩展(Intel VT-X 和 AMD-V)和 QEMU 的修改版。KVM — 其文件格式为 kvm.ko,是一个提供核心虚拟化基础架构和特定于处理器的模块 kvm-intel.ko 和 kvm-amd.ko 的可装载内核模块 — 其设计目标是在需要引导多个未改动的 PC 操作系统时支持完整的硬件模拟。

通过使用 KVM,您可以运行多个其本身运行未改动的 Windows® 或 Mac OS® X 映像的虚拟机。每个虚拟机都有各自的虚拟硬件,比如网卡、磁盘和图形适配器等。

在本文中,我使用的机器为运行 SUSE 11 操作系统的 IBM® Blade Server HS21。HS21 支持 Intel VT 扩展和 2.6.27.13 内核版本的 SUSE 11,后者已经包含 KVM(KVM 包含在 2.6.20 以后的 Linux 内核版本中)。

需要通过 3 个步骤才能配置好虚拟服务器:

  1. 安装操作系统和所需的软件。
  2. 创建虚拟服务器。
  3. 配置虚拟服务器网络。

步骤 1. 安装操作系统和所需的软件

这个小节讨论:

  1. 安装操作系统和所需的软件
  2. 确定 CPU 是否支持 KVM
  3. 确保正确安装了软件

安装操作系统和所需的软件

在安装了操作系统之后,您可以通过以下命令找到已安装的 Linux 内核:

kvm:~ # uname -a
Linux kvm 2.6.27.13-1-pae #1 SMP 2009-01-27 13:41:16 +0100 i686 i686 i386 GNU/Linux

然后选择并安装 kvm 和 kvm-kmp-default 包(已经包含在针对 I/O 硬件模拟进行修改的 QEMU 中)。如图 1 所示,选择这些包并单击 Accept 安装它们:

图 1. 查找已安装的内核
查找已安装的内核
查找已安装的内核

现在,kvm-kmp-default 版本应该为 78_2.6.27.13_1-11.3.(78 表示 KVM 的版本,其余的信息表示内核的版本)。

典型的 KVM 安装包含以下组件:

  • 一个用于管理虚拟化硬件的设备驱动程序;这个驱动程序通过字符设备 /dev/kvm 公开其功能。
  • 一个用于模拟 PC 硬件的用户空间组件;目前,这是在用户空间处理的,并且是经过稍微修改的 QEMU 进程。
  • I/O 模型,它直接源自 QEMU 的模型,并且支持 copy-on-write 磁盘映像和其他 QEMU 特性。

确定 CPU 是否支持 KVM

KVM 依赖于 x86 虚拟化扩展。为了检查兼容性,请运行命令 grep vmx /proc/cpuinfo(对于 AMD,运行命令 grep svm /proc/cpuinfo)。如果输出类似于清单 1,那么 CPU 就支持 KVM;否则,CPU 不支持 KVM。

清单 1. 检查 CPU 是否支持 KVM
kvm:~ # grep vmx /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm

确定正确安装了软件

运行命令 lsmod | grep kvm 检查 KVM 模块是否成功安装。如果结果类似于以下输出,那么 KVM 模块已成功安装:

kvm:~ # lsmod | grep kvm
kvm_intel              42604  0
kvm                   150264  1 kvm_intel

步骤 2. 创建虚拟服务器

这个小节讨论:

  1. 创建原始磁盘映像
  2. 在该映像上安装操作系统
  3. 启动虚拟服务器

创建原始磁盘映像

要创建原始磁盘映像,使用以下命令:

dd if=/dev/zero of=/mnt/kvmtest.img bs=1024 count=0 seek=$[10*1024*1024]

使用该命令将创建一个大小为 10GB 的映像,其名称为 kvmtest.img。

在该映像上安装操作系统

要将操作系统安装在该映像上,使用以下命令:

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -boot d -cdrom /mnt/SLES-11-DVD-i586-RC3-DVD1.iso -m 1024

因为您安装的是现成的 KVM 包而不是从头构建 KVM,所以要使用 qemu-kvm 而不是 qemu-system-x86_64

-boot d 意味着我们将让虚拟服务器从 CDROM 启动。-m 1024 表示我们为虚拟服务器指定 1GB 的内存。

在运行该命令之后,操作系统安装界面应该类似于图 2:

图 2. 操作系统安装界面
操作系统安装界面
操作系统安装界面

接下来,按照常规的方式安装操作系统。

启动虚拟服务器

在成功安装操作系统之后,您可以通过以下命令启动虚拟服务器:

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024

您的服务器应该像一个运行在物理硬件之上的服务器。

步骤 3. 配置虚拟服务器网络

您看到了如何成功创建一个虚拟服务器,但还没有为虚拟服务器创建网络。现在,我将展示如何为虚拟服务器创建桥接网络:

  1. 安装 bridge-util 包
  2. 创建桥接网络界面
  3. 为网络控制创建脚本
  4. 启动来宾操作系统网络
  5. 配置来宾操作系统网络

bridge-util 包安装

我们需要创建一个桥接网络,因此我们需要在操作系统的软件管理部分安装 bridge-util 包。图 3 显示了在哪里选择和安装该包。

图 3. 安装 bridge-util 包
安装 bridge-util 包
安装 bridge-util 包

构建桥接网络界面

在操作系统的网络配置界面,单击 Add a new network interface(见图 4):

图 4. 添加新的网络界面
添加新的网络界面
添加新的网络界面

您将得到类似于图 5 所示的 Hardware Dialog:

图 5. 针对网络界面的硬件配置对话框
针对网络界面的硬件配置对话框
针对网络界面的硬件配置对话框

选择 Bridge 作为设备类型;单击 Next 继续配置网络。您将看到如图 6 所示的配置界面:

图 6. 网络配置界面
网络配置界面
网络配置界面

在 “Bridged Devices” 下选择 eth0 并为桥接界面配置一个静态 IP,它与图 7 的配置 eth0 相同。

图 7. 为桥接界面配置一个静态 IP
为桥接界面配置一个静态 IP
为桥接界面配置一个静态 IP

完成以上操作之后,eth0 配置将被清除,单击 Next 继续。此时,您将回到网络配置界面。您将看到创建了一个新的桥接网络界面,并且清除了 eth0 配置。

构建网络控制脚本

网络控制脚本应该类似于清单 2:

清单 2. 网络控制脚本
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
        tunctl -u `whoami` -t $1
        ip link set $1 up
        sleep 0.5s
        brctl addif $switch $1
        exit 0
else
        echo "Error: no interface specified"
        exit 1
fi

启动来宾操作系统

通过以下命令启动带有网络界面的来宾操作系统:

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024 -net nic,macaddr=52:54:00:12:34:56 -net tap,script=/etc/qemu-ifup

您将在启动虚拟服务器时指定一个网络界面。

配置来宾操作系统网络

在来宾操作系统启动之后,像平常一样配置它的网络。

祝贺您!您已经成功创建了一个基于 KVM 的虚拟服务器。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=470146
ArticleTitle=创建基于 KVM 的虚拟服务器
publish-date=03012010