貧乏人のための仮想環境

貧乏性の私は、どうもVMWare等の完全仮想化のソフトウェアはリソースがもったいなくて、積極的には使う気になれない。あくまでテスト環境として使う程度だ。100ノードぐらいのhadoopクラスタKVM上に構築したいという野望もあるけれど、100ノードも立ち上げるだけのハードウェアがない。そういう時の、Amazon EC2かも知れないが。。

時間単位でちまちま金を払うのは、貧乏臭くていやだ!

「金がないなら知恵を出せ。知恵がないなら汗をかけ。」
ということで、冷汗をかきながら、LXCを使って、コンテナ型の仮想環境を構築したいと思う。コンテナ型の仮想環境の説明は、ここが詳しい。

いきなり実環境で、LXCを試すのは、怖かったので、Ubuntu 11.04上のVirtualBoxUbuntu Server 11.04 を構築して、その上で試してみた。しばらく使ってみて、慣れてきたら、ホストOS上で直接、LXCのコンテナを10ぐらい立ち上げてHadoopやCloudFoundryの環境を構築したいと思う。

以下、LXCの構築手順の備忘録。

基本的には、ここの手順を参考にした。

LXCのインストール

・面倒なので、まずrootになってしまう

$ sudo -i

・インストール

# apt-get update && apt-get install lxc debootstrap bridge-utils dnsmasq

・cgroupの作成

# mkdir /cgroup
# mount -t cgroup none /cgroup
# echo "none /cgroup cgroup defaults 0 0" >> /etc/fstab

・ネットワーク設定

# vi /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.5.1
    netmask 255.255.255.0
    network 192.168.5.255
    post-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    post-up sysctl -w net.ipv4.ip_forward=1
    pre-down iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    pre-down sysctl -w net.ipv4.ip_forward=0
    
    bridge_ports none
    bridge_stp off

参考にしたページでは、192.168.3.*のネットワークを使っていたが、たまたま、192.168.3.*のネットワークは使っていたので、192.168.5.*を使うことにした。
また、再起動しても設定が消えないようにした。

・コンテナが使うDHCPDNSの設定

# vi /etc/dnsmasq.conf
domain-needed
bogus-priv
interface = br0
listen-address = 127.0.0.1
listen-address = 192.168.5.1
expand-hosts
domain = containers
dhcp-range = 192.168.5.50,192.168.5.200,1h

# vi /etc/dhcp3/dhclient.conf
prepend domain-name-servers 127.0.0.1;
prepend domain-search "containers.";

# dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp3/dhclient.eth0.leases eth0

# service dnsmasq restart

・/etc/dhcp/dhclient.confの修正
ホストOSがDHCPクライアントの場合、resolv.confを書き換えるため、/etc/dhcp/dhclient.confに以下の設定を追加する。

prepend domain-name-servers 192.168.5.1;

以下のようになる

# cat /etc/resolv.conf 
nameserver 192.168.5.1
nameserver 192.168.3.1

・lxc-ubuntuの取得

# wget -O lxc-ubuntu http://bit.ly/ec2ubuntulxc
# chmod +x lxc-ubuntu

元ページからスクリプトを拝借

・新規コンテナの作成

# ./lxc-ubuntu -p /mnt/vm0 -n vm0

結構時間がかかる。いろいろダウンロードしている模様。

・コンテナの起動

# lxc-start -n vm0 -d

・コンテナへ接続

# ssh root@vm0

デフォルトのrootパスワードは、root