在普通英语中解释什么是LXC以及它是有用的

  • 什么是LXC
  • 为什么它是有用的?
  • LXC和普通虚拟化有什么区别?

    如果用“纯英文”表示不懂技术的人,则不能简单地加以解释。 如果没有仔细的考虑,那头发太细了。

    如果说“简单英语”是指与技术人员交谈的pipe理types,因此对技术主题至less有一个通过的理解,我提交下面的说法:


    这是一种不同的虚拟化forms。

    如果你看看VMWare ESXi,这是一个完整的虚拟机pipe理程序,运行所谓的全虚拟化。 在硬件之上运行的虚拟化系统之间有一个非常小的层。 有完整的硬件虚拟化,在虚拟机中运行的操作系统完全独立于虚拟机pipe理程序本身,并呈现所期望的所有硬件。

    再来看看VMWare Player,Workstation,ESX(而不是ESXi)或VMWare Server,并且您有一个提供pipe理程序angular色的完整操作系统。 但是,虚拟机仍然具有完整的虚拟硬件arrays。

    另一种方法是Xen虚拟化,Xen已经有相当一段时间了。 在这种虚拟化的forms中,客户操作系统意识到它是虚拟化的并且已被修改为在该环境中工作。 有时候所有这些需求都是特殊的虚拟化驱动程序。 其他时候,需要彻底更改内核。

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

    容器提供了一种方法,以在具有相同用户空间的系统中不可用的方式在进程之间提供强大的安全隔离。 类似Unix的操作系统已经有了“chroot jail”一段时间了,但是它没有提供进程间隔或者限制jail进程所消耗的资源的能力。 通过对这些stream程进行容器化,可以限制资源的使用,为其分配独立的IP地址,并从系统的其余部分收集利用用户空间的安全漏洞。

    你会在哪里使用LXC与其他types的虚拟化? 这取决于,但是LXC 应该提供比任何其他虚拟化方法更less的虚拟化惩罚,因为它是调解所有用户空间调用的相同内核,而不是虚拟机假装成硬件,以期望与物理硬件对话的一堆OS镜像。 所以如果你有一堆处理需要相同的操作系统版本,并且可以在同一时间重新启动进行更新,那么LXC可以提供一个低成本的方式来安全地运行所有的资源并进行资源pipe理。

    LXC是在内核中隔离系统/进程的手段。 系统被locking在一个“容器”中,因此它不能与该容器外的任何东西进行交互。 因此,名称Linux容器。

    对于很多事情来说它可能是有用的,其中之一就是隔离运行在机器上的服务。 如果其中一个服务受到损害,则主机系统本身(以及在其自己的LXC中运行的其他服务)将不受影响。 它甚至可以被用来作为愚蠢的手段,让每个用户root访问他们自己的系统,不用担心他们之间的交互。

    由于需要模拟硬件设备,因此大多数其他“常见”虚拟化会造成资源使用的大量开销。 LXC不需要硬件设备的任何types的仿真,因为每个LXC被限制/不能直接访问硬件。 每个系统在主机上“运行”,但不能影响其容器外的任何东西。 这种types的虚拟化被称为操作系统级虚拟化(谷歌它)。 这实际上意味着运行Linux容器的开销很小/不存在。 因此,您可以在给定的机器上拥有数百个LXC,但使用“通用”虚拟机软件可能会很快耗尽资源。

    其实我对Linux-Vserver比较熟悉,但是理论是非常一致的。

    了解它的最简单方法是了解chroot的function。 chroot可以让你“login”一个类似unix的系统的文件夹,就好像它是完整的系统一样。 换一种说法:

    如果你有:

    / /boot /etc /home ... 

    等等,那么你可以添加一个some_new_install目录:

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

    并login到/ some_new_install。 那么/ some_new_install / etc是新的/ etc,例如,原始的/ etc是隐藏的,(大部分)是不可访问的。 / usr / bin可能与原来的不同,有不同的程序。 MySQL可能是/ usr / bin / mysql中的相同程序,但是在/ var / lib / mysql中有不同的数据。

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

    这很好。 而不是运行一个全新的虚拟副本,只需要运行一个额外的程序,就可以跳入虚拟文件系统,并在相同的内核,相同的库(如果你使用符号链接)等等上运行它。像Xen或VirtualBox。

    问题是,如果其中一个程序(比如说MySQL)发生故障并开始使用所有的CPU并在磁盘上进行交换,那么它仍然会影响机器的其余部分,因为只有文件系统是虚拟化的,而不是CPU或底层磁盘性能。 IP地址和端口也不是虚拟化的,所以如果两个程序在networking上发送信息,那么他们会从相同的IP地址这样做,这可能会导致冲突。 同样,如果mysql的两个副本尝试侦听某个端口,则第二个将会失败,因为该端口正在使用中。

    LXC通过虚拟化文件系统,networkingips / ports / interfaces,CPU,内存使用等来解决这个问题。

    LXC不像完整的虚拟机那么安全,但通常它是最好的解决scheme。 毕竟,操作系统都是关于安全地共享资源的。 大多数情况下,运行多个操作系统来做到这一点是愚蠢的 – 我们只需要一个更好的操作系统和更好的隔离。 这就是LXC和类似工具所提供的。