LXCコンテナー内でLXCコンテナーを起動することは可能ですか?


21

別のLXCコンテナー内でLXCコンテナーを起動することは可能ですか?


1
実際にこれを行う本当の理由はありますか?ここの質問はあなたが直面する実際の問題についてであるべきであることを覚えていてください。
ゾレダチェ

6
lxcはVMの移行(およびバックアップ+リカバリ)も簡素化できるはずだと思います。しかし、ホストOSへのアクセスがない場合(たとえば、安価なvps)についてはよくわかりません。
ミハイル

回答:


45

ここでいくつかの神話を払拭します。

これは悪い考えです。ごめんなさい。–ジェイコブ3月5日20:30

これが悪い考えだとは思わない。これは、実際にはchroot内のchrootです。一方では、無視できる方法でパフォーマンスを低下させる可能性があります(VM内でVMを実行する場合と比較して何もありません)。一方、より安全である可能性が高くなります(たとえば、ルートホストシステムとその構成要素からより分離されます)。

実際にこれを行う本当の理由はありますか?ここでの質問は、直面している実際の問題に関するものであることを忘れないでください。–ゾレダチェ3月5日21:52

ポスターの次のコメントに100%同意します。さらに、ここに質問を投稿するすべての人が、本当の理由があると考えている可能性が高いと考えるのは安全だと思います。

lxcはVMの移行(およびバックアップ+リカバリ)も簡素化できるはずだと思います。しかし、ホストOSへのアクセスがない場合(たとえば、安価なvps)についてはよくわかりません。–ミハイル3月6日11:17

実際、6月にPaaS / IaaSプロジェクトのLXCに飛び込んだときにこの質問に出会いました。特に、開発目的でクラウド環境をエミュレートできる機能に興味がありました。

LXCeption。深すぎます。–トムオコナー3月6日22:46

私はこれを読んだときに少し笑いましたが、そうではありません。

とにかく、私はこれをすべて読んだ後、Ubuntu 12.04 LTS Server EditionのストックインストールでVirtualBox環境を最終的にセットアップしました。これは100%可能だと思っていました。LXCをインストールした後、新しいコンテナーを作成し、apt-getでコンテナー内にLXCをインストールしました。インストールの大部分は順調に進行しましたが、最終的にcgroup-liteパッケージの問題が原因でエラーが発生しました。パッケージのインストール後にupstartジョブを開始できませんでした。

少し検索した後、stgraber.orgでこのすばらしい記事に出会いました(グッズは「コンテナのネスト」セクションの下に隠れています)。

sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-host-container -t ubuntu
sudo wget https://www.stgraber.org/download/lxc-with-nesting -O /etc/apparmor.d/lxc/lxc-with-nesting
sudo /etc/init.d/apparmor reload
sudo sed -i "s/#lxc.aa_profile = unconfined/lxc.aa_profile = lxc-container-with-nesting/" /var/lib/lxc/my-host-container/config
sudo lxc-start -n my-host-container
(in my-host-container) sudo apt-get install lxc
(in my-host-container) sudo stop lxc
(in my-host-container) sudo sed -i "s/10.0.3/10.0.4/g" /etc/default/lxc
(in my-host-container) sudo start lxc
(in my-host-container) sudo lxc-create -n my-sub-container -t ubuntu
(in my-host-container) sudo lxc-start -n my-sub-container

そのAppArmorポリシーをインストールしてデーモンを再起動すると、うまくいきました(ただし、ネットワーク範囲を変更することを忘れないでください!)。実際、特定のスニペットは非常に重要であると考えたため、記事がオフラインになった場合に備えて、http://pastebin.com/JDFp6cTBをミラーリングしました。

その後、sudo /etc/init.d/cgroup-lite start成功し、順風満帆でした。

そのため、はい、別のLXCコンテナ内でLXCコンテナを起動することができます:)


1
この構成は、AppArmor保護をほとんど無効にします(コンテナを制限なしで実行することにより)。AppArmorは、「コンテナ内での偶発的な特権の誤用からホストを保護することを目的としています」。この設定は、ネストされたlxcコンテナによって悪用されるlxcホストをほとんど開いています。ネストされたLXCホストは、そのコンテナーに対しても保護を提供しない場合があります。一般に、この保護を無効にすることはお勧めしません。
Reece45

