第1回:EucalyptusでAmazon EC2互換環境を作る


 本連載では、巷を賑わせているAmazon EC2とAPI互換であるEucalyptusについて、構築方法や使い方を皆さんにお伝えしたいと思います。Eucalyptus の内部に関する細かいことは後回しにして、なるべく連載の最初のほうで皆さんが実際にEucalyptusに触れられる環境を用意できるようにし、そのあとで内部のことに触れていきたいと思います。

Eucalyptus とは?

 EucalyptusはAmazon EC2/S3 APIと互換性のあるクラウド基盤ソフトウェアで、カリフォルニア大学サンタバーバラ校のコンピュータサイエンス学科の研究プロジェクトとして開発されました。その後、2009年1月にEucalyptus Systems, Inc.を設立し開発の継続と管理を行っています。

 Amazon EC2/S3 APIと互換はありますが、Amazon EC2がパブリッククラウドであるのに対し、Eucalyptusはプライベートクラウドとして利用されることを前提に作られています。そのため、Amazon EC2にある一部の機能(課金イメージの起動など)がEucalyptusには存在しません。

 Eucalyptus はオープンソースとしてソースコードが公開されており、ライセンスはGPLv3となっていますが、現在コミットをするためには CLA (Contributor License Agreement)契約を結ぶ必要があります。ちなみに、launchpad<https://launchpad.net/eucalyptus>やコミュニティサイト<http://open.eucalyptus.com>のフォーラムでバグ報告やパッチは受け付けています。

 2010年8月24日にバージョン 2.0がリリースされましたが、本連載はバージョン1.6.2を前提としています。

Eucalyptus のコンポーネントについて

 Eucalyptus は複数台のハードウェアで構成された環境にインストールすることを前提としています。このためEucalyptusでは役割によって「コンポーネント」と呼ばれる単位でソフトウェアが分割されており、それぞれのコンポーネントは単体で動作するように設計されています。以下に各コンポーネントの概要を説明します。

Eucalyptus のコンポーネント概要図

【Cloud Controller】
クラウド全体の情報を管理し、クラウド利用者に対してAPIやWeb管理画面を提供するコンポーネントです。本連載では「CLC」と記述します。

【Cluster Controller】
Node Controllerとインスタンス(仮想マシン)のネットワークを管理するコンポーネントです。本連載では「CC」と記述します。

【Node Controller】
Cluster Controllerからの要求を受け、Hypervisor(Xen/KVM)にインスタンスの起動を命令するコンポーネントです。本連載では「NC」と記述します。

【Storage Controller】
インスタンスに対して、Amazon EC2でのEBS相当の機能を提供するコンポーネントです。本連載では「SC」と記述します。

【Walrus】
Amazon S3互換のAPIを提供するコンポーネントで、仮想マシンイメージなどはWalrusが管理します。

構築に必要な環境

 Eucalyptusは、設定内容やハードウェア構成によって使える機能に違いがあります。以下に設定の1つである「ネットワークモード(VNET_MODE)」の値の違いによる使える機能の対比を示します。

