Debian Wheezy上でのLXCの設定

更新履歴

ネットワーク設定がイマイチだったので、改善してみた。

はじめに

 OpenVZも悪くないが、何しろDebianのオフィシャルツリーの中に入ってないし制限も多い。必要な機能が3.0以降のカーネルから削除されたというのが大きいのだろう。だんだんと使用条件が嚴しくなってしまう事が容易に想像できるので、LXCへの移行を昨年からぼちぼちやっていた。

 ただし昨年の時点では、以下の問題があって移行がためらわれた。

 思えば詳しい知識もなく、cgroupってなぁにって状態での設定であったからうまくいくわけもない。Ubuntuでは動いたがUbuntu serverに全面移行するのも業腹。もう少し待とうと結論づけたのだった。

 そして先月(2014/5)、再度のチェックを開始したが、インストールも簡便になり、せいぜいcgroupとブリッジの設定をするだけで動くようになった。いやそれどころか、DHCP前提ならそのブリッジの設定すら必要なかった。

 これならいけるだろうという事で、再度の検証を行った。

インストール

 Debian wheezyは2014/5現在、安定版(stable)である。である。LXCはメインツリーに含まれており、以下でセットアップできる。

# aptitude install lxc lxctl

 インストール時にデータ置き場をどこにするか聞かれると思う。デフォルトは /var/lib/lxc あたりだと思うが、うちでは /home/lxc に変更している。これは歴史的事情で、コンテンツは /home に入れておきたいから。openVZのデータ領域も /home/vz に入れている。

 これで必要なものは揃うはずである。

設定(ブリッジ他)

 ネットワークは有線ひとつでDHCPで使おうっていうのならブリッジ設定はいらないだろう。今回使いたいのはApache上でWordpressなブログを動かすサーバと、bind9ベースのDHCPサーバの二点である。しかし個別の設定はコピペでほとんど間に合うので、ブリッジとcgroupの設定のみをここに書く。

cgroup

/etc/fstabに以下を追加。

cgroup  /sys/fs/cgroup  cgroup  defaults        0       0

手動でmountするか再起動。

# mount /sys/fs/cgroup

bridge

/etc/network/interfacesに以下を追加

これはブリッジ。ちなみに ブリッジにもユニークなIPをちゃんとあげないとダメなので要注意 。僕はWeb鯖と同じにして大失敗した。テレクラ状態になったり、Web鯖にsshログインしたはずが親の方に行っちゃったりした。わはは ^^;;;;

で、 br0 っていうのが子ノード用のネットワークデバイスとなる。もちろんIPアドレス(192.168.1.13)は、あなたのネットワークにあわせて設定してほしい。

# for bridge(lxc)
iface br0 inet static
        address 192.168.1.13
        netmask 255.255.255.0
        gateway 192.168.1.1
        bridge_ports eth0
        bridge_stp off
        bridge_maxwait 1

この br0 を、ネット(eth0)が上がった時に up するように仕掛けてみる。具体的には、eth0の設定の最後に以下を追加する。

(iface ... eth0用の設定)
        post-up ifup br0

この post-up という記述がキモ。eth0がupして然る後、br0もアップする。

これで、あとはネットワークを切り直すか再起動する。

制作例(ノード1:isetta)

Webサーバ。IPは192.168.1.14固定。Apache+php5+mod_mysqlを入れる。

導入(コマンド)

cgroupとブリッジ設定ができていれば、導入は実に簡単。

# lxc-create -t debian -n isetta

設定(主にネットワーク)

親機側と子側に矛盾なく設定しよう。

親側(/home/lxc/isetta/config)

# network
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.ipv4 = 192.168.1.14/24
lxc.network.ipv4.gateway = 192.168.1.1

子側(/etc/network/interfaces)

auto eth0
iface eth0 inet static
        address 192.168.1.14
        netmask 255.255.255.0
        gateway 192.168.1.1

そのほか

子側でApache関係をインストール。

マシン起動時に起動するのがいいよね!

# cd /etc/lxc/auto
# ln -s /home/lxc/isetta/config isetta.config

制作例(ノード2:nike)

DNSサーバ。192.168.1.4固定。bins9で、 宅内LAN内のサーバに対し 内外どちらからも適切にアクセスするための仕掛けを供給 している。個別設定は今のところ、/etc/bind 配下を丸コピーして自分自身とWeb鯖の正引き、逆引きをいじるだけで対応。

導入(コマンド)

# lxc-create -t debian -n nike

設定(主にネットワーク)

親機側と子側に矛盾なく設定しよう。

ちなみに2ノード目だが、 ブリッジ設定は br0 をそのまま使えばいい。

親側(/home/lxc/isetta/config)

# network
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.ipv4 = 192.168.1.4/24
lxc.network.ipv4.gateway = 192.168.1.1

子側(/etc/network/interfaces)

auto eth0
iface eth0 inet static
        address 192.168.1.4
        netmask 255.255.255.0
        gateway 192.168.1.1

マシン起動時に起動するのがいいよね!

# cd /etc/lxc/auto
# ln -s /home/lxc/nike/config nike.config

動作検証

別の適当なマシンから、以下を実行してみる。

# host -v www.google.com 192.168.1.4

Tips

上ではいちいち lxc-create で作っているが、以下の手順が本来はおすすめ。

こっちが絶対楽なので。