在Linux上选择虚拟机软件

在Linux上选择虚拟机软件

市面上有很多虚拟机软件。甚至有些被包含到主线 Linux 中。

它们有何不同,在选择时应考虑什么标准?

答案1

更专业的工具,例如 VirtualBox(又名 xVM)和 VMWare 支持多个快照和“精简”克隆。

VMWare 另外还有一些有限的 3D 加速、与 Eclipse 调试的集成(允许您从 VM 外部调试 VM 内部的应用程序)、虚拟网络功能、多监视器支持和记录/重放功能(对于调试并发问题很有用 - 记录在哪些核心上)以及指令执行的顺序)。

VirtualBox 和内核虚拟机更容易工作,因为您不必编译内核驱动程序。它们都是免费的,而 VMWare 的价格约为 190 美元。 KVM 是完全开源的,而 VirtualBox 只有某些部分是开源的。

根据我的经验,各种虚拟化工具的性能在任何地方都大致相同,与 KVM 相比,VirtualBox 和 VMWare 略有优势。您的里程可能会根据您的硬件和系统配置而有所不同。

最后,如果您正在考虑虚拟化一组服务器,请考虑基于虚拟机管理程序的操作系统而不是 Linux,例如 VMWare 的 ESXi、Microsoft 的 HyperV 或 Xen。这些通常提供实时迁移、内存共享和容错等功能,并且开销较小。但是,它们通常无法从运行它们的计算机上使用,而是依赖于远程管理工具,例如 vSphere 或 System Center。所有这三个管理程序都是免费的。不过,VMWare 需要花费 3000 美元才能访问所有出色的功能。免费产品中包含 Microsoft 和 Xen 的解决方案的全部功能。 (除非您已经部署了 Active Directory,否则 Microsoft 的解决方案效果不佳)

答案2

从外行的角度来看,以下是我考虑的一些明显标准。免责声明:我对虚拟机一无所知,我只是使用它们。我有一些使用经验Xen,虚拟盒子,Linux容器,虚拟机, 和Linux虚拟服务器。 VMware 是专有软件,其他都是免费软件。所有这些都需要特殊的内核支持。Linux Containers是唯一受主线内核支持的。

乔·布罗克梅尔 (Joe Brockmeier) 的有用文章虚拟化大致有两种不同。其中一种是在主机操作系统之上运行成熟的来宾操作系统。这就是所谓的hypervisor virtualization。如果来宾也是 Unix,则意味着来宾正在运行与主机不同的 Unix 内核。即使它们都是 Linux 甚至是同一个发行版,情况也是如此。第二种是来宾虚拟机使用与主机操作系统相同的内核。这就是所谓的container-based virtualization。在下文中,我将简称hypervisors这些containers

在我上面提到的那些中,Xen、VirtualBox 和 VMWare 是hypervisors,Linux Containers 和 Linux-Vserver 是containers

显然,这需要权衡。主要区别在于hypervisors,您可以运行任何支持该硬件的操作系统,即您可以在 Linux 之上运行 Windows。对于containers,主机内核(实际上是图中唯一的“操作系统”)正在执行隔离和资源管理。在这种情况下,虚拟机是一种人工构造,并且抽象可能存在漏洞,从某种意义上说,虚拟化可能不太完美,这可能会导致恼人的问题。例如。您可能会发现在虚拟机中的端口 x 上运行服务会干扰主机中的端口 x 上运行的某些内容。

所以,一些具体的问题要考虑,尽量参考这两种类型。

首先(假设您在 Linux 上运行,正如问题所述)您想要的客户机是 Linux 发行版还是其他操作系统?如果前者containers是一个选项,否则不是。即使它是一个选项,它在实践中可能实现也可能无法实现,具体取决于虚拟化软件维护人员为创建不同发行版的客户操作系统提供的支持/方法。除非你想尝试自己动手,否则就是这样。从理论上讲,这通常是可能的,因为 Linux 内核与周围的用户空间的耦合非常弱。因此,几乎任何“最新”内核都可以在任何发行版上运行。

相关软件是否需要内核打补丁或者内核本身就支持它?如果需要打补丁,那就是一个主要的缺点,因为这意味着补丁必须与不断变化的内核保持同步。如果该功能已经存在于内核中,那么这不是问题。当然,有些虚拟机不需要内核支持并在用户空间中运行。需要特殊内核支持并且在主线内核中提供该支持的虚拟机相对较少。我所知道的唯一两个是 Linux 容器 ( container) 和 KVM ( hypervisor)。

用户社区的规模。当需要修补内核时,这主要是一个问题。在这种情况下,可能不存在将这个项目保持在内核之外并确保一切正常工作的人力。

虚拟机软件是专有软件还是免费软件?如果它是专有的,它将永远不会包含在 Linux 内核中。当然,根据您的哲学,出于意识形态原因,您可能会发现其中一种比另一种更好。

虚拟化性能。有多快?通常containers比 更快hypervisors,尽管差异可能并不显着。

它是否允许与系统上的其他进程共享内存,或者是否需要专用内存?在我看来,允许共享内存很好,因为这意味着您不必从系统的其余部分中删除该内存。如果可以共享内存,则可以比不能共享内存时运行更多的虚拟机。根据定义,hypervisors不允许共享内存,因为它们是单独的操作系统。一般来说,containers再次允许共享内存,因为它是相同的操作系统,尽管您通常也可以设置内存限制。也可以分配专用的内存块,尽管我从未尝试这样做。

与系统其他部分的隔离级别。某些虚拟机在这方面有所不同。理想情况下,您不希望虚拟机以任何方式了解主机系统或其他来宾系统或与之交互。根据定义,hypervisors它们是完全隔离的。隔离级别containers因实现而异。在这方面的实现差异很大。

相关内容