一尘不染

没有chroot的LXC

linux

有什么方法可以在不创建容器的情况下使用LXC通过进程组进行资源管理?我正在研究一种在沙箱中运行任意代码的服务,对此我只对硬件资源管理感兴趣。我不要生根发芽;我只希望这些进程组可以访问主文件系统。

有人告诉我lxc重量轻,但是我看到的所有示例都为每个lxc进程创建了一个新容器(即具有完整OS的目录)。我真的没有看到它比其他任何VM解决方案轻得多。

那么,有什么方法可以将LXC用于控制和管理多个过程组,而不必为每个过程组创建单独的容器?


阅读 389

收藏
2020-06-07

共1个答案

一尘不染

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

例如,LXC使用cgroup来设置容器的资源限制。但是,它们完全可以用于设置进程组的资源限制,而无需使用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支持的组件。

2020-06-07