VNET_MODE/機能Elastic IPDHCPセキュリティグループVLANメタデータ
SYSTEM×―(*1×××
STATIC×××××
MANAGED
MANAGED-NOVLAN×
*1Eucalyptusの管理外のDHCPサーバは利用できます。

 第1回では、どれがどんな機能を提供するのかまでは説明しませんが、MANAGEDモードが全ての機能を使用できるモードであるため、本連載ではMANAGEDモードの構築について説明します。

 MANAGEDモードで必要となるハードウェアは、EucalyptusをインストールするPCもしくはサーバーが最低でも2台(フロントエンド1台とNC1台)とハブが1台必要となります。フロントエンドとは、CLC、CC、Walrus、SCの4コンポーネントを指します。

 注意点として、構成例のようにフロントエンドは操作用のクライアントPCから接続できるネットワークに属する必要があります。なお、NCが所属するネットワークにはDHCPサーバーが存在しないようにしてください。

環境の構成例(IP アドレスは筆者環境)

 フロントエンド(以下、CLC/CC)とNCのハードウェアスペックは、Eucalyptusの機能に触れてみるだけであればハイスペックである必要はありませんが、本格的にEucalyptusを利用する場合はそれなりのスペックが必要となります。参考例として筆者が職場と自宅で動作確認用として利用しているハードウェアのスペックを以下に示します。


職場の環境1職場の環境2自宅の環境

CLC/CCNCCLC/CCNCCLC/CCNC
CPUPentiumD 3.00GHzPentiumD 3.00GHzXeon E5506 2.13GHzOpteron 2376Athlon 1640BOpteron 1352
VTなしなしありありありあり
合計コア数228814
メモリ4GB4GB16GB16GB2GB8GB
HDD250GB250GB250GB250GB500GB160GB
NICGigabit (2枚)Gigabit (1枚)Gigabit (4枚)Gigabit (4枚)Gigabit (2枚)Gigabit (2枚)

 Ubuntu Enterprise Cloud(UEC)をインストールする場合はVT機能が必須ですが、本連載ではVT機能がないCPUでも使えるCentOS 5.4(Xen)で構築します。なお、CentOS 5.4は64 bit版をインストールします。

CentOS 5.4 のインストールと初期設定

 CentOS 5.4のインストール時に以下の画面のようにネットワークデバイスを設定する必要がありますが、IPv6のオプションは外します。

ネットワークデバイスの設定

 筆者は、インストールグループの選択では以下の画面のようにDesktop-Gnomeを外し、サーバーとして必須でないものはインストールしないようにしています(もちろん好みの問題ですが)。

【インストールグループの選択(1)】
NCにするサーバーではインストールグループにあるVirtualizationを選択します
【インストールグループの選択(2)】
インストールが終ったあとでサーバーにログインし、ファイアウォールとSELinuxを無効にします
ファイアウォールとSELinuxの設定

 NCとするサーバーでは、以下のようにXenの設定を変更し、xend を再起動します。

sed -i -e 's/#(xend-http-server no)/(xend-http-server yes)/' /etc/xen/xend-config.sxp
sed -i -e 's/#(xend-address localhost)/(xend-address localhost)/' /etc/xen/xend-config.sxp
/etc/init.d/xend restart

 Eucalyptusは、EBSのボリュームやインスタンスの起動においてループバックデバイスが必要なため、以下のようにループバックデバイスを増やす設定をします。

# CLC/CC と NC 両方にて実施
echo 'options loop max_loop=256' > /etc/modprobe.d/loop
for i in `seq 8 255`; do echo loop${i} >> /etc/udev/makedev.d/50-udev.nodes; done

 Eucalyptusを動かすために不要となるサービスを停止するように設定します。

# CLC/CC と NC 両方にて実施
chkconfig iptables off
chkconfig ip6tables off

# NC にて実施
chkconfig libvirtd off

 OSの設定をしたのちは、一度OSを再起動し、各種設定が反映されるようにします。

 なお、Eucalyptusを構成する各サーバーとクライアントPCは時刻が正しく同期できていることが必要であるため、別途ntpによって時刻同期の設定を行ってください。OSのインストールと設定が終ったら、次にEucalyptusのインストールを行います。

Eucalyptus のインストールと設定

 まずは、CLC/CCのインストールを行ないます。CLC/CCとするサーバに以下のように必要なパッケージをインストールします。

# インターネットに接続できる環境の場合
yum -y install java-1.6.0-openjdk ant ant-nodeps dhcp bridge-utils httpd

# インターネットに接続できない環境の場合
mkdir /media/CentOS
mount /dev/cdrom /media/CentOS/
yum --disablerepo=\* --enablerepo=c5-media -y install java-1.6.0-openjdk ant ant-nodeps dhcp bridge-utils httpd

 Eucalyptusのサイト<http://open.eucalyptus.com/downloads>にアクセスし、ページ下部にある「Eucalyptus 1.6.2 - RHEL / CentOS 5.4 - x86_64」から、eucalyptus-1.6.2-centos-x86_64.tar.gzをダウンロードします。

Eucalyptus社からダウンロード

 ダウンロードしたファイルをCLC/CCとするサーバーに置き、以下のように展開し、展開したディレクトリに移動します。

tar -xzf eucalyptus-1.6.2-centos-x86_64.tar.gz
cd eucalyptus-1.6.2-centos-x86_64/eucalyptus-1.6.2-rpm-deps-x86_64/

 依存パッケージを、rpmコマンドでインストールします。

rpm -Uvh aoetools-21-1.el4.x86_64.rpm \
euca-axis2c-1.6.0-1.x86_64.rpm \
euca-rampartc-1.3.0-1.x86_64.rpm \
groovy-1.6.5-1.noarch.rpm \
lzo2-2.02-3.el5.rf.x86_64.rpm \
vblade-14-1mdv2008.1.x86_64.rpm \
vtun-3.0.2-1.el5.rf.x86_64.rpm

 Eucalyptusのコンポーネントをrpmコマンドでインストールします。

cd ..
rpm -Uvh eucalyptus-1.6.2-1.x86_64.rpm \
eucalyptus-cloud-1.6.2-1.x86_64.rpm \
eucalyptus-cc-1.6.2-1.x86_64.rpm \
eucalyptus-common-java-1.6.2-1.x86_64.rpm \
eucalyptus-gl-1.6.2-1.x86_64.rpm \
eucalyptus-sc-1.6.2-1.x86_64.rpm \
eucalyptus-walrus-1.6.2-1.x86_64.rpm

 次に、NCのインストールを行ないます。NCとするサーバーに、以下のように必要なパッケージをインストールします。

# インターネットに接続できる環境の場合
yum -y install httpd

# インターネットに接続できない環境の場合
mkdir /media/CentOS
mount /dev/cdrom /media/CentOS/
yum --disablerepo=\* --enablerepo=c5-media -y install httpd

 eucalyptus-1.6.2-centos-x86_64.tar.gzをNCとするサーバーに置き、以下のように展開し、展開したディレクトリに移動します。

tar -xzf eucalyptus-1.6.2-centos-x86_64.tar.gz
cd eucalyptus-1.6.2-centos-x86_64/eucalyptus-1.6.2-rpm-deps-x86_64/

 依存パッケージを、rpmコマンドでインストールします。

rpm -Uvh aoetools-21-1.el4.x86_64.rpm \
euca-axis2c-1.6.0-1.x86_64.rpm \
euca-rampartc-1.3.0-1.x86_64.rpm

 Eucalyptusのコンポーネントを、rpmコマンドでインストールします。

cd ..
rpm -Uvh eucalyptus-1.6.2-1.x86_64.rpm \
eucalyptus-nc-1.6.2-1.x86_64.rpm \
eucalyptus-gl-1.6.2-1.x86_64.rpm

 NCにて以下のコマンドを実行し、eucalyptusユーザーでHypervisorの情報が取得できるかを確認します(このとき、情報が取得できない場合は、/etc/xen/xend-config.sxp の設定を見直してください)。

su eucalyptus -c "virsh list"
Id Name State
----------------------------------
0 Domain-0 running

 インストール直後のEucalyptusは、VNET_MODEがSYSTEMに設定されています。MANAGEDモードに変更するため、以下のようにeucalyptus.confを変更します(各値は筆者環境での値ですので、不都合がある場合は自分の環境用に読み替えてください)。

# CLC/CC にて
sed -i -e 's/^\(VNET_PUBINTERFACE\)=.*/\1="eth0"/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^\(VNET_PRIVINTERFACE\)=.*/\1="eth1"/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_MODE="MANAGED"\)/\1/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_SUBNET\)="192.168.0.0"/\1="10.1.0.0"/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_NETMASK="255.255.0.0"\)/\1/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_DNS\)=.*/\1=""/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_ADDRSPERNET\)="32"/\1="64"/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_PUBLICIPS\)=.*/\1="192.168.32.200-192.168.32.210"/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^\(VNET_MODE="SYSTEM"\)/#\1/' /etc/eucalyptus/eucalyptus.conf

# NC にて
sed -i -e 's/^\(VNET_PUBINTERFACE\)=.*/\1="eth0"/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^\(VNET_PRIVINTERFACE=.*\)/#\1/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^#\(VNET_MODE="MANAGED"\)/\1/' /etc/eucalyptus/eucalyptus.conf
sed -i -e 's/^\(VNET_MODE="SYSTEM"\)/#\1/' /etc/eucalyptus/eucalyptus.conf
# CLC/CC にて
/etc/init.d/eucalyptus-cloud start
/etc/init.d/eucalyptus-cc start

# NC にて
/etc/init.d/eucalyptus-nc start

 CLC/CCにて各コンポーネントの情報を登録します (IPアドレスは筆者環境の値ですので、適宜自分の環境に読み替えてください)。

# Walrus の登録 (IP アドレスは CLC/CC の eth0 を指定)
euca_conf --register-walrus 192.168.32.20

# CC の登録 ("cluster0" は任意の名称、IP アドレスは CLC/CC の eth1 を指定)
euca_conf --register-cluster cluster0 192.168.100.1

# SC の登録 ("cluster0" は CC の登録で指定した名称、IP アドレスは CLC/CC の eth1 を指定)
euca_conf --register-sc cluster0 192.168.100.1

# NC の登録 (IP アドレスは NC の eth0 を指定)
euca_conf --register-nodes "192.168.100.10"

 CUIでの設定は以上です。次に Web管理画面(以下、WUI)での設定を説明します。

 Webブラウザーで、< https://192.168.32.20:8443/ >にアクセスすると、以下のようにログイン画面が表示されます。最初から作成されている管理者のUserとPasswordはadminですので、入力してログインします。

WUI ログイン画面

 ログインすると、以下のように管理者adminのパスワードを入力する画面が表示されますので、任意のパスワードを入力します(管理者のメールアドレスも任意です)。

管理者のパスワード変更画面

 Configuration タブをクリックすると、eucalyptus.confファイルやeuca_confコマンドだけでは設定できない項目が表示されます。それぞれの設定項目はいずれ説明します。

 なお、今回の筆者の環境では、CLC/CCで動いているSCがEBSの機能をNC に提供する際に使用するネットワークアダプタがeth1であるため、「Clusters:」セクションにある「Interface:」の値をデフォルトのeth0からeth1に変更する必要がありました。

SC のネットワークデバイスの指定

 設定を変更したのち、「Clusters:」セクションの下部にある「Save cluster configuration」ボタンをクリックして、設定を保存してください。

 以上で、Eucalyptusの初期設定は完了です。

 次回は、Eucalyptusを利用するために必要なeuca2oolsのインストールと簡単な使い方を紹介致します。

執筆者について

 最後に、この連載を執筆する3名について簡単に紹介させていただきます。


羽深 修
Eucalyptus歴はまだ1年ですが、周囲からはEucalyptus中毒と勘違いされているようです。Japan Eucalyptus User Groupの活動に参加し、オープンソースカンファレンスでネタなどを披露しています。度々Eucalyptusへのパッチも書いてます。ちなみに仕事ではCentOS + Xenという環境でEucalyptusを利用していますが、自宅のEucalyptus環境はGentoo Linux + KVMで動かしています。

志田 隆弘
主にEucalyptusやクラウドとはあまり関係のない分野でちょこちょこと活動していました。Eucalyptusはバージョン 1.3の頃からいじり始め、かれこれ2年近くEucalyptusに浸かった生活をしています。Eucalyptus 1.4が出たタイミングで、Tanacasinoという名前のGUIクライアントを作ったりしていました。最新のEucalyptusで動作するので、ぜひ使ってみてください。

田中 智文
志田さんとともに初期の頃からEucalyptusの調査・検証・使用してきました。志田さんの作成したTanacasinoのメンテナンスと機能拡張を行っています。新婚ほやほやなので家でのハック活動時間が少ないですが、Walrus Clientを作ってみたりbotoを使ってEucalyptusを操作して遊んでいます。
関連情報
(羽深 修/志田 隆弘/田中 智文)
2010/9/24 06:00