btrfsでLXCコンテナーを処理する適切な方法


11

lxcがインストールされた1つのサーバーと、ベースimgとして使用されるlxcコンテナーがあるとし/var/lib/lxc/ubuntu_baseます。簡単にするために、ベースimgをコピーした後の構成の変更を忘れましょう。

一部の人々は、新しいコンテナを作成するためにサブボリュームとスナップショットを使用することを提案しますが、cp --reflinkで簡単に結果を得ることができます。

それでは、複数のコンテナを管理するための適切な方法(またはより良い方法)は何ですか?

  • スナップショット

この方法が最善のようですが、ディレクトリを削除できないため、lxc-destroyなどのコマンドは機能しません。

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • reflinkを使用したcp

このスナップショットとスナップショットの間にパフォーマンスの違いがあるかどうかわかりません

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • または、私が知らない、これを行う他のより良い方法はありますか。

編集:

私はreflinkオプションで見てきたことの一つは、他の人が実行している場合ので、あなたは、ベースコンテナを削除できないこと、である/procとは、/dev参照が常に同じであるSE、マウントされており、変更されることはありません。しかし、すべてのコピーされたコンテナをシャットダウンすることは助けになるようです。


私はbtrfsスナップショット機能を使用して新しいコンテナーを作成しました-それはうまく機能します(かなり迅速なプロビジョニングなど)。ただし、btrfsにはサブボリュームごとのページキャッシュがあります。したがって、スナップショットの使用はクイック/ディスク領域の効率的ですが、メモリ内の事実上同じバイナリのコピーを複数持つことになります。
デビッドグッドウィン

回答:


2

私はUbuntu LTS 14を使用していますが、以下を実行しました(初めてでも)、それは魅力のように機能しました:

lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1

-sをlxc-cloneとともに使用すると、バッキングストアがbtrfsの場合にスナップショットが作成されます(この場合)。

新しいクローン/スナップショットを検証する

lxc-ls -f
btrfs subvolume list /var/lib/lxc

お役に立てば幸いです!


1
最近では、lxc-createまたはlxc-cloneを実行するときに、バッキングストアとしてbtrfsを指定する必要があることに注意してください。代わりにoverlayfsが提供されます。
レスターチャン

新しい「ライト」コンテナを作成するには、-sオプションのおかげで最初の2行(lxc-stopおよびlxc-clone)で十分であり、最後の3行(lxc_start、lxc_stop、lxc_snapshot)は将来のコンテナの進化を管理するヘルパープロセス。それが正しいか ?
ラレバルデ

3

lxcにbtrfsサブボリュームを使用する場合は、にオプションuser_subvol_rm_allowedを追加する必要があります/etc/fstab。1つのfstabファイルから抽出した例:

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

このオプションでは、rootにならずにsubvolを削除でき、通常のユーザーのみが許可されます。この機能は、スナップショットがbtrfsサブボリュームに入るときにlxcによって使用されます


3

ベースイメージの大きさによると思います。おそらく新しいコンテナをlxcで作成し、Salt / Puppetなどを使用してコンテナをプロビジョニングし、比較的大きなコンテナ(たとえば、多くのツールがインストールおよび構成されたdevコンテナ)のみにlxc-cloneを使用します。

lxc-cloneはソースと同じバッキングストアを使用することに注意してください。したがって、サブボリュームを使用するには、「-B btrfs」でコンテナを作成する必要があります。例えば:

lxc-create -B btrfs -n mycontainer -t ubuntu

次に、それをクローンします:

lxc-clone -s mycontainer mynewcontainer

zfsを使用してコンテナを保存する場合は、--zfsrootlxc-createに追加のオプションがあり、デフォルトの「タンク」以外のzpoolを選択できます。例えば:

lxc-create -B zfs --zfsroot=data/lxc

共有してお楽しみください!


私はBTRFSでdebian wheezyを使用しています。このオプション-B btrfsはデフォルトで使用されているようです-私のdebianはBTRFSで設定されているためだと思います。実際、このオプションなしで最初のコンテナ(32ビットのdebian wheezy)を作成し、サブボリュームを作成しました。
ラレバルデ

@lalebardeはおそらく-B best動作中ですが、知っておくと良いでしょう!
レスターチャン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.