lxc内でlxcを実行するための実行可能な安全なアプローチはありますか?
マスカルポーネ14

10
実際の使用例:ジェンキンを実行するLXCコンテナーがあり、ジェンキンが統合テストを実行する前にLXCコンテナーを実行できるようにしたい。代替案:LXCの外部でジェンキンを実行するか、ssh経由でホスト上にLXCコンテナーを作成します((い)。
ジョヴァンニトラルド14

13

Ubuntu 14.04(信頼できる)を使用すると、親コンテナの設定に次を簡単に追加できます。

lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting

参照:https : //help.ubuntu.com/lts/serverguide/lxc.html#lxc-basic-usage (「ネスト」を検索)

ログイン画面が表示される前に長時間停止しないように、起動する前にネットワークを事前に設定してください。

HTH


1
完全に動作します—ありがとう!上記の行を配置する親コンテナ設定をまだ持っていない可能性がある私のような~/.config/lxc/default.confユーザーの場合、コンテナを作成するユーザーのアカウントでファイルを追加し、その2行を追加するとうまく機能します。
ブランドンロードス

2017年に戻って!...よく動作しますが、質問しない-最近、私は、「エンタープライズ・Y」のアプリのためLXC内部の設定]ドッキングウィンドウに持っている
レスター・チャン

1

また...すべてのOpenstackを単一のLXCコンテナーにインストールできることを知っていました。その後、Openstackの各サービス(nova、swiftなど)はすべて、「マスター/親」コンテナ内の「ネストされた」lxcコンテナにインストールされます。

すべてをインストールするのに少し時間がかかりますが、完了したら、ラップトップまたはデスクトップ上に実験用の素晴らしいOpenStack環境があります。

OpenStackを停止する場合は、同じマスター/親コンテナーをlxc-stopしてOpenstackを再起動します。

参照: Openstack Single Installerの手順


1

はい、ネストされたLXCコンテナを実行できます。最初のコメントにもかかわらず、ネストされたコンテナが確かに役立つ場合とユースケースがあります。Stephane Graberの10部構成のLXCブログをご覧ください。特に、コンテナの入れ子のセクションをご覧ください-

ステファン・グラバーのLXCに関する10回シリーズ

ユースケース:マルチテナントLXC環境が必要だとします。LXCコンテナー構成ファイルに2つのコマンドを追加して、ネスティングを有効にして、各個人または組織ごとに1つのマスターコンテナーを作成します。次に、各マスターコンテナでネストされたサブコンテナを作成し、各グループに必要なアプリ、デスクトップなどをインストールします。マスターコンテナのデフォルトネットワークは10.0.3.xですが、ネストされたコンテナはデフォルトで10.0.4.xです(必要に応じて変更できます)。

Nested LXCを使用した最大の利点は何ですか?マスターコンテナをlxc-stopし、lxc-cloneする場合..マスターだけでなく、すべてのサブコンテナも複製します...これは、迅速なバックアップに便利です。このアプローチは、LXCライブマイグレーションw / CRIUを実行したい場合にも便利です。マスターコンテナの1つを別のマシンに移行すると...実際には、そのコンテナとすべてのネストされたコンテナも移行します。

最後に、LXCネスティングのクールな例として、Stephane Graberなどが、LXC、BPG、OSPFをすべて1つのLXCコンテナで使用する「インターネット」のシミュレータを構築しました。その1つのLXC「マスターまたは親」LXCコンテナー内には、それぞれ512個のネストされたLXCコンテナーがあり、それぞれがBGP / OSPFルーティング用にQuaggaを実行しています。これらの512個のインターネット「ノード」を合わせてインターネットをシミュレートします。この実装は、すべての参加者が2014年のNSECセキュリティ会議でインターネットのセキュリティを試すために使用されました。

このソースは、Gitugの次の場所にあります。 2014年、インターネットgithubコード用NSEC LXCシミュレーター

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.