kvm、virt-manager、qemu和libvirt有什么区别和关系?

Col*_*ver 9 qemu virtual-machine linux-kvm libvirt virt-manager

我调查了这个话题,这是我的结论(但我仍然有问题,如果我的结论有任何错误,请纠正我):

虚拟机:

VMWare 于 1999 年开发了其 VM Hypervisor SW,但它是专有的。

动车组:

在 VMWare 之后 4 年后,法国开发商 Fabrice Bellard 于 2003 年开发了 QEMU(快速仿真器)Hyporvisor 并使其免费和开源。经过多年的社区发展,QEMU 然后成为“完全虚拟化”的 2 类管理程序。

  • QEMU 能够模拟各种硬件,包括 CPU 和 I/O 设备。
  • QEMU 能够将发送到 VM 的 vCPU 的指令解释为真正的指令,并将它们发送到物理 CPU。
  • 一些 QEMU 仿真设备被 VirtualBox 等虚拟化软件广泛使用。
  • QEMU 有自己的 GUI 和 CLI。

QEMU 无需任何其他 VM SW 即可独立运行。

硬件虚拟化:

英特尔和 AMD 都在 2006 年推出了他们的硬件虚拟化技术(VT-x 和 AMD-V)。

KVM:

2006 年,一家小公司(两年后于 2008 年被 Red Hat 收购)为 Linux 开发了一个名为“KVM”的可加载内核模块,它能够使用前面提到的硬件虚拟化技术创建 VM。然后在 2007 年正式合并到 Linux 内核中。

  • KVM 不模拟 vCPU,而是使用物理 CPU 提供的硬件虚拟化技术。
  • 作为 Linux 内核,KVM 既没有 GUI 也没有 CLI。必须编写,比如说 C 代码来调用 KVM 模块来创建 VM,使其对最终用户毫无用处。
  • KVM 被视为管理程序。

KVM 能够独立创建 VM,而无需任何管理程序(例如 QEMU)的支持。

库虚拟:

由于市场上有许多 Hypervisor,因此在 2005 年底开发了 libvirt,以统一创建和管理 VM 的 API 和 CLI。从最终用户的角度来看,它提供了 CLI 工具,例如:

  • 虚拟的
  • 虚拟管理器
  • 虚拟安装

libvirt 本身并不创建或管理虚拟机,而是将用户发出的命令映射到对底层 Hypervisor 的一个或一系列 API 调用。

libvirt 是免费和开源的。

虚拟经理:

当人们使用 KVM 创建 VM 时,他们可能会看到以下屏幕:

虚拟机管理器图形用户界面

我曾经认为这个软件是 KVM 的 GUI,但经过我的调查,我发现它是另一个名为“虚拟机管理器”的软件,如标题所示。它也被称为 virt-manager。virt-manager 由红帽支持。

根据其网站,virt-manager 主要针对 KVM 虚拟机,但也管理 Xen 和 LXC。参见Virtual Machine Manager 官方网站

virt-manager 建立在 libvirt 之上。即它专注于用户界面(GUI 和 CLI)。对于底层的VM管理,它只是简单的调用libvirt,最终调用底层的Hypervisor,比如KVM。

我的问题:

  1. 我的结论有什么错误吗?
  2. 当我创建 KVM 虚拟机时,为什么 virt-manager GUI 在其 VM 列表中显示“localhost (QEMU)”或“QEMU/KVM”?
  3. libvirt 声称几乎所有以 virt-* 开头的虚拟化工具都是 libvirt 工具,尤其是 virt-manager 和 virt-install。请参阅lib-virt 常见问题解答。但是 virt-manager alcal virt-install 是 virt-manager 的一部分。请参阅virt-manager 网站。那么哪个是正确的呢?virt-install 和 virt-manager 究竟属于什么?
  4. 一些文章谈论 qemu-kvm,但根据我的调查,它们只是两个不同的 Hypervisor。我可以独立使用KVM来创建虚拟机,那我为什么要使用qemu-kvm呢?什么是 qemu-kvm?它是一个在必要时使用某些 KVM 功能的 QEMU 还是一个必须使用某些 QEMU 功能的 KVM,否则它将无法创建 VM?

use*_*686 9

KVM 能够独立创建 VM,而无需任何管理程序(例如 QEMU)的支持。

是与否;它可以创建虚拟机,但不能提供 CPU 和 RAM 以外的硬件。

当我创建 KVM 虚拟机时,为什么 virt-manager GUI 在其 VM 列表中显示“localhost (QEMU)”或“QEMU/KVM”?

KVM 不能单独工作;它只是内核为用户空间提供的 API。正如您所说:“作为Linux内核,KVM既没有GUI也没有CLI。必须编写,比如说C代码来调用KVM模块来创建VM,使其对最终用户无用。”

因此,最终用户通常通过 QEMU(它作为一种加速方法存在)使用 KVM。您可以使用熟悉的 qemu CLI 启动 VM,然后添加-accel kvm-enable-kvm(旧版本)。还有很多其他使用 KVM 的 VM 管理器,例如kvmtool,但 QEMU 是最受欢迎的。

这同样适用于 libvirt——它不直接管理 KVM,而是使用正确的选项启动 QEMU。

此外,KVM 不会模拟大多数硬件——它不会为 VM 提供磁盘或网卡;它只提供允许用户空间程序这样做所需的钩子。KVM 本身主要只处理特权 CPU 指令。

这意味着使用 QEMU 有另一个优势——您可以使用 QEMU 已经实现的所有模拟硬件(SCSI 适配器、以太网控制器),而不必从头开始。

libvirt 声称几乎所有以 virt-* 开头的虚拟化工具都是 libvirt 工具,尤其是 virt-manager 和 virt-install。请参阅 lib-virt 常见问题解答。

此类索赔是不可执行的。如果其他人想使用 virt-* 作为他们程序的名称(尤其是当程序主要管理libvirt 时),那么他们可以将其命名为 virt-*。

一些文章谈论 qemu-kvm,但根据我的调查,它们只是两个不同的 Hypervisor。我可以独立使用KVM来创建虚拟机,那我为什么要使用qemu-kvm呢?什么是 qemu-kvm?它是一个在必要时使用某些 KVM 功能的 QEMU 还是一个必须使用某些 QEMU 功能的 KVM,否则它将无法创建 VM?

最初它是 QEMU 的一个分支,添加了基于 KVM 的加速支持。后来它被合并回主线 QEMU,所以qemu-kvm命令变成了 just qemu -enable-kvm(后来被调整为qemu -accel=kvm)。