外面有很多虚拟机软件。甚至有些还包含在主流Linux中。
他们之间的区别是什么?在选择他们的时候,应该考虑什么标准?
发布于 2011-06-05 09:18:37
这里有几个明显的标准,我认为,从一个非专业的立场。免责声明:我对虚拟机并不了解,我只是使用它们。我有一些使用Xen、VirtualBox、Linux容器、VMware和undefined的经验。VMware是专有的,其他的是自由软件。所有这些都需要特殊的内核支持。Linux Containers是主线内核所支持的唯一一个。
每个乔·布罗克迈尔的有益文章大约有两种不同的虚拟化。其中有一个成熟的客户操作系统运行在您的主机操作系统之上。这叫做hypervisor virtualization。如果来宾也是Unix,这意味着来宾正在运行与主机不同的Unix内核。即使它们都是Linux,甚至是相同的发行版,情况也是如此。第二个是来宾虚拟机使用与主机操作系统相同的内核的地方。这叫做container-based virtualization。在下面的内容中,我将这些hypervisors和containers简称为。
在我前面提到的内容中,Xen、VirtualBox和VMWare是hypervisors,Linux容器和Linux是containers。
很明显,这样做是有代价的。主要的区别在于,对于hypervisors,您可以运行任何支持硬件的操作系统,也就是说,您可以在Linux之上运行Windows。对于containers来说,主机内核是图中唯一的"OS“,它确实是在进行隔离和资源管理。在这种情况下,虚拟机是一种人工构造,抽象可能是泄漏的,即虚拟化可能不够完美,这可能会造成恼人的问题。例如:您可能会发现,在虚拟机中的端口x上运行服务会干扰主机中端口x上的运行。
所以,一些具体的问题需要考虑,尽可能的参照这两种类型。
首先(假设您正在Linux上运行,如问题所述)您想要的客户是Linux发行版还是其他操作系统?如果前者,containers是一个选项,否则它就不是。即使它是一个选项,它在实践中也可能是可实现的,这取决于虚拟化软件维护人员为不同发行版创建客户操作系统提供了哪些支持/配方。除非你想试着玩你自己的,那就是。从理论上讲,这是可能的,因为Linux内核只是非常弱地耦合到周围的use-rspace。因此,几乎所有的“最近”内核都将与任何发行版一起工作。
所讨论的软件是否需要对内核进行修补,还是由内核提供本机支持?如果需要修补,这是一个主要的缺点,因为这意味着补丁必须与不断变化的内核保持同步。如果该功能已经存在于内核中,那么这并不是一个问题。当然,有些虚拟机不需要内核支持并在用户空间中运行。相对来说,很少有虚拟化机器需要特殊的内核支持,并且在主线内核中也有这种支持。我只知道两个是Linux容器(container)和KVM (hypervisor)。
用户社区的大小。当需要修补内核时,这主要是一个问题。在这种情况下,使该项目处于内核之外并确保一切正常工作的人力资源可能不存在。
虚拟机软件是专有的还是免费的?如果它是专有的,它将永远不会包含在Linux内核中。当然,根据你的哲学,你可能会因为思想上的原因而发现一个比另一个更好。
虚拟化性能。有多快?通常情况下,containers比hypervisors快,尽管差异可能并不显著。
它允许与系统上的其他进程共享内存,还是需要专用内存?在我看来,允许共享内存是很好的,因为这意味着您不必将这个内存从系统的其他部分分割掉。如果您可以共享内存,那么您可以运行更多的虚拟机,而不是不能运行。根据定义,hypervisors不允许共享内存,因为它们是独立的操作系统。通常,containers允许共享内存,因为它是相同的操作系统,尽管您通常也可以设置内存限制。也许还可以分配一个专用的内存块,尽管我从未尝试过这样做。
与系统其他部分隔离的级别。有些虚拟机在这方面有所不同。理想情况下,您不希望虚拟机以任何方式了解或与主机系统或其他来宾系统交互。根据定义,hypervisors是完全孤立的。containers的隔离级别因实现而异。在这方面,实现的差别很大。
https://unix.stackexchange.com/questions/14423
复制相似问题