2012-11-21 3 views
9

コンテナを作成せずにプロセスグループを使用してリソース管理にLXCを使用する方法はありますか?私はサンドボックス内で任意のコードを実行するサービスを開発しており、ハードウェアリソース管理のみに興味があります。私はどんなchrootingもしたくない。これらのプロセスグループがメインファイルシステムにアクセスできるようにしたいだけです。chrootなしのLXC

私はLXCは軽量ですが、私はすべてのLXCプロセスのために新しいコンテナ(すなわちA dirのフルOSと)を作成参照して、全ての実施例と言われました。私はこれが他のどのVMソリューションよりもはるかに軽いのが本当にわかりません。

だから、LXCはそれぞれ、すべてのそれらのいずれかのために別々の容器を作成することなく、複数のプロセスグループを制御し、管理するために使用することができることをどのような方法はありますか?

答えて

20

LXCはモノリシックシステムではありません。これは、さまざまな方法でプロセスを分離するために使用できるカーネル機能のコレクションです。これらの機能をすべて使用して本格的なコンテナを作成するユーザー空間ツールです。しかし、個々の機能は、LXCを使用せずに単独でも使用できます。さらに、LXCはchrootを必要とせず、chrootを与えても、ホストシステムからディレクトリにバインドマウントして、ホストとコンテナ間の特定のディレクトリツリーを共有することができます。

たとえば、cgroupはLXCによってコンテナのリソース制限を設定するために使用されます。ただし、LXCツールをまったく使用しなくても、プロセスのグループにリソース制限を設定することができます。 /sys/fd/cgroup/memoryまたはを直接操作して、使用が許可されているメモリまたはCPUの量を制限するプロセスをcgroupに入れることができます。または、systemdを使用しているシステムでは、特定のサービスの.serviceファイルのMemoryLimit=200Mなどを使用して、プロセスグループのメモリ制限を制御できます。

LXCを使用して軽量リソース管理を行う場合は、chrootの有無にかかわらず、これを行うことができます。 LXCコンテナを起動するときに、分離するリソースを選択できます。仮想化されたネットワークだけを持つコンテナを作成することができます。またはメモリの制限のみを持つコンテナですが、他のすべてをホストと共有します。隔離されるのは、コンテナの構成ファイルで指定されているものだけです。たとえば、lxcには、ネットワークを隔離するだけのコンテナ定義例がいくつか付属しています。彼らはルートパーティションと他のほとんどすべてをホストと共有します。ここではそれは、ネットワークインタフェースを持っていないことを除いホストシステムと同一のコンテナを実行する方法は次のとおりです。

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

あなたには、いくつかのホストで共有されるファイルではなく、他人をしたい場合は、次の2つの選択肢があります。共有ルートディレクトリを使用して、コンテナ内の異なるファイルにマウントすることができます。またはchrootを使うことができますが、共有したいファイルをコンテナにマウントしてください。

例えば、ここに/home以外のホストですべてを共有コンテナの設定です。

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

それとも全く別のルートを持っているが、それでも/usrのようないくつかのディレクトリを共有したい場合は、あなたがディレクトリにいくつかのディレクトリをマウントバインドすることができますが、と:それは代わりに、容器内に/homeオーバー/home/me/fake-homeをマウントをバインドこれをファイルシステムのルートとして使用してください。

だからあなたは多くのオプションを持って、そしてただ一つのコンポーネント、複数、またはLXCは、ニーズに応じて、サポートとして多くを隔離するように選択することができます。

関連する問題