用简单的英语解释什么是 LXC 以及它有什么用处

用简单的英语解释什么是 LXC 以及它有什么用处
  • 什么是 LXC?
  • 它有何用处?
  • LXC和常见的虚拟化有什么区别?

答案1

如果“简单英语”指的是非技术人员,那么这种差异就很难解释。头发太细了,如果不仔细考虑,很难分开。

如果您所说的“简单英语”是指与技术人员交谈的管理人员,因此至少对技术主题有一定的了解,我建议使用以下措辞:


这是虚拟化的不同形式。

如果您查看 VMWare ESXi,就会发现它是一个运行所谓完全虚拟化的完整虚拟机管理程序。在硬件上运行的虚拟化系统之间有一个非常小的层。这是完全硬件虚拟化,其中虚拟机中运行的操作系统完全独立于虚拟机管理程序本身,并具有它所需的所有硬件。

再进一步,看看 VMWare Player、Workstation、ESX(不是 ESXi)或 VMWare Server 之类的东西,您就会拥有一个提供虚拟机管理程序角色的完整操作系统。但是,虚拟机仍然具有完整的虚拟硬件阵列。

另一种方法是半虚拟化,Xen 已经使用了相当长一段时间。在这种虚拟化形式中,客户操作系统知道它是虚拟化的,并且已经修改为在该环境中工作。有时,这只需要特殊的半虚拟化驱动程序。其他时候,需要彻底更改内核。

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

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

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

答案2

LXC 是一种在内核中隔离系统/进程的方法。系统被锁定在“容器”中,因此无法与容器外部的任何东西交互。因此得名 Linux 容器。

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

由于需要模拟硬件设备,大多数其他“常见”虚拟化都会带来大量资源使用开销。LXC 不需要任何类型的硬件设备模拟,因为每个 LXC 都只能有限地/无法直接访问硬件。每个系统都在主机上“运行”,但无法影响其容器之外的任何东西。这种类型的虚拟化被称为操作系统级虚拟化(谷歌搜索)。这实际上意味着运行 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 和类似工具所提供的。

相关内容