TenForward

技術ブログ。はてなダイアリーから移転しました

bind mount を使ったお気軽 LXC コンテナのススメ

お手軽に軽量な隔離環境を作るための kazuho さんの jailing とか、それにリソース管理の仕組みを加えた matsumotory さんの virtualing いいですね。

コンテナほどの隔離性は不要だし、一々イメージを落としてきて構築とかやるにはちょっと重たいなというシーンもあるわけで、そういう時に chroot、bind mount はお気軽で良いですし、それに cgroup でのリソース管理を加えてもそんなに重くはなりません。(docker だと他にも色々考えないとダメだし)

こういうのを思いついてサクッと作れてしまう才能がうらやましいわけですが、LXC を使えば才能がない私でも、何かをサクッと作る能力も努力もなく、もう少し隔離度を上げつつある程度の軽さを残した環境を LXC を使って作れますので、ここで紹介しましょう。

LXC 使っちゃったら、前述の軽さがなくなるから意味ないやんって話ですが、LXC ならコンテナ用のファイルシステムを作らずに bind mount を使ってコンテナを起動するのも簡単ですので、環境を作る手間のお手軽さと、bind mount を使ってホストのシステムを共用するというお手軽さは残して環境構築が可能です。

そもそもコンテナって、単に clone システムコールを使ってプロセス起動するだけなので、そんなに重くはならないでしょう、というお話です。もちろん LXC はそれ以外に色々やるので chroot に比べたら重いんですけどね。

bind mount を使った軽量(?)コンテナ

LXC にはコンテナ起動時にコンテナ用に何かをマウントするための設定があります。ここでホストのディレクトリやファイルを bind mount するだけで、ホストのシステムの一部をコンテナにエクスポートできます。

例えばホストの /usr をコンテナでそのまま使う場合、以下のように書けばそれでコンテナ起動時にマウントしてくれます。

lxc.mount.entry = /usr usr none ro,bind 0 0

つまり

  1. コンテナ用 rootfs 以下にディレクトリを作る (bind mount するにはマウントポイントないとダメですね)
  2. LXCの設定を書く
  3. lxc-startコマンドでコンテナ起動

これで jailing と同じような隔離環境が得られます。

LXC から cgroup を使うのも設定ファイルに制限値を設定すれば良いので、virtualing 相当の操作も可能ですね。

テンプレートを使って bind mount を使ったコンテナを作成する

言葉で書くと簡単ですが、ディレクトリを作ったり、設定ファイルを作ったりを手でやってると面倒で、jailing のお手軽さにかなうわけもありません。

そこで作ってみました。

LXC でコンテナを作る時は lxc-create コマンドにテンプレートを指定して作成します。その lxc-create に指定できるテンプレートファイルです。

$ sudo lxc-create -t bind -n (コンテナ名)

みたいにすれば、必要なディレクトリと設定ファイルを作成してくれます。

私の作った lxc-bind は決め打ちのところが多いです。そこはシェルスクリプトで書かれてるお気軽さですので、適当に変えてもらうということで。

もともと LXC には lxc-sshd というテンプレートが付属していて、これはまさしくコンテナのファイルシステムのほとんどをホストのディレクトリを bind mount して、sshd だけが起動するコンテナを作るテンプレートです。lxc-bind はこれを少し変えただけです。

jailing の例にあった /usr/local/apache/httpd を起動するコンテナを作るのも、

$ sudo lxc-create -t bind -n apache01 \
    -- --bind=/usr/local/apache \
    /usr/local/apache/bin/httpd \
    -c /usr/local/apache/conf/httpd.conf
$ sudo lxc-start -n apache01

ってな感じで簡単です (試してませんが :-p)。もちろん、作成したあとは起動させないとダメですので、jailing よりは実行するコマンドは増えます :-p

テンプレートに渡す引数なしで

lxc-create -t bind -n test01
みたいに実行すると bash を実行するコンテナを勝手に作ります。他に dhclient を実行して勝手に eth0 にアドレスも割り当てます (lxc.network.ipv4 みたいな設定で静的に割り当てることも可能)。

