2009/12/07

@IT::Ubuntuで始めるクラウドコンピューティング

@ITの記事の中でUbuntuで始めるクラウドコンピューティングが公開されています。

これに従えばUbuntu Enterprise Cloud (UEC)環境は作れるのですが、ちょっと使いづらいかなと思いました。 単純にインスタンスを動かしたいだけであれば、”euca-bundle-image”、"euca-upload-bundle"などは使わずにWebインタフェースの"Store"メニューを使うのが簡単そうです。 参照::STEP 6: Install an image from the store

手順自体はEucalyptusにあるドキュメントと同じ構成ですが、シェル変数が多用されているために、何をやっているか読み解くのに時間がかかりそうです。 ただクラウド環境は自動化が肝ではあるので、いろいろな作業を自動化するためにこういう方法は必要で、最終的には慣れる必要があると思います。

事前準備

以下ではUECの"Extras"から”euca-debian-5.0-x86_64.tar.gz”をダウンロードした前提で、どのようにイメージを作成して行くのか試してみようと思います。 tar.gzファイルは展開しておきます。

$ tar xvzf euca-debian-5.0-x86_64.tar.gz
euca-debian-5.0-x86_64/
euca-debian-5.0-x86_64/xen-kernel/
euca-debian-5.0-x86_64/xen-kernel/vmlinuz-2.6.27.21-0.1-xen
euca-debian-5.0-x86_64/xen-kernel/initrd-2.6.27.21-0.1-xen
euca-debian-5.0-x86_64/kvm-kernel/
euca-debian-5.0-x86_64/kvm-kernel/vmlinuz-2.6.28-11-generic
euca-debian-5.0-x86_64/kvm-kernel/initrd.img-2.6.28-11-generic
euca-debian-5.0-x86_64/debian.5-0.x86-64.img

シェルにeucarcファイルを読み込んでおく事と、事前にいくつか準備しておくシェル変数は次のようになっています。設定して別の端末ウィンドウに移ってしまってはシェル変数は引き継がれないので、以下の操作は全部同じ端末ウィンドウの中で実施します。

$ . ~/.euca/eucarc
$ TS=$(date +%Y%m%d%H%M%S)
$ echo $TS
20091207164000

変数を展開した形の解説 〜 EKI変数の設定まで

*http://www.atmarkit.co.jp/flinux/special/eucaly/eucalyc.html より抜粋
# euca-bundle-image -i $UEC_KERNEL -r $IARCH --kernel true
# euca-upload-bundle -b $BUCKET_KERNEL -m /tmp/$UEC_KERNEL.manifest.xml
# EKI=$(euca-register $BUCKET_KERNEL/$UEC_KERNEL.manifest.xml | grep "^IMAGE" | awk '{print $2}') && echo $EKI

"euca-debian-5.0-x86_64.tar.gz"を展開したところから、上記と同じようにコマンドを打つと次のようになります。

$ euca-bundle-image -i euca-debian-5.0-x86_64/kvm-kernel/vmlinuz-2.6.28-11-generic -r x86_64 --kernel true
x86_64
Checking image
Tarring image
Encrypting image
Splitting image...
Part: vmlinuz-2.6.28-11-generic.part.0
Generating manifest
$ euca-upload-bundle -b "k-$TS" -m /tmp/vmlinuz-2.6.28-11-generic.manifest.xml
Checking bucket: k-20091207164000
Creating bucket: k-20091207164000
Uploading manifest file
Uploading part: vmlinuz-2.6.28-11-generic.part.0
Uploaded image as k-20091207164000/vmlinuz-2.6.28-11-generic.manifest.xml
$ euca-register k-$TS/vmlinuz-2.6.28-11-generic.manifest.xml
IMAGE eki-864C132D
$ EKI=eki-864C132D

最後のところは、中身を見せるために少し変更して自分でEKI=eki-864C132Dと代入しています。 "eki-864C132D"の部分は、実行する人によって変化してきます。

変数を展開した形の解説 〜 ERI変数の設定まで

*http://www.atmarkit.co.jp/flinux/special/eucaly/eucalyc.html より抜粋
# euca-bundle-image -i $UEC_INITRD -r $IARCH --ramdisk true
# euca-upload-bundle -b $BUCKET_INITRD -m /tmp/$UEC_INITRD.manifest.xml
# ERI=$(euca-register $BUCKET_INITRD/$UEC_INITRD.manifest.xml | grep "^IMAGE" | awk '{print $2}') && echo $ERI

今回も最後のERI変数への代入のところは分けて実行しています。

$ euca-bundle-image -i euca-debian-5.0-x86_64/kvm-kernel/initrd.img-2.6.28-11-generic -r x86_64 --ramdisk true
x86_64
Checking image
Tarring image
Encrypting image
Splitting image...
Part: initrd.img-2.6.28-11-generic.part.0
Generating manifest
$ euca-upload-bundle -b "r-$TS" -m /tmp/initrd.img-2.6.28-11-generic.manifest.xml
Checking bucket: r-20091207164000
Creating bucket: r-20091207164000
Uploading manifest file
Uploading part: initrd.img-2.6.28-11-generic.part.0
Uploaded image as r-20091207164000/initrd.img-2.6.28-11-generic.manifest.xml
$ euca-register r-$TS/initrd.img-2.6.28-11-generic.manifest.xml
IMAGE eri-C36C141F
$ ERI=eri-C36C141F

変数を展開した形の解説 〜 EMI変数の設定

