有没有办法在不创建容器的情况下使用LXC进行资源管理?我正在开发一个在沙盒中运行任意代码的服务,我只对硬件资源管理感兴趣。我不想要任何chrooting;我只是希望这些进程组能够访问主文件系统。
我被告知lxc重量很轻,但我看到的所有示例都为每个lxc进程创建了一个新容器(即带有完整操作系统的dir)。我真的没有看到它比其他任何VM解决方案都轻得多。
那么有没有什么方法可以用LXC来控制和管理多个进程组,而无需为每一个进程组创建单独的容器?
答案 0 :(得分:20)
LXC不是一个单片系统。它是一组内核功能,可用于以各种不同的方式隔离进程,以及用户空间工具,可以将所有这些功能一起用于创建完整的容器。但是,没有LXC,个别功能仍可单独使用。此外,LXC不需要chroot,即使你给它一个chroot,你也可以将目录从主机系统绑定到容器中,在主机和容器之间共享那些特定的目录树。
例如,LXC使用cgroup来设置容器的资源限制。但它们可用于在不使用LXC工具的情况下为进程组设置资源限制。您可以直接操作/sys/fd/cgroup/memory
或/sys/fs/cgroup/cpuacct
,将进程放入限制允许使用的内存或CPU数量的cgroup中。或者,如果您使用的是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支持的组件。