10

有没有办法使用 LXC 进行资源管理,使用进程组而不创建容器?我正在开发一个在沙箱中运行任意代码的服务,对此我只对硬件资源管理感兴趣。我不想要任何 chrooting;我只希望这些进程组能够访问主文件系统。

有人告诉我 lxc 是轻量级的,但是我看到的所有示例都为每个 lxc 进程创建了一个新容器(即具有完整操作系统的目录)。我真的不明白这比任何其他 VM 解决方案要轻得多。

那么有没有什么方法可以使用 LXC 来控制和管理多个进程组,而无需为每个进程组创建单独的容器?

4

1 回答 1

22

LXC 不是一个单一的系统。它是一个内核特性的集合,可用于以各种不同的方式隔离进程,并且是一个用户空间工具,可以将所有这些特性一起使用来创建成熟的容器。但是没有 LXC,个别功能仍然可以单独使用。此外,LXC 不需要 chroot,即使你给它一个 chroot,你也可以将主机系统中的目录绑定到容器中,在主机和容器之间共享那些特定的目录树。

例如,LXC 使用 cgroups 来设置容器的资源限制。但它们可用于在不使用 LXC 工具的情况下设置进程组的资源限制。您可以操纵/sys/fd/cgroup/memory/sys/fs/cgroup/cpuacct直接将进程放入 cgroup 中,以限制它们被允许使用的内存或 CPU 数量。或者,如果您在使用 的系统上,您可以使用给定服务的文件中的等systemd来控制一组进程的内存限制。MemoryLimit=200M.service

如果您想使用 LXC 进行轻量级资源管理,您可以使用或不使用 chroot。启动 LXC 容器时,可以选择要隔离哪些资源;所以你可以创建一个只有虚拟化网络的容器,别无其他;或者只有内存限制但与主机共享其他所有内容的容器。唯一需要隔离的是在容器配置文件中指定的内容。例如,lxc附带几个仅隔离网络的示例容器定义;他们与主机共享一个根分区以及几乎所有其他内容。以下是如何运行与主机系统相同的容器,但它没有网络接口:

 sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash

如果您希望某些文件与主机共享,而不是其他文件,您有两种选择;您可以使用共享根目录,并挂载您希望在容器中有所不同的文件;或者您可以使用 chroot,但将您想要在容器中共享的文件挂载。

例如,这是一个与主机共享所有内容的容器的配置,除了/home; /home/me/fake-home它改为在/home容器内绑定挂载:

lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0

或者如果你想拥有一个完全不同的根目录,但仍然共享一些目录,例如/usr,你可以将几个目录绑定到一个目录中,并将其用作文件系统的根目录。

因此,您有很多选择,可以选择仅隔离一个组件、多个组件或 LXC 支持的多个组件,具体取决于您的需要。

于 2012-11-21T03:30:17.153 回答