実行例
$ sudo lxc-create -t bind -n test01
$ sudo cat /var/lib/lxc/test01/config
lxc.network.type=veth
lxc.network.link=lxcbr0
lxc.network.flags=up
lxc.rootfs = /var/lib/lxc/test01/rootfs
lxc.utsname = test01
lxc.pts = 1024
lxc.cap.drop = sys_module mac_admin mac_override sys_time
lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed
lxc.mount.entry = /etc/rc.d etc/rc.d none ro,bind 0 0
lxc.mount.entry = /etc/ssl/certs etc/ssl/certs none ro,bind 0 0
lxc.mount.entry = /dev dev none ro,bind 0 0
lxc.mount.entry = /run run none ro,bind 0 0
lxc.mount.entry = /bin bin none ro,bind 0 0
lxc.mount.entry = /sbin sbin none ro,bind 0 0
lxc.mount.entry = /usr usr none ro,bind 0 0
lxc.mount.entry = /lib lib none ro,bind 0 0
lxc.mount.entry = /lib64 lib64 none ro,bind 0 0
lxc.mount.entry = /var/lib/lxc/test01/init sbin/init none ro,bind 0 0

作成するとこんな感じに。

$ sudo lxc-start -n test01 
$ sudo lxc-ls -f test01
NAME    STATE    IPV4         IPV6  GROUPS  AUTOSTART  
-----------------------------------------------------
test01  RUNNING  10.0.100.41  -     -       NO
$ pstree
  :(略)
     |-lxc-start---init.lxc-+-bash
     |                      `-dhclient
  :(略)
$ sudo lxc-attach -n test01 -- ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  17272   596 ?        S    11:28   0:00 /usr/sbin/init.lxc -- /bin/bash
root        18  0.0  0.0  18984  6852 ?        Ss   11:28   0:00 /usr/sbin/dhclient eth0 -cf /dhclient.conf -v
root        19  100  0.0  20264  3144 ?        R    11:28  12:00 /bin/bash
root        21  0.0  0.0  16612  2624 ?        R+   11:40   0:00 ps aux

起動してますね。コンテナ内は bash と dhclient が動いています。

コンテナ内のマウントの様子を見てみると

$ sudo lxc-attach -n test01 -- cat /proc/mounts
  :(略)
/dev/root /etc/rc.d ext4 ro,relatime,data=ordered 0 0
/dev/root /etc/ssl/certs ext4 ro,relatime,data=ordered 0 0
/dev /dev tmpfs ro,relatime,mode=755 0 0
/dev/root /run ext4 ro,relatime,data=ordered 0 0
/dev/root /bin ext4 ro,relatime,data=ordered 0 0
/dev/root /sbin ext4 ro,relatime,data=ordered 0 0
/dev/root /usr ext4 ro,relatime,data=ordered 0 0
/dev/root /lib ext4 ro,relatime,data=ordered 0 0
/dev/root /lib64 ext4 ro,relatime,data=ordered 0 0
/dev/mapper/LXCVG01-LXCLV01 /sbin/init btrfs ro,relatime,space_cache 0 0
  :(略)

lxc.mount.entry で設定した辺りは上記でしょうかね。

ruby-lxc を使って同じようなことをやる

LXC には ruby-lxc というものがあって、これでスクリプトを書けば同じようなことが比較的簡単にできます。これをやるのが

です。シャレで作っただけなのでこれを使おうと思わないでください。^^;

こっちは --bind みたいなオプションも未実装なので使えないと思います。コンセプト作と思ってください。(ruby-lxc を使ってみたかっただけ)

$ sudo ruby lxcing /bin/bash

まとめ

延々とわけのわからないことを書きましたが、何が言いたいかというと、LXC お手軽だからもっとみんな使いましょう、ってことです。

おまけ

LXC 使っちゃうとまあ色々プロセス起動したり、ファイルシステム色々扱ったりするので、声を大にして「軽いぞ!!」とは言えない気もするのですが、libcontainer とか libct とか使ったら bind mount して気軽に隔離環境作るプログラムってすぐ作れないかな? 誰か作るといいですね。

4.0.2 kernel と非特権コンテナ

(2015-06-11 追記) 以下の問題は 4.0.5 カーネルで解決しています。

手元 (Plamo 5.3) では 4.0.2 カーネルで LXC の非特権コンテナを起動するとカーネルが固まります。その時のログは以下です (netconsole 経由で取ったので見にくい)。

4.0.2 でマージされたコミットのうち、以下を revert するとお亡くなりにはならなくなります (副作用は知りません)。

あまり関係する人はいないかもしれませんが、非特権コンテナを使う場合はとりあえず 4.0.1 までを使っておくのが良さそうです。

とりあえず lxc-devel には「誰か同じような現象に遭遇した?」とメール投げてみましたが...

(2015-05-12 追記)

mainlineからstableへ適用すべきパッチが2つほど抜けていたようです。4.0.3 で直るのかな?

以下の 2 つのパッチを適用すると LXC 非特権コンテナが問題なく動作し、カーネルがハングアップする事もなくなります。

(2015-05-14 追記)
4.0.3 がリリースされていますが、上記のパッチは適用されていません。

(2015-05-18 追記)
4.0.4 がリリースされていますが、上記のパッチは適用されていません。

lxd を使ったライブマイグレーション (2)

このエントリの情報はおそらく古いです

前のエントリ はネットワークの設定なしで行いましたが、そこに veth でホストと通信可能なネットワークの設定を行って試しました。一度で書けよって内容ですが :-p

まず非特権コンテナで veth が使える設定を行います (多分必要)。LXC の設定です。/etc/lxc/lxc-usernet で "ubuntu" ユーザが 10 個 veth ペアを作成可能なようにしました (lxcbr0 を使用)。両方のホストで行っています。

$ cat /etc/lxc/lxc-usernet 
# USERNAME TYPE BRIDGE COUNT
ubuntu veth lxcbr0 10

前のエントリ で作成した profile である "criu" にネットワーク設定を追加します。両方のホスト共変更します。

name: criu
config:
  raw.lxc: |
    lxc.tty = 0
    lxc.console = none
    lxc.cgroup.devices.deny = c 5:1 rwm
  security.privileged: "true"
devices:
  eth0:
    nictype: bridged
    parent: lxcbr0
    type: nic

これでコンテナを起動し、コンテナにアドレスを割り当てます。

$ lxc start ct01
$ lxc exec ct01 -- /sbin/dhclient eth0
$ lxc list
+------+---------+-----------+------+
| NAME |  STATE  |   IPV4    | IPV6 |
+------+---------+-----------+------+
| ct01 | RUNNING | 10.0.3.77 |      |
+------+---------+-----------+------+

割り当たったのでマイグレーションします。

$ lxc move lxd01:ct01 lxd02:ct01
$ lxc list
+------+-------+------+------+
| NAME | STATE | IPV4 | IPV6 |
+------+-------+------+------+
+------+-------+------+------+
$ lxc list lxd02:
+------+---------+-----------+------+
| NAME |  STATE  |   IPV4    | IPV6 |
+------+---------+-----------+------+
| ct01 | RUNNING | 10.0.3.77 |      |
+------+---------+-----------+------+

移動しましたね。

(追記)

lxd02 上で

$ lxc exec ct01 -- apt-get install micro-httpd
$ lxc exec ct01 -- sh -c 'echo "LXD Test" | tee /var/www/index.html'
$ curl http://10.0.3.77/
LXD Test

としておいて、lxd01 上で以下のように実行すると、ちゃんとマイグレーションされてますね。

$ lxc move lxd02:ct01 lxd01:ct01
$ curl http://10.0.3.77/
LXD Test

一度、まずマイグレーションした後である程度コンテナイメージが同期された状態で、特に何もファイルを更新しない状態でマイグレーションしてもそれなりにダウンタイムありますね。

(さらに追記) 1秒おきに date コマンドの結果を出力するスクリプトを回してマイグレーションするとこんなことも。結構時間かかりますね。それほどコンテナ上のファイルは (手では) 変更していません。

Wed Apr 15 10:06:12 UTC 2015
Wed Apr 15 10:06:13 UTC 2015
Wed Apr 15 10:07:31 UTC 2015
Wed Apr 15 10:07:32 UTC 2015
Wed Apr 15 10:09:53 UTC 2015
Wed Apr 15 10:09:54 UTC 2015
Wed Apr 15 10:10:14 UTC 2015
Wed Apr 15 10:10:15 UTC 2015

lxd を使ったライブマイグレーション (1)

このエントリの情報はおそらく古いです

先月、LXD 0.3 のリリースでライブマイグレーションサポート、というアナウンスがあったので早速試しましたが失敗しました (> lxd を使ったライブマイグレーション(未完) - TenForwardの日記)。

これはバグがあったようで、その後の LXD と LXC の更新で修正され、0.6 でとりあえず動くようになったようなので試してみました。とりあえずネットワークの設定がされないシンプルなコンテナで試しました。

LXD はまだまだリリースのたびにかなり機能が変わっていますし、LXC の C/R 関連のパッチもガンガン投稿されている状況ですし、CRIU もバージョンアップのたびに新機能が追加されていますので、以下の例がいつまで有効かわかりません。(明日には動かないかも?)

準備

まずは準備です。OS は Ubuntu Trusty をインストールした環境を 2 つ準備しています。

lxd01
ライブマイグレーション元のホスト、lxcコマンドを実行するホスト
lxd02
ライブマイグレーション先のホスト

LXC/LXD のリポジトリは以下を登録します。

LXD
lxd-stable(最新のstableリリース)
LXC
lxc-git-stable-1.1(1.1系列の最新リリース)

以下の操作は両方のホストで行います。

$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
$ sudo add-apt-repository ppa:ubuntu-lxc/lxc-git-stable-1.1
$ sudo apt-get update

LXDをインストールします。その後、依存関係で入る lxcfs を削除します。これは、現時点では lxcfs が行う bind mount を CRIU でサポートしていないためのようです。

$ sudo apt-get install lxd
$ dpkg-query --show lxd
lxd	0.6-0ubuntu1~ubuntu14.04.1~ppa1
$ dpkg-query --show lxc
lxc	1.1.2+stable~20150415-0023-0ubuntu1~trusty
$ sudo apt-get remove lxcfs

LXD 0.6, LXC 1.1.2 がインストールされています。

ここで lxd インストール時に管理者アカウント (sudo グループに所属だっけ?) は lxd グループに属するように設定されますので、一度ログアウトするなどして lxd グループに属した状態にします。

$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lpadmin),111(sambashare),113(lxd)

各 LXD ホストのパスワードを設定しましょう。

$ lxc config set password hogehoge

LXD の設定

以下は lxc コマンドを実行するところで実行します。ここでは lxd01 で実行しています。

  1. イメージを準備します。linuxcontainers.org の Ubuntu イメージを使います。イメージのエイリアスとして "ubuntu" という名前を登録します。
    $ lxd-images import lxc ubuntu trusty amd64 --alias ubuntu
    Downloading the GPG key for https://images.linuxcontainers.org
    Downloading the image list for https://images.linuxcontainers.org
    Validating the GPG signature of /tmp/tmp5y_tj_h4/index.json.asc
    Downloading the image: https://images.linuxcontainers.org/images/ubuntu/trusty/amd64/default/20150415_03:49/lxd.tar.xz
    Validating the GPG signature of /tmp/tmp5y_tj_h4/ubuntu-trusty-amd64-default-20150415_03:49.tar.xz.asc
    Image imported as: 45cd14361df508652160a28f76d96360a68e6c354e39879671b8b600a788562c
    Setup alias: ubuntu
  2. リモートホストの登録。現時点では自ホストも登録しておく必要があります。
    $ lxc remote add lxd01 lxd01:8443
    $ lxc remote add lxd02 lxd02:8443
    $ lxc remote list
    local
    lxd01 https://lxd01:8443
    lxd02 https://lxd02:8443
  3. デフォルトで登録されているprofileの"default"を適当な名前のプロファイルにコピーします。ここでは"criu"にしました。
    $ lxc config profile copy default criu
  4. "criu"を編集します。
    $ lxc config profile edit criu
    • 内容はこんな風にします。
      name: criu
      config:
      raw.lxc: |
      lxc.tty = 0
      lxc.console = none
      lxc.cgroup.devices.deny = c 5:1 rwm
      security.privileged: "true"
      devices: {}
    • "raw.lxc"で設定されているものは、現時点でLXCでCRIUを使う場合に必須の設定です。
    • 現時点で、非特権コンテナの C/R はできませんので "security.privileged" を "true" にします。これで特権コンテナで起動します。
  5. マイグレーション元と先に同じ profile がなければマイグレーションできませんので lxd02 側にコピーします。
    $ lxc config profile copy lxd01:criu lxd02:criu
    $ lxc config profile list
    default
    criu
    $ lxc config profile list lxd02:
    default
    criu

マイグレーション

  1. コンテナを作成します。イメージは "ubuntu" を使い、"ct01" という名前です。
    $ lxc init ubuntu ct01
  2. 作成したコンテナに、先ほど作成した profile である "criu" を適用します。
    $ lxc config profile apply ct01 criu
    Profile criu applied to ct01
  3. コンテナを起動します。このコンテナは veth の設定もされない独立したネットワークにいるコンテナです。
    $ lxc start ct01
    $ lxc list
    +------+---------+------+------+
    | NAME | STATE | IPV4 | IPV6 |
    +------+---------+------+------+
    | ct01 | RUNNING | | |
    +------+---------+------+------+
  4. マイグレーションします。
    $ lxc move lxd01:ct01 lxd02:ct01
    $ lxc list
    +------+-------+------+------+
    | NAME | STATE | IPV4 | IPV6 |
    +------+-------+------+------+
    +------+-------+------+------+
    $ lxc list lxd02:
    +------+---------+------+------+
    | NAME | STATE | IPV4 | IPV6 |
    +------+---------+------+------+
    | ct01 | RUNNING | | |
    +------+---------+------+------+

とりあえず lxd01 で動いていたコンテナが lxd02 に移動しました。

これだけではコンテナ上で動いているデーモン等がちゃんと移動したのかもわかりませんし、ダウンタイムも不明ですが、とりあえず移動したということで。

続編は こちら

lxd を使ったライブマイグレーション(未完)

(2015-04-15 追記) マイグレーションできたブログエントリを書きました > lxd を使ったライブマイグレーション (1) - TenForwardの日記
(2015-03-18 追記) lxd 0.4 が出たので試してますが、今度はマイグレーション先の lxd がこんなログを吐いてしまいます ^^;

panic: runtime error: invalid memory address or nil pointer dereference

(2015-03-18 追記ここまで)

前回、リリースされたばかりの lxd 0.3 を簡単に試してみました。本当に簡単なお試しで lxd である必要すらないお試しでした。もう少し lxd らしい使い方を、と思って試してますが、なかなかうまくいきませんね。

lxd 0.3 の目玉機能の一つはこれでしょう。

Initial support of live migration (requires particular container configuration)

https://linuxcontainers.org/lxd/news/

ライブマイグレーション!!

うまくいくか試してみました。ドキュメントがほとんどないので手探りです。

コンテナの特別な設定が必要とあります。これは lxd のバックエンドは liblxc を使っているので LXC 1.1 でも必要な設定と同じで以下の 3 つです。

lxc.tty=0
lxc.console=none
lxc.cgroup.devices.deny=c 5:1 rwm

お試し環境

以下の 3 台を使っています。

  • Ubuntu 14.04.2 LTS x 2 に lxd のデイリービルドパッケージをインストール (lxd ホスト、ここでは lxd01, lxd02 という名前)
  • Plamo 5.3.1 にソースからビルドしてインストール (lxc コマンド実行環境)

lxd のインストール

前回と同じです。Ubuntu 14.04.2 LTS を使いました。2 台にセットアップします。

ubuntu@lxd01:~$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-daily
ubuntu@lxd01:~$ sudo apt-get update
ubuntu@lxd01:~$ sudo apt-get install lxd

これでインストールされた /etc/init/lxd.conf を書き換えて、リモートから接続できるようにします。lxd.conf の exec 行を書き換えて以下のようにします。

exec /usr/bin/lxd --group lxd --tcp 10.200.200.200:8443 --debug >> /var/log/lxd.log 2>&1

'--debug' を付けて、デバッグ出力を /var/log/lxd.log に保存するようにしてみました。

クライアントの設定

lxc コマンドを実行するクライアントで remote の設定をします。

plamo@client:~$ export GOPATH=~/go
plamo@client:~$ export PATH=$PATH:$GOPATH/bin
plamo@client:~$ lxc remote add lxd01 10.200.200.200:8443
plamo@client:~$ lxc remote add lxd02 10.200.200.208:8443
plamo@client:~$ lxc remote list
lxd01 <10.200.200.200:8443>
lxd02 <10.200.200.208:8443>

イメージの登録

lxd ホスト上で以下のようにします。

ubuntu@lxd01:~$ lxd-images import lxc ubuntu trusty amd64 --alias ubuntu --alias ubuntu/trusty --alias ubuntu/trusty/amd64

クライアントから確認してみます。

plamo@client:~$ lxc image list lxd01:
+--------+----------+--------+-------------+
| ALIAS  |   HASH   | PUBLIC | DESCRIPTION |
+--------+----------+--------+-------------+
| ubuntu | 47cd2f39 | no     |             |
+--------+----------+--------+-------------+

コンテナ作成

片方のlxdホスト上でコンテナを作成します。

plamo@client:~$ lxc init ubuntu lxd01:trusty01

デフォルトでは作成したコンテナには "default" というプロファイルが割りあたっています。プロファイルはコンテナに対する設定をまとめたものです。"default" をコピーして "criu" という名前のプロファイルにします。

plamo@client:~$ lxc config profile copy lxd01:default lxd01:criu

"criu" プロファイルを編集します。以下のように edit コマンドを実行するとエディタが起動します。

plamo@client:~$ lxc config profile edit lxd01:criu  (プロファイルの編集)

こんな感じにします(yaml形式)。config の所の raw.lxc を追加しました。

name: criu
config:
  raw.lxc: |-
    lxc.tty=0
    lxc.console=none
    lxc.cgroup.devices.deny=c 5:1 rwm
devices:
  eth0:
    nictype: bridged
    parent: lxcbr0
    type: nic

ちゃんと編集できたか確認します。

plamo@client:~$ lxc config profile show lxd01:criu  (プロファイルの確認)
raw.lxc = lxc.tty = 0
lxc.console = none
lxc.cgroup.devices.deny = c 5:1 rwm
eth0: nic

"criu" プロファイルをコンテナに割り当てます。

plamo@client:~$ lxc config profile apply lxd01:trusty01 criu
Profile criu applied to trusty01

もう一台の lxd ホストにもプロファイルをコピーします。

plamo@client:~$ lxc config profile copy lxd01:criu lxd02:criu

プロファイルの確認

plamo@client:~$ lxc config profile list lxd01:
default
criu
plamo@client:~$ lxc config profile list lxd02:
default
criu

コンテナの起動とマイグレーション

コンテナを起動します。

plamo@client:~$ lxc start lxd01:trusty01
plamo@client:~$ lxc list lxd01:
+----------+---------+---------------------+------+
|   NAME   |  STATE  |        IPV4         | IPV6 |
+----------+---------+---------------------+------+
| trusty01 | RUNNING | 10.0.3.7, 127.0.0.1 | ::1  |
+----------+---------+---------------------+------+

ライブマイグレーションを実行します。

$ lxc move lxd01:trusty01 lxd02:trusty01
error: restore failed

がーん。

コンテナの送り側 (lxd01) のログはこんな

2015/03/17 19:18:55 client cert != key for lxd01
2015/03/17 19:18:55 found cert for 10.200.200.200
2015/03/17 19:18:55 handling GET /1.0
2015/03/17 19:18:55 client cert != key for lxd01
2015/03/17 19:18:55 found cert for 10.200.200.200
2015/03/17 19:18:56 client cert != key for lxd01
2015/03/17 19:18:56 found cert for 10.200.200.200
2015/03/17 19:18:56 handling GET /1.0/containers/trusty01
2015/03/17 19:18:56 setting lxc.tty=0
2015/03/17 19:18:56 setting lxc.console=none
2015/03/17 19:18:56 setting lxc.cgroup.devices.deny=c 5:1 rwm
2015/03/17 19:18:56 Configured device eth0
2015/03/17 19:18:56 found cert for 10.200.200.200
2015/03/17 19:18:56 handling POST /1.0/containers/trusty01
2015/03/17 19:18:56 setting lxc.tty=0
2015/03/17 19:18:56 setting lxc.console=none
2015/03/17 19:18:56 setting lxc.cgroup.devices.deny=c 5:1 rwm
2015/03/17 19:18:56 Configured device eth0
2015/03/17 19:18:57 client cert != key for lxd01
2015/03/17 19:18:57 client cert != key for 10.200.200.200
2015/03/17 19:18:57 allowing untrusted GET to /1.0/operations/49bcae70-b968-4f14-886b-b5cb2280742c/websocket?secret=0h5i81aO9EXXfGHbTHm5eQXmB704mxX2%2BasWPYjEi0jL9Ykbdh1wzU635ylLE%2F3WbqJHplXBHlqM9tf8OrXIvpJBwRyhi4WrK2BCXwKJzwKRVt3hlqZNUPD02VHv%2B%2Bea4sgVDQ%3D%3D
2015/03/17 19:18:58 client cert != key for lxd01
2015/03/17 19:18:58 client cert != key for 10.200.200.200
2015/03/17 19:18:58 allowing untrusted GET to /1.0/operations/49bcae70-b968-4f14-886b-b5cb2280742c/websocket?secret=%2BAFr%2BL4Zt4mBciMWEciW0%2FOdHWSt14Ty13k%2Berz%2FC%2FKRF1LoGAZsnG7HBeuRgZMg8rEEG0oE2f5WfTrVKOZJnZd7cRtNaguiEYzwvwEly6fmplO9Nom37ti0v%2FSvNMbzZA3lDQ%3D%3D
2015/03/17 19:18:58 client cert != key for lxd01
2015/03/17 19:18:58 client cert != key for 10.200.200.200
2015/03/17 19:18:58 allowing untrusted GET to /1.0/operations/49bcae70-b968-4f14-886b-b5cb2280742c/websocket?secret=zOVPGshQorM8bm1IJk3Y9lVhXwz5oTkHSFbqH5yCZBSph2YOKEHpeqjrxj7BtESyq3iGabS993AHjzi8NG99A05z5OsL6EB2KGyx1%2Fb3sEDun%2B43TwzjGWYyiZbOcdYBvGxWaQ%3D%3D
2015/03/17 19:18:58 got error getting next reader websocket: close 1005 , &{{%!s(*net.netFD=&{{10 0 0} 16 1 1 false unix 0xc20811b300 0xc20811b320 {139997956048208}})}}
2015/03/17 19:19:15 got error getting next reader websocket: close 1005 , &{{%!s(*net.netFD=&{{10 0 0} 16 1 1 false unix 0xc20811a2a0 0xc20811a2e0 {139997956048384}})}}

受け側 (lxd02) のログはこんな

2015/03/17 19:18:56 client cert != key for lxd02
2015/03/17 19:18:56 found cert for 10.200.200.208
2015/03/17 19:18:56 handling GET /1.0
2015/03/17 19:18:56 client cert != key for lxd02
2015/03/17 19:18:56 found cert for 10.200.200.208
2015/03/17 19:18:56 found cert for 10.200.200.208
2015/03/17 19:18:56 handling GET /1.0/profiles
2015/03/17 19:18:56 responding to profiles get
2015/03/17 19:18:56 client cert != key for lxd02
2015/03/17 19:18:56 found cert for 10.200.200.208
2015/03/17 19:18:56 handling POST /1.0/containers
2015/03/17 19:18:56 responding to create
2015/03/17 19:18:57 setting lxc.tty=0
2015/03/17 19:18:57 setting lxc.console=none
2015/03/17 19:18:57 setting lxc.cgroup.devices.deny=c 5:1 rwm
2015/03/17 19:18:57 Configured device eth0
2015/03/17 19:18:57 client cert != key for lxd02
2015/03/17 19:18:57 found cert for 10.200.200.208
2015/03/17 19:18:57 handling GET /1.0/operations/4aabada3-030d-4d6e-96b4-2625b070a180/wait
2015/03/17 19:18:58 got error getting next reader read tcp 10.200.200.200:8443: use of closed network connection, &{%!s(*os.File=&{0xc2080b2a50}) {{%!s(int32=0) %!s(uint32=0)} %!s(uint32=0)} ?reflect.Value?}
2015/03/17 19:19:15 got error getting next reader read tcp 10.200.200.200:8443: use of closed network connection, &{%!s(*os.File=&{0xc2080b23f0}) {{%!s(int32=0) %!s(uint32=0)} %!s(uint32=0)} ?reflect.Value?}

何か実行されてる風ですが、エラーが出てますね。(ホスト間で rsync は実行されてるっぽい)

識者の登場を待ちましょう :-p (続くかも)