OpenStack with OpenDaylight(DevStack編)

2016年3月24日(木)
安座間 勇二(あざま ゆうじ)

今回は、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/配下に置きます。

https://github.com/YujiAzama/opendaylight-openstack-integration/blob/master/allinone/multi-node/control/local.conf

ダウンロードした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のサンプルをダウンロードします。

https://github.com/YujiAzama/opendaylight-openstack-integration/blob/master/allinone/multi-node/compute/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アドレスです。

http://192.168.0.10/dashboard

ユーザー名に「demo」、パスワードに「password」を入力して接続します。

Login

ネットワークタブのネットワークトポロジを選択すると、先ほど作成したネットワークとインスタンスが確認できます。

Topology

続いてODLのGUIも見てみましょう。ブラウザから以下のURLにアクセスするとOpenDaylight User Experience(DLUX)のログイン画面が表示されます。※IPアドレスはコントローラノードのIPアドレスです。

http://192.168.0.10:8181/index.html

ユーザー名に「admin」、パスワードに「admin」を入力してログインします。

Login

2台のスイッチが接続されているネットワークトポロジが確認できます。それぞれコントローラノードとコンピュートノードのブリッジを示しています。

Topology

著者
安座間 勇二(あざま ゆうじ)
NECソリューションイノベータ株式会社
1991年、沖縄県生まれ。2014年の入社以来、ソフトウェアエンジニアとしてOpenStackでのSFC(Service Function Chaining)やOpenDaylightを使ったSDN/NFVを中心とした開発や検証などに携わる。OpenStack Neutronを中心にコントリビューションしており、OpenStack Summit Tokyo 2015においてSFCのR&Dについて発表。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています