Linux Container(2012/06/06)

Hypervisor型の仮想化はディスクのパフォーマンスが悪いし、メモリとかも最初にどかっととってしまうので効率が悪い。

FreeBSDとかのJail環境の場合は、ある環境で特定のポートを使ってしまうと他では使えなかったりするので、例えばHadoopクラスタのようなものを作ることはできない。

コンテナ型の仮想化としてはVserverとかOpenVZがあるけど、標準でKernelに組み込まれているLinux Containerのほうがよさそうかなあと。

以下はUbuntu12.04LTSでテストしたログ

sudo apt-get install lxc
sudo update-rc.d cgroup-lite defaults

lxcを入れただけではcgroupが出来上がらなかった。
インストールされているパッケージの中からcgroupに関係ありそうなのをみると、cgroup-liteがcgroup関係を設定したので、OS起動時に一緒に立ち上がるようにした。

コマンドをながめているlxc-createでOSが作れそう。

lxc-create -n name [-f config_file] [-t template] [-B backingstore] [-- template-options]

それっぽいのを探すと、関係あるのはこのあたりか?

$ ls /usr/share/doc/lxc/examples/
lxc-complex.conf      lxc-macvlan.conf   lxc-phys.conf  lxc-vlan.conf
lxc-empty-netns.conf  lxc-no-netns.conf  lxc-veth.conf

$ ls /usr/lib/lxc/templates/
lxc-busybox  lxc-debian  lxc-fedora  lxc-opensuse  lxc-sshd  lxc-ubuntu  lxc-ubuntu-cloud

lxc-create(シェルスクリプト)の中をながめていると、/usr/lib/lxc/templates/lxc- の下を見ていたので

$ sudo lxc-create -n test1 -f /usr/share/doc/lxc/examples/lxc-veth.conf -t ubuntu

と与えてみる。ビンゴ。lxc-ubuntuを使ってOSのインストールがはじまった。

早速、起動してみるがエラー

$ sudo lxc-start -n test1
lxc-start: failed to attach 'veth8UjPTS' to the bridge 'br0' : No such device
lxc-start: failed to create netdev
lxc-start: failed to create the network
lxc-start: failed to spawn 'test1'
lxc-start: No such file or directory - failed to remove cgroup '/sys/fs/cgroup/cpuset//lxc/test1'

ubuntu12.04ではbr0じゃなくてvirbr0でネットワークインターフェイスが作られていた。

$ /sbin/ifconfig virbr0
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:26 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2512 (2.5 KB)  TX bytes:2414 (2.4 KB)

/var/lib/lxc/test1/config の lxc.network.linkをbr0からvirbr0に書き換えたら起動した。

$ lxc-start -n test1


Ubuntu 12.04 LTS test1 console

test1 login: ubuntu
Password: 
Last login: Wed Jun  6 09:00:51 UTC 2012 from XXXXXXXXX on pts/0
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
ubuntu@test1:~$ /sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr 4a:49:43:49:79:bf  
          inet addr:10.2.3.5  Bcast:10.2.3.255  Mask:255.255.255.0
          inet6 addr: 2003:db8:1:0:214:1234:fe0b:3597/64 Scope:Global
          inet6 addr: fe80::4849:43ff:fe49:79bf/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1754 (1.7 KB)  TX bytes:2010 (2.0 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ubuntu@test1:~$ 

ホスト側からもログインできた

$ ssh -l ubuntu 10.0.3.241
ubuntu@10.0.3.241's password: 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Wed Jun  6 09:01:52 2012
ubuntu@test1:~$ 


起動がちょっぱや