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くらいしかありません。なので、ちょっと頑張ってインストールしてみます。
利用したマシンのスペックとしては以下の通りです。

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のインストールはそのときに・・・。