BoshでローカルのVMにデプロイしたい
最近業務と非業務の境くらいの仕事で、オープンソースのPaaS、特にCloudFoundryについて調べています。CloudFoundryの情報をググってみると、最近の情報というよりかは大体1/2年くらい前の情報が多くひっかかってきます。
最近ロードマップが公開されており、4月に大分大きなアップデートがあるようです。
http://cloudfoundry.github.com/docs/roadmap.html
このアップデートにかけて、どうもBoshというのを利用してデプロイの制御とかを行うことがデフォルトのような感じになりそうです。
Boshについてはこちらが詳しいですが、コンポーネントなどをデプロイするVMを制御するための分散システム、ということらしいです。
Boshについての良質な日本語資料としては、http://sssslide.com/www.slideshare.net/i_yudai/bosh-13404516=こちらのスライドがとてもわかりやすいです。
さて、このBoshですが、使うためにはBoshの分散システムが必要で、その分散システムをデプロイするためにBoshが必要で・・・という形の無限ループになってしまっています。このため、Micro Boshというのを最初にデプロイすることで、これを利用してBoshのデプロイ制御などを行わせることができるようです。
Boshは、以下のIaaSに対応しているようです。
- vSphere
- CloudStack
- AWS
・・・さて、ここで問題ですが、私の保有するマシンでは、OpenStackが動作させられるような環境はありません。vSphereとAWSについては、金銭的な問題で導入できません。でもBoshでデプロイ試してみたいです←イマココ
というわけで、ローカルのVMを2つ動かすくらいならなんとかなるので、なんとかしてローカルのVMにデプロイする方法を探してみました。
BoshをインストールするためのOpenStackを用意する
まずはこれが無いと、肝心のMicro Boshをインストールすることができません。しかし利用できそうなものは、OpenStackくらいしかありません。なので、ちょっと頑張ってインストールしてみます。
利用したマシンのスペックとしては以下の通りです。
- Linux 3.7.4
- Core i7(sandy Bridge)
- 16GB Memory
- 2TB HDD + 80GB SSD
OpenStackのインストールは、以下のドキュメントを参考にします。
http://cloudfoundry.github.com/docs/running/deploying-cf/openstack/install_openstack.html
まずはVMを二つ用意します。一つは、novaというディスク管理仕組みを使う都合上、ディスクを二つ割り当てておきます。両方とも50Gくらいはもっておいた方がよさそうです。かなりの勢いで減っていきますので。
VirtualBox上のゲストOSだとKVMが使えないので、普通に考えたらあまりやる意味が無いような気もしますが、あまり気にしないことにしておきます。
また、VMのネットワーク構成を、以下のようになるようにしておきます。
- 1台目
- eth0: 10.0.2.15 : NAT
- eth1: 192.168.56.10 : ホストオンリーネットワーク
- eth2: 11.0.0.1 : private VLAN (eth1とは別のホストオンリーネットワークにしておくこと)
- 2台目
- eth0: 10.0.2.15 : NAT
- eth1: 192.168.56.11 : ホストオンリーネットワーク
1台目の/etc/network/interfacesは以下のようになります。
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.56.10 netmask 255.255.255.0 broadcast 192.168.56.255 # Private VLAN auto eth2 iface eth2 inet manual up ifconfig eth2 up
ディスクを二つ割り当てた方のVMに、上記のドキュメントに従ってOpenStackをインストールします。もう一つのVMは、Compute Nodeとしてインストールしておきます。アドレスとかは、各々の環境に応じて変えてみてください。
インストールまでは多分順調にいくと思います。多分。
OpenStackをVM上にインストールするとき、確実に鬼門となるのがNovaのインストールだと思います。私はネットワークに対して知識が朧げな状態でやっていましたので、ここでめっちゃつまりました。Essexではなく、Folsomになったらもっとやりやすいのかもしれませんが、どっちにしろネットワーク絡みの設定で確実に悩むことになると思いますので、自分の理解のためにも、試行錯誤の道を書いておきます。
また、novaのインストール前の段階で、スナップショットを取っておくことをお勧めします。
***Novaのインストール
Novaのインストール前の手順まで進んでいることを前提とします。
$ sudo ./openstack_nova.sh ####################################################################################### The IP address for eth0 is probably . Keep in mind you need an eth1 for this to work. ####################################################################################### Enter the primary ethernet interface IP: 192.168.56.10 Enter the fixed network (eg. 10.0.2.32/27): 11.1.0.32/27 # eth2に割り当てる予定のVLANのアドレス Enter the fixed starting IP (eg. 10.0.2.33): 11.1.0.33 # eth2に割り当てる予定のVLANのアドレス ####################################################################################### The floating range can be a subset of your current network. Configure your DHCP server to block out the range before you choose it here. An example would be 10.0.1.224-255 ####################################################################################### Enter the floating network (eg. 10.0.1.224/27): 192.168.56.224/27 #eth1 Enter the floating network size (eg. 32): 32
eth0ではなく、eth1のIPをベースに設定します。この後、/etc/nova/nova.confとnova-compute.confについて、以下のように修正します。
/etc/nova/nova.conf --libvert_use_virtio_for_bridges=false --libvirt_type=qemu --public_interface=eth1 --flat-interface=eth2 # --flat_network_bridge=br100 --vlan_start=100 --vlan_interface=eth2 --vncserver_proxyclient_address=192.168.56.10 --vncserver_listen=192.168.56.10 --ec2_dmz_host=192.168.56.10 --routing_source_ip=192.168.56.10 --my_ip=192.168.56.10 /etc/nova/nova-compute.conf --libvirt_type=qemu
kvmが使えないので、qemuにしてソフトウェアエミュレーションを使います。
なお、現時点(2013/4/6)時点では、openstack_glance.shに不具合があるようで、imagesディレクトリを事前にカレントディレクトリに作成しておかないと、Ubuntuのイメージがglanceに登録されず、???なことになります。
ここまでで、Webインターフェースまで使えるようになり、実際にイメージをインスタンスとして起動させることができるようになるはずです。試しにWebインターフェースからインスタンスを起動してみて、Acticeになるかどうかを試してみてください。
ですが、致命的な点がありまして、今のままの設定では、Controller Nodeからさえも、インスタンスに対してpingを通すことさえできません。今の時点でかなりネットワークがややこしいことになっていますので、自分の理解も含めてまとめてみます。
ifconfigすると、以下のネットワークインターフェースがあります。
- br100
- Novaが作成したブリッジネットワークのためのインターフェース
- eth0
- ホストとのNAT
- eth1
- ホストオンリーネットワーク。ホストとの通信に使う
- lo
- ループバック。特に気にしない
- virbr0
- libvirtで利用する仮想ネットワーク。
また、routeしてみると以下のようになっているはずです。
default 10.0.2.2 0.0.0.0 UG 100 0 0 eth0 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 11.1.0.32 * 255.255.255.224 U 0 0 0 br100 192.168.56.0 * 255.255.255.0 U 0 0 0 eth1 192.168.56.32 * 255.255.255.224 U 0 0 0 br100 192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0
このrouteの通り、NATが全体のGatewayとなって、ここからだけ外部への通信が可能になっています。
さて、ここまでの設定で、11.1.0.33以降について、プライベートネットワークになっています。11.1.0.33が、プライベートネットワークにおけるゲートウェイとしてはたらけば、11.1.0.32のネットワークにアクセスできるようになる、ようです。
この辺、実は色々試しているうちにいったので、詳しい仕組みとかはよくわかっておらんです・・・。
いずれにせよ、これでインスタンスを起動してしばらくすると、pingが通るようになります。
・・・が、そもそもこの時点でどうやってもsshが通ってくれず、途方に暮れてしまいました。別の環境でやってみたらいったので、何かが違うのかとも思いましたが・・・。
ただ、別の環境でやったとき、VirtualBoxではkvmが使えない、というのが強烈に効いてきます。コンパイルとかがひたすらに遅いので、boshのインストールまで至りませんでした。
そこで、次はkvmが使えると評判のvmware playerをgentoo上で利用して、環境を作成してみた話にしようかと思います。Boshのインストールはそのときに・・・。