OpenStack+Lagopus
できるかな?
Oct 4, 2015
Masaru OKI @masaru0714
OpenStackとLagopus
● OpenStack
○ クラウド基盤を構築するソフトウェア
○ Webからポチポチやると仮想マシンや仮想ネットワークを作成できる
● Lagopus
○ OpenFlowソフトウェアスイッチ
○ VM上でも動くしホストで動いてVM間の接続も(おそらく)可能
OpenStackと仮想スイッチ
VM-VM間、あるいはVM-ホスト間の通信に使われる。
VM VM VM
ホストマシン
仮想スイッチTthe Internet (など)
OpenStack+Lagopus?
OpenStackではVM間接続のスイッチに
OVS(Open vSwitch)を使っているケースが多いらしい
● MidonetやCiscoなどいろいろなプラグインが用意されているらしい
OVS以外も使えるのであれば……
Lagopusを組み込んでみよう! (できるかな?)
今回の実験環境
● Xeon E3-1231v3 (3.4GHz, 4C8T)
● RAM 16GB
● SSD 120GB
● GbE NIC x6
● Ubuntu 14.04.3 LTS Server
● ふだんはLagopusの開発に使っています
OpenStackのインストール(1)
動かせなければ始まらない。まずはUbuntu公式の手順をなぞります。
http://www.ubuntu.com/download/cloud/install-ubuntu-openstack
詳細は省きますがすんなりいかない部分が山盛り
● 80/tcpが他で使われていてエラー(dronedが使っていたのでどいてもらった)
● 8080/tcpが他で使われていてエラー(Landscape UIを8081に変更した)
● MAAS, Landscape, Jujuの連携設定がちゃんとできない
結論: この手順でのインストールはあきらめました
OpenStackのインストール(2)
DevStackを使ってみる。
参考: http://www.ospn.jp/press/20120828no27-useit-oss.html
git clone https://github.com/openstack-dev/devstack.git
cd devstack
touch localrc
./stack.sh
12分くらい待って、あっさり完了。(80/tcpどけていたのが幸いしています)
最初からこちらにしておけばよかった!
OpenStackのダッシュボード画面
http://インストールしたマシンのIPアドレス/
OpenStackの構成
● Compute (Nova)
● Networking (Neutron)
○ OVSを含む各種ネットワーク関連プラグインを管理・制御しているのはここ
● Storage (Cinder)
● Image (Glance)
● Identify (Keystone)
● Dashboard (Horizon)
● etc.
OpenStackのインスタンス生成とvnet
「インスタンスの起動」で、VMが(生成されて)起動する。
このときホスト側にはvnetインタフェースが生える。
vnetインタフェースは、ホストのプライマリインタフェースとの間でブリッジされる。
$ brctl show
bridge name bridge id STP enabled interfaces
br100 8000.d050992dfc10 no p2p1
vnet0
vnet1
Neutronサービスの起動
● /etc/neutron/ がないなあ、おかしいなあと思っていたら、どうやら
vnetとホストインタフェースとのブリッジはNeutronがなくても動作するらしい。
○ nova-network (n-net) サービスによるものとのこと
● Neutronはデフォルトでは無効。
● 対処: localrcに下記を書いて./stack.sh
disable_service n-net
enable_service neutron
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
Neutronプラグインとドライバ
● Neuronはプラグインによりネットワーク機能をサポートする。
● ML2プラグインでL2の共通部をサポート、個別機能はMecanism Driverで提供。
Neutron
ML2 Plugin linuxbfidge Plugin
openvswitch Plugin
…. Plugin
linuxbfidge driver
OVS driver
OFAgent driver
deprecated
Neutronで使うドライバの切り替え
基本的にML2 (Modular Layer 2)プラグインが各種Mechanism Driverを呼ぶ。
localrcに下記を記述(ここではOVSを使わない設定の例)
Q_PLUGIN=ml2
Q_AGENT=linuxbridge
Q_ML2_PLUGIN_MECHANISM_DRIVERS=linuxbridge
● リスト無指定ではOVS, LinuxBridge, Hyper-VのみがQ_AGENTに指定可能。
● Q_ML2_PLUGIN_MECHANISM_DRIVERS=で羅列すれば追加できる。
直接neutronのコンフィグを変更する(DevStackを使わない)ならiniファイルを編集。
/etc/neutron/plugins/ml2/ml2_conf.ini
Ryuを使うMechanism Driver: OFAgent
https://github.com/osrg/ryu/wiki/Configuration-OpenStack-OFAgent-agent
下記をlocalrcに追記して./stack.shしてみた。
enable_plugin networking-ofagent git://git.openstack.org/openstack/networking-ofagent
Q_PLUGIN=ml2
Q_ML2_PLUGIN_MECHANISM_DRIVERS=ofagent
結果: いちおう起動しています
$ ps ax|grep ofa
23174 pts/16 S+ 1:58 /usr/bin/python /usr/local/bin/neutron-ofagent-agent --config-file
/etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini
Neutron using Lagopus via OFAgent driver
OFAgentとopenvswitch driverとの比較にて差異を確認
https://wiki.openstack.org/wiki/Neutron/OFAgent/ComparisonWithOVS
● TODOを見ると、まだOVSへの依存は残っている模様。
○ Pythonで書かれていて、ovs_libをimportしていた。
● tunnel portの作成などはOF-Config likeなプロトコルで実現する予定とのこと。
● このあたりを解決しないと、そもそもLagopusを制御できない。
今回はあきらめましたorz
Original Lagopus driver?
(古い版向けに) dummy (skeleton) driverを書いている人がいた
http://momijiame.tumblr.com/post/101252903916/openstack-neutron-ml2-%
E3%81%AE-driver-%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%
81%BF%E3%81%9F
似たような感じでdriverを起こして中身を埋めれば、Lagopusを制御できる?
● OpenFlow部分はRyuなどを使ったほうが楽
● であればOFAgentを改造したほうがよさそう?
今回のまとめ
● OpenStackは大規模なソフトウェアであり、インストールや設定に手間がかかる
● ネットワーク制御するにはNeutron PluginあるいはML2 driverを用意すればいい
● OFAgent driverはOVS依存部分があり、そのままではLagopusと連携できない
● Lagopus側もポート作成などは現在独自コマンドを使う必要がある
● 全部合わせて1,2日程度でどうにかなるものではなかった。
できませんでした。orz
次回までになんとかできるといいなと思います。
おしまい。

Open stack+lagopus できるかな