OpenStack with OpenDaylight(DevStack編)
今回は、DevStack(http://docs.openstack.org/developer/devstack/)というツールを使ってOpenDaylight(以降、ODLと省略)とOpenStackを連携させた環境の構築にチャレンジしてみたいと思います。
それではさっそく構築方法について説明していきたいのですが、いきなり「ODLとOpenStackをそれぞれマニュアルに沿って構築して連携させてみましょう!」、というのは少し難易度が高いです。というのも、ODLは比較的新しめのOSSであるために情報が雑多で探しづらく、日本語の情報も少ないというのが現状だからです。
そこで今回は、もっとも簡単とされるDevStackを使った構築方法をご紹介していきます。DevStackはOpenStack開発者達の間では、公式のテスト環境構築ツールとして親しまれています。数十行の設定ファイルを書いてスクリプトを実行すれば簡単にOpenStack環境ができてしまいます。さらに、そのDevStackの設定ファイルにODL用のコンフィグレーションを書き足せば、ODLとOpenStackの連携も簡単にできてしまうのです。
環境・バージョンについて
今回の構築はマルチノード構成なので2台のVMを使用します。筆者の環境ではvSphere ESXi上に2台のUbuntuのVMを用意しています。この2台のVMは、DevStackの性質上、ルート権限(sudo)での実行が可能である必要があります。さらに、ソースコードのダウンロードを行うためインターネットアクセスができる環境も必要です。
OSディストリビューション | カーネルバージョン |
---|---|
Ubuntu 14.04.3 LTS | Linux version 3.13.0-74-generic |
OpenStack環境の各コンポーネントは2015年10月にリリースされたLibertyを使用します。
コンポーネント | バージョン |
---|---|
Nova Glance Neutron Horizon networking-odl |
Liberty |
今回の構築では、ODLはDevStackが自動構築することになりますが、特に指定が無ければLithiumリリースが選択されます。
OpenDaylightリリース | ビルドバージョン |
---|---|
Lithium | lithium-snapshot-0.3.5 |
構築してみよう
全ノード共通の設定
それでは早速構築を始めていきましょう。まず、全ノードで共通の設定を先にやっておきます。先にファイアーウォールは無効化しておきます。
~$ sudo ufw disable
次にDevStackをダウンロードしてきます。その際、gitコマンドが必要なので入っていなければ適宜インストールしてください。ブランチ名はstable/libertyを指定します。※2016年11月17日を過ぎるとliberty-eol(End-of-Life)タグを指定しなければならなくなるかもしれません。
~$ sudo apt-get install git ~$ git clone --branch stable/liberty https://github.com/openstack-dev/devstack.git ~$ cd devstack/
コントローラノードの構築
続いて、コントローラノードの構築に入ります。コントローラノードのlocal.confのサンプルは、下記URLよりダウンロードできます。local.confはdevstack/配下に置きます。
ダウンロードしたlocal.confをテキストエディタで開くと以下の様になっています。まず、お使いの環境に合わせてHOST_IPをコントローラノードのIPアドレスに変更してください。
: # IP Details HOST_IP=192.168.0.10 SERVICE_HOST=$HOST_IP : # Neutron : enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl ${BRANCH_NAME} # OpenDaylight Details ODL_MODE=allinone ODL_PORT=8181
ODLに関する最低限必要な設定は、networking-odlの有効化(enable_plugin)、動作モード(ODL_MODE)の設定、ポート番号(ODL_PORT)の設定の3つです。
- networking-odlとはODLのためのNeutron ML2メカニズムドライバの外部ライブラリの事です。
- 動作モードはDevStackがODLを構成するために必要となります。
- ポート番号はODLのポート番号ですが、ODLのデフォルトである8181番ポートを指定します。
動作モードはODLに関するenable_serviceの設定を簡単にしてくれます。動作モードとしてODL_MODEに指定できるものを以下の表に示します。
動作モード | 説明 |
---|---|
allinone | このDevStackインスタンスでODLを実行したい場合に指定する。シングルまたはマルチノードの場合に有用 |
externalodl | DevStackでODLを管理しない。開発環境用に使用される |
compute | DevStackインスタンスがComputeノードの場合に指定する |
manual | 有効にするサービスを明示的に指定する |
今回、ODLはOpenStackコントローラノードと同じホストで実行させたいのでallinoneを指定します。
もしmanualを指定する場合、それぞれの動作モードと同じ動作をさせるためには以下の様に設定します。
- allinoneと同じ動作
[[local|localrc]] enable_sevice odl-server enable_sevice odl-compute
- externalodlと同じ動作
[[local|localrc]] enable_sevice odl-neutron enable_sevice odl-compute
- computeと同じ動作
[[local|localrc]] enable_sevice odl-compute
これらの設定ができれば、あとはstack.shスクリプトを実行するだけです。スクリプトが終了するまでに十数分程度かかる場合がありますので気長に待ちましょう。以下の様なメッセージが出力されれば終了です。
~/devstack$ ./stack.sh : This is your host IP address: 192.168.0.10 This is your host IPv6 address: ::1 Horizon is now available at http://192.168.0.10/dashboard Keystone is serving at http://192.168.0.10:5000/ The default users are: admin and demo The password: password ~/devstack$
以上でコントローラノードの構築は完了です。
コンピュートノードの構築
続いて、コンピュートノードの構築です。コントローラノードと同様に、下記URLよりlocal.confのサンプルをダウンロードします。
ダウンロードしたlocal.confを開いて、HOST_IPをコンピュートノードのIPアドレスへ、SERVICE_HOSTをコントローラノードのIPアドレスへ変更してください。動作モードの設定であるODL_MODEはcomputeを指定します。
~/devstack$ vim local.conf : # IP Details HOST_IP=192.168.0.11 SERVICE_HOST=192.168.0.10 RABBIT_HOST=$SERVICE_HOST : # Neutron : enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/liberty # OpenDaylight ODL_MODE=compute ODL_PORT=8181
あとはコントローラノードと同様に、stack.shスクリプトを実行するだけです。以下の様なメッセージが出力されれば終了です。
~/devstack$ ./stack.sh : This is your host IP address: 192.168.0.11 This is your host IPv6 address: ::1 2016-01-13 07:21:51.305 | stack.sh completed in 56 seconds. ~/devstack$
以上で構築作業は終了です。たったこれだけで、ODLとOpenStackが連携した環境の構築ができてしまいました。
インスタンスを作ってみよう
構築ができていろいろ動かしてみたくなったと思います。さっそくネットワークやインスタンスを作ってみましょう。コントローラノードのコマンドラインからオペレーションしていきます。
~/devstack$ source openrc demo demo # 認証用の環境変数を設定(demoユーザー、demoテナント) ~/devstack$ neutron net-create net01 # ネットワークを作成 ~/devstack$ neutron subnet-create --name net01-subnet net01 10.11.12.0/24 # サブネットを作成 ~/devstack$ nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny vm01 # インスタンス(vm01)を作成 ~/devstack$ nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny vm02 # インスタンス(vm02)を作成
作成したネットワークとインスタンスをOpenStackの管理画面であるHorizonのGUIで確認してみましょう。ブラウザから以下のURLにアクセスするとログイン画面が表示されます。※IPアドレスはコントローラノードのIPアドレスです。
ユーザー名に「demo」、パスワードに「password」を入力して接続します。
ネットワークタブのネットワークトポロジを選択すると、先ほど作成したネットワークとインスタンスが確認できます。
続いてODLのGUIも見てみましょう。ブラウザから以下のURLにアクセスするとOpenDaylight User Experience(DLUX)のログイン画面が表示されます。※IPアドレスはコントローラノードのIPアドレスです。
http://192.168.0.10:8181/index.html
ユーザー名に「admin」、パスワードに「admin」を入力してログインします。
2台のスイッチが接続されているネットワークトポロジが確認できます。それぞれコントローラノードとコンピュートノードのブリッジを示しています。