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

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

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

VMWare:

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

量子计算单元(QEMU):

继 VMWare 之后的 4 年,法国开发者 Fabrice Bellard 于 2003 年开发了 QEMU(Quick Emulator)Hypervisor,并将其免费开源。经过多年的社区开发,QEMU 成为了“完全虚拟化”的 2 类虚拟机管理程序。

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

QEMU 能够独立运行,无需任何其他 VM SW。

硬件虚拟化:

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

键盘/鼠标:

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

  • KVM 不模拟 vCPU,而是使用物理 CPU 提供的硬件虚拟化技术。
  • 作为 Linux 内核组件,KVM 既没有 GUI,也没有 CLI。必须编写 C 代码来调用 KVM 内核模块来创建 VM,因此最终用户无法直接使用它。
  • KVM 被视为虚拟机管理程序 (Hypervisor)。

KVM 能够独立创建虚拟机,无需任何其他虚拟机管理程序(如 QEMU)的支持。

libvirt

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

  • virsh
  • virt-manager
  • virt-install

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

libvirt是免费且开源的。

virt-manager

当人们使用 KVM 创建虚拟机时,他们可能会看到这个屏幕:

虚拟机管理器 GUI

我以前一直以为这个软件是 KVM 的 GUI,但经过调查,我发现它是另一个软件,名为“虚拟机管理器”,正如标题所示。它virt-manager也被称为。virt-manager由 Red Hat 提供支持。

根据其网站,virt-manager主要针对 KVM VM,但也管理 Xen 和 LXC。请参阅虚拟机管理器官方网站

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

我的问题:

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

答案1

KVM 能够独立创建虚拟机,无需任何虚拟机管理程序(如 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 不会模拟大多数硬件——它不会为虚拟机提供磁盘或网卡;它只提供允许用户空间程序执行这些操作所需的钩子。KVM 本身主要处理特权 CPU 指令。

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

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

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

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

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

相关内容