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:~$
起動がちょっぱや