*http://www.atmarkit.co.jp/flinux/special/eucaly/eucalyc.html より抜粋
# euca-bundle-image -i $UEC_IMG.img -r $IARCH --kernel $EKI --ramdisk $ERI
# euca-upload-bundle -b $BUCKET_IMAGE -m /tmp/$UEC_IMG.img.manifest.xml
# EMI=$(euca-register $BUCKET_IMAGE/$UEC_IMG.img.manifest.xml | grep "^IMAGE" | awk '{print $2}') && echo $EMI

ここまでで"eucarc"ファイルの中で設定されているもの以外に、次のようなシェル変数を設定しています。

TS
20091207164000
EKI
eki-864C132D
ERI
eri-C36C141F
$ euca-bundle-image -i euca-debian-5.0-x86_64/debian.5-0.x86-64.img -r x86_64 --kernel $EKI --ramdisk $ERI
x86_64
Checking image
Tarring image
Encrypting image
Splitting image...
Part: debian.5-0.x86-64.img.part.0
Part: debian.5-0.x86-64.img.part.1
Part: debian.5-0.x86-64.img.part.2
Part: debian.5-0.x86-64.img.part.3
Part: debian.5-0.x86-64.img.part.4
Part: debian.5-0.x86-64.img.part.5
Part: debian.5-0.x86-64.img.part.6
Part: debian.5-0.x86-64.img.part.7
Part: debian.5-0.x86-64.img.part.8
Part: debian.5-0.x86-64.img.part.9
Part: debian.5-0.x86-64.img.part.10
Part: debian.5-0.x86-64.img.part.11
Part: debian.5-0.x86-64.img.part.12
Part: debian.5-0.x86-64.img.part.13
Part: debian.5-0.x86-64.img.part.14
Part: debian.5-0.x86-64.img.part.15
Part: debian.5-0.x86-64.img.part.16
Part: debian.5-0.x86-64.img.part.17
Part: debian.5-0.x86-64.img.part.18
Part: debian.5-0.x86-64.img.part.19
Generating manifest
$ euca-upload-bundle -b "i-$TS" -m /tmp/debian.5-0.x86-64.img.manifest.xml
Checking bucket: i-20091207164000
Creating bucket: i-20091207164000
Uploading manifest file
Uploading part: debian.5-0.x86-64.img.part.0
Uploading part: debian.5-0.x86-64.img.part.1
Uploading part: debian.5-0.x86-64.img.part.2
Uploading part: debian.5-0.x86-64.img.part.3
Uploading part: debian.5-0.x86-64.img.part.4
Uploading part: debian.5-0.x86-64.img.part.5
Uploading part: debian.5-0.x86-64.img.part.6
Uploading part: debian.5-0.x86-64.img.part.7
Uploading part: debian.5-0.x86-64.img.part.8
Uploading part: debian.5-0.x86-64.img.part.9
Uploading part: debian.5-0.x86-64.img.part.10
Uploading part: debian.5-0.x86-64.img.part.11
Uploading part: debian.5-0.x86-64.img.part.12
Uploading part: debian.5-0.x86-64.img.part.13
Uploading part: debian.5-0.x86-64.img.part.14
Uploading part: debian.5-0.x86-64.img.part.15
Uploading part: debian.5-0.x86-64.img.part.16
Uploading part: debian.5-0.x86-64.img.part.17
Uploading part: debian.5-0.x86-64.img.part.18
Uploading part: debian.5-0.x86-64.img.part.19
Uploaded image as i-20091207164000/debian.5-0.x86-64.img.manifest.xml
$ euca-register i-$TS/debian.5-0.x86-64.img.manifest.xml
IMAGE emi-25881166
$ EMI=emi-25881166

登録したイメージのテスト

いままでに他のイメージを起動するなどしていなければ、keypairの作成とルーティングを作成しておきます。 既に実行されているかは”euca-describe-keypairs”を実行して"mykey"が登録されているかどうか、"euca-describe-groups"を実行して"... ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0"が設定されているかで確認できます。

$ euca-add-keypair mykey > mykey.priv
$ euca-authorize default -P tcp -p 22 -s 0.0.0.0/0

さて、いよいよ起動です。

$ euca-run-instances -k mykey $EMI
RESERVATION r-56B308F1 admin default
INSTANCE i-5EB10A92 emi-25881166 192.168.1.163 172.19.1.4 pending  mykey  0  m1.small  2009-12-07T07:52:16.199Z  yasundial  eki-864C132D  eri-C36C141F

設定されている値やインスタンスの状況を調べたい時には"euca-describe-"で始まるコマンドが使えるようです。 Amazon EC2から引き継いでいるんでしょうけれど、良いネーミングルールですね。

先ほどの"euca-run-instances"の出力では、最初はpendingとなっているままなので、起動していません。 "euca-describe-instances"を定期的に実行して、"running"になる事を確認します。 ubuntu.comのUEC Install手順の中ではUNIX系OSに標準的に存在している"watch"コマンドを使う例が載っています。

$ watch -n5 euca-describe-instances

最終的に失敗してしまう…

running状態にはなるものの、busy-boxに落ちてしまっているので、無事に起動というわけにはいきませんでした。 この原因はまた追い掛けていこうと思います。

その他の注意点

今回導入したイメージの中にはXen用のものも含まれていますが、こちらを使用すると"pending"のステータスから"terminated"となり起動しません。

また"euca-upload-bundle"の"-b"オプションの引数で状況に応じて、"BUCKET_KERNEL","BUCKET_INITRD","BUCKET_IMAGE"の3つの変数を使い分けていますが、 これはprefixと考えて、1つの文字列を使い回すのが良いようです。

ざっとこんな感じで、イメージを起動する事はできましたが、これだけだとあまり活用する目処は立たないですね。 もう少し周辺の情報を集めてみようと思います。

0 件のコメント: