用简单的英语解释什么是LXC及其有用的东西[关闭]


Answers:


24

如果用“普通英语”指的是非技术人员,那么区别就很难解释。那根头发太细而无法仔细考虑就不会分裂。

如果用“普通英语”来表示与技术人员交谈并因此至少对技术主题具有透彻理解的管理型人员,那么我提出以下措辞:


它是虚拟化的另一种形式。

如果您看一下VMWare ESXi,那就是运行所谓的完全虚拟化的完整虚拟机管理程序。在硬件之上运行的虚拟化系统之间只有很小的一层。有完整的硬件虚拟化,其中虚拟机中运行的OS完全独立于虚拟机管理程序本身,并具有所需的所有硬件。

再进一步,查看诸如VMWare Player,Workstation,ESX(不是ESXi)或VMWare Server之类的东西,您将拥有一个完整的操作系统来提供虚拟机监控程序角色。但是,虚拟机仍具有完整的虚拟硬件阵列。

另一种方法是准虚拟化,Xen遵循了相当一段时间。通过这种虚拟化形式,来宾操作系统知道已对其进行了虚拟化,并且已被修改为可以在该环境中工作。有时,所有这些需求都是特殊的半虚拟化驱动程序。其他时候,需要彻底更改内核。

LXC或Linux容器是又一个升级。在这种情况下,它正在运行完全相同的操作系统的多个实例。内核可能相同,但是每个OS容器正在运行多个用户空间。每个容器可能有也可能没有不同的文件系统。

容器提供了一种在进程之间提供强大安全性隔离的方式,而这种方式在具有相同用户空间的系统中是不可用的。类似Unix的操作系统已经有“ chroot监狱”了很长一段时间,但是它没有提供进程分离或限制监狱中进程消耗的资源的能力。通过将这些过程进行容器化,可以限制资源使用,可以为它们分配离散的IP地址,并且系统其余部分都包含利用用户空间的安全漏洞。

与其他类型的虚拟化相比,您将在哪里使用LXC?这要视情况而定,但是LXC 应该提供比其他任何虚拟化方法更少的虚拟化惩罚功能,因为它是调解所有用户空间调用的同一个内核,而不是假装成一堆希望与物理硬件对话的OS映像的硬件的虚拟机管理程序。因此,如果您有一堆需要相同操作系统版本的处理,并且可以同时重新启动以进行更新,则LXC可以提供一种低成本的方法来安全地运行所有这些操作,并具有资源管理功能。


更雄辩地提出。
Nicholi'7

好吧,除了我可以肯定您对VMWare ESX的错误描述。那是一个在裸机上运行的完整虚拟机管理程序。它只是提供了一个Linux控制台。维基百科:“从当前的ESX版本4.1开始,首先启动Linux内核,[6]并用于加载各种专门的虚拟化组件,包括VMware的vmkernel组件。此先前启动的Linux内核成为第一个运行的虚拟机机器,称为服务控制台。” 像Novell Netware一样-使用DOS作为引导加载程序进行引导,然后NW内核对于运行时来说是裸机。
mfinni 2011年

@mfinni与需要“普通英语”的人交谈时,诸如此类的区别不太重要。ESX / ESXi和Player仍处于完全虚拟化状态,区别在于虚拟机管理程序所处的位置。
sysadmin1138

5

LXC是一种在内核处隔离系统/进程的方法。该系统被锁定在一个“容器”中,因此它无法与该容器之外的任何东西进行交互。因此命名为Linux Containers。

这对许多事情可能很有用,其中之一就是隔离在计算机上运行的服务。如果其中一项服务受到威胁,则主机系统本身(以及在其自己的LXC中运行的其他服务)将不受影响。它甚至可以用作愚蠢的手段,使每个用户都可以root权限访问自己的系统,而不必担心彼此交互。

大多数其他“通用”虚拟化由于需要模拟硬件设备而导致资源使用的开销很大。LXC不需要对硬件设备进行任何类型的仿真,因为每个LXC都被授予有限权限/没有直接访问硬件的权限。每个系统都在主机上“运行”,但不会影响其容器之外的任何内容。这种类型的虚拟化被称为OS级虚拟化(google it)。从本质上讲,这意味着运行Linux容器的开销很小/不存在。因此,在一台给定的计算机上可以有数百个LXC,但是使用“通用”虚拟机软件会很快耗尽资源。

实际上,我对Linux-Vserver更为熟悉,但是理论非常相似。


3

理解它的最简单方法是学习chroot的功能。chroot使您可以“登录”类似Unix的系统的文件夹,就好像它本身就是完整的系统一样。换一种说法:

如果你有:

 /
   /boot
   /etc
   /home
   ...

等等,那么您可以添加some_new_install目录:

 /
   /some_new_install
      /boot
      /etc
      /home
      /usr
      ...
   /boot
   /etc
   /home
   /usr
      ...

并登录到/ some_new_install。然后,例如/ some_new_install / etc是新的/ etc,而原始的/ etc被隐藏,并且(大部分)无法访问。/ usr / bin可能与原始版本不同,但具有不同的程序。MySQL在/ usr / bin / mysql中可以是相同的程序,但在/ var / lib / mysql中可以具有不同的数据。

文件系统已虚拟化;您已经分割了原始文件系统,共享其资源,并将这些资源与其他虚拟化资源隔离开来。

太好了 您可以跳到一个虚拟文件系统,并在相同的内核,相同的库(如果使用了符号链接)上运行该文件,而不用运行一个额外的程序来运行一个Unix的全新虚拟副本。它的效率比Xen或VirtualBox之类的东西。

问题是,如果其中一个程序(例如MySQL)发疯并开始使用您的所有CPU并在磁盘上进行交换,那么它仍然会影响计算机的其余部分,因为只有文件系统是虚拟化的,而不是CPU或基础磁盘性能。IP地址和端口也未虚拟化,因此,如果两个程序在网络上发送信息,则它们将使用相同的IP发送信息,从而可能引起冲突。同样,如果mysql的两个副本尝试监听某个端口,则第二个将失败,因为该端口正在使用中。

LXC不仅通过虚拟化文件系统,还通过虚拟化网络ips /端口/接口,CPU,内存使用情况等来解决此问题。

LXC并不像完整的虚拟机一样安全,但是通常,它是高级解决方案。毕竟,操作系统都是关于安全共享资源的。在大多数情况下,运行多个操作系统来做到这一点很愚蠢-我们只需要具有更好隔离性的更好的操作系统即可。这就是LXC和类似工具所提供的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.