图 3 KVM 原理图
1.4 KVM 虚拟机的管理工具
准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需
要更多的辅助工具。QEMU-KVM:在 Linux 系统中,首先我们可以用 modprobe 命令
加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载了
模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的,因为用
户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。关于用户空间的工具,
KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU。QEMU 是一个强大的虚拟化软
件,它可以虚拟不同的 CPU 构架。比如说在 x86 的 CPU 上虚拟一个 Power 的 CPU,
并利用它编译出可运行在 Power 上的程序。KVM 使用了 QEMU 的基于 x86 的部分,并
稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版
中分为 内核部分的 KVM 内核模块和 QEMU-KVM 工具。这就是 KVM 和 QEMU 的关系。
Libvirt、virsh、virt-manager:尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,
RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU
工具效率不高,不易于使用。Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工
具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。使用
libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的
命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的
命令 virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的
是图形用户界面,这就是 virt-manager。他是一套用 python 编写的虚拟机管理图形界
面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt 的 API
实现的。