Open daylightバージョンアップ対応

633 views

Published on

社内の勉強会で発表した、OpenDaylight Berylliumへのバージョンアップ対応についての資料です。

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
633
On SlideShare
0
From Embeds
0
Number of Embeds
559
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Open daylightバージョンアップ対応

  1. 1. OpenDaylightアプリケーションの バージョンアップ対応について Acroquest Technology 株式会社 飯田 樹生
  2. 2. 目次 1. プロジェクトの背景と目的 2. OpenDaylightとは 3. 取り組んだ課題 4. アプリのパッケージング方式の変更 5. アプリで使用するAPIの見直し 6. まとめ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2
  3. 3. 1.プロジェクトの背景と目的 • とあるベアメタルクラウドに携わる ことになり、OpenDaylight Lithiumを用いてOpenFlowスイッ チをコントロールし、ネットワークを 制御することになった • しかしOpenDaylightは変化が激 しく、使用しているAPIが非推奨に なる、アプリのパッケージングの 方式が変わるなど、最新版の Berylliumへの対応が求められる Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3 ※本資料の内容は2016年9月時点の情報に基づいています。
  4. 4. 2.OpenDaylightとは • OSSのSDNコントローラプラットフォーム • 2013年4月にLinux Foundationによって プロジェクトが発足し、2014年2月に最初のバージョン であるHydrogenが、2016年4月に最新版のBeryllium がリリースされた • 主要なSDN関連ベンダがプロジェクトに参加しており、 製品のベースとして利用されるようになってきているが、 ドキュメントなどの情報が少なく、アプリ開発までのハー ドルはまだまだ高い • リポジトリが頻繁に変更されるので、今までビルドできていた ものが急にできなくなることもある Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4
  5. 5. 2.OpenDaylightとは Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5 SAL(Service Abstraction Layer) と呼ばれるフレームワークを持っており、 様々な機能の追加が可能 https://www.opendaylight.org/odlbe • OpenDaylightのアーキテクチャは以下の通り
  6. 6. 2.OpenDaylightとは • SALの中でもMD-SAL(Model-Driven SAL)での実装 が主流となっている • MD-SALではツリー状のデータモデルを中心とし、デー タの更新や取得、変更の通知、RPC(Remote Procedure Call)の実行などによって処理が行われる Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6
  7. 7. 3.取り組んだ課題 • Beryllium対応で以下の課題に取り組んだ ① アプリのパッケージング方式の変更 今までOSGi Bundleとして作成していたものをKaraf Featureに変更する ② アプリで使用するAPIの見直し MD-SALについて、バージョンアップによって変更されたAPI があるので、主に通知の受信について改めて見直す Copyright © Acroquest Technology Co., Ltd. All rights reserved. 7
  8. 8. 4.アプリのパッケージング方式の変更 • OSGi BundleからKaraf Featureへ変更するに際し、プ ロジェクトの構成を見直す • 従来は、データモデルの定義を行う「model」と、実際に アプリを実装する「impl」に分けるのが一般的だった Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8 Project │ ├─model │ └─src/main/yang │ └─sample-model.yang │ └─impl └─src/main/java ├─Activator.java └─SampleApp.java データモデルをYANGで定義する (Javaのエンティティクラスが自動 生成される) アプリを起動するActivatorと、実 際の処理を行うクラスを実装する
  9. 9. 4.アプリのパッケージング方式の変更 • 従来の実装のイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9 YANGモデル エンティティ クラス等 自動生成 Activator Consumer or Provider 独自 アプリケーション 起動 使用、実現 実装箇所 他にアプリケーシ ョンの起動順序 の制御等も考慮 する必要がある。 implの範囲 modelの範囲
  10. 10. 4.アプリのパッケージング方式の変更 • Karaf Featureでは従来に加え、「config」、「feature」、 「distribution」を作成する Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10 Project ├─application │ ├─model │ ├─impl │ │ └─src/main/yang │ │ └─sample-app.yang │ └─config │ └─src/main/resources/initial │ └─51-sample-app.xml ├─feature │ └─src/main/resources │ └─features.xml └─distribution ├─karaf-branding │ └─src/main/resources/org/apache/karaf/branding │ └─branding.properties └─opendaylight-karaf アプリケーション自体も YANGで記述し、その起動 設定をxmlで定義する アプリのKaraf Featureを作成する アプリを含んだOpenDaylightを作成する
  11. 11. 4.アプリのパッケージング方式の変更 • 今回の実装のイメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11 YANGモデル エンティティ クラス等 自動生成 Module 独自 アプリケーション 起動 使用、実現 実装箇所 YANGモデル 自動生成 modelの範囲 implの範囲 configの範囲 アプリケーション の管理をconfig が担当する
  12. 12. 4.アプリのパッケージング方式の変更 • 「config」では「Config Subsystem」と呼ばれる管理機 能に従い、アプリ自体のYANGモジュール化とその設 定を定義する Copyright © Acroquest Technology Co., Ltd. All rights reserved. 12 module sample-app { ... augment "/config:modules/config:module/config:configuration" { case sample-app { when "/config:modules/config:module/config:type = ‘sample-app'"; container data-broker { ... } container rpc-registry { ... } container notification-service { ... } <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config"> <module> <type xmlns:prefix="urn:jp:co:acroquest:odl:sample:sample-app">prefix:sample-app</type> <name>sample-app</name> <data-broker> ... </data-broker> <rpc-registry> ... </rpc-registry> <notification-service> ... </notification-service> sample-app.yang 51-sample-app.xml sample-appという名前のアプリが起動した時、 3つのインスタンスをインジェクトする xmlにも同様の定義を記述する (xmlファイルの先頭の数字はアプリの起動順序 を表す)
  13. 13. 4.アプリのパッケージング方式の変更 • ビルドするとModuleクラス(Activatorに相当)とその Factoryクラスが生成されるので、Moduleの createInstanceメソッドにアプリの起動処理を実装する (必要なインスタンスを取得してアプリのインスタンスを 生成するだけ) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13 public class SampleAppModule extends jp.co.acroquest.odl.sample.impl.AbstractSampleAppModule { ... @Override public java.lang.AutoClosable createInstance() { DataBroker dataBroker = getDataBrokerDependency(); RpcProviderRegistry rpcProviderRegistry = getRpcRegistryDependency(); NotificationProviderService notification = getNotificationServiceDependency(); SampleApp sampleApp = new SampleApp(dataBroker, rpcProviderRegistry, notification);
  14. 14. 4.アプリのパッケージング方式の変更 • 各種設定で記述していたオブジェクトの概要は以下の 通り • いずれも、アプリが使用しない場合は設定や実装を省 略可能 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14 オブジェクト名 説明 DataBroker MD-SALデータストアへアクセスするために必要 RpcProviderRegistry RPCの登録や、他のアプリが提供するRPCを利用 するために必要 NotificationProviderService 通知を発行または受信するために必要
  15. 15. 4.アプリのパッケージング方式の変更 • プロジェクトをビルドすると、作成したアプリケーションの Featureを含んだOpenDaylight Beryllium本体が 「distribution」に生成される (動作に必要なFeatureやBundleが全て含まれている ので、オフライン環境でもそのまま使用可能) • アプリケーションのKar(Karaf Feature)ファイルを作成 し、既存のOpenDaylightに機能を追加する方法もある が、私が試した限りではLithiumとBerylliumでは動作し ないので非推奨(中のファイルが展開されない) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 15
  16. 16. 5.アプリで使用するAPIの見直し • 作成したアプリケーションに特定のListenerを継承し、メ ソッドをオーバーライドすることによって、様々な通知を 受け取ることができるようになる • バージョンアップによって変更されたAPIがあるので、見 直しを行った Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16 独自 アプリケーション Listener ListenerListener
  17. 17. 5.アプリで使用するAPIの見直し Copyright © Acroquest Technology Co., Ltd. All rights reserved. 17 Listener メソッド 説明 OpenDaylight InventoryListener onNodeUpdated / Removed スイッチ(Node)の登録/削除のイベ ントを受け取る onNodeConnectorUpdated / Removed ポート(NodeConnector)の登録/削 除のイベントを受け取る PacketProcessing Listener onPacketReceived コントローラが受信したパケットの情 報を受け取る DataChange Listener onDataChanged データモデル中のデータの変更の通 知を受け取る • 今回検証したListenerは以下の通り
  18. 18. 5.アプリで使用するAPIの見直し Copyright © Acroquest Technology Co., Ltd. All rights reserved. 18 新しいスイッチやポートの登録: OpenDaylight InventoryListener パケットの受信: PacketProcessing Listener データモデルのデータの変化: DataChangeListener • 検知するイベントとListenerの例を以下に示す
  19. 19. 6.まとめ • OpenDaylightのアプリの開発はまだまだハードルが高 い • 1から作るよりは既存のプロジェクトをベースにした方が 良い • アプリを開発する時には、Config Subsystemを用いて 「model(モデル)」と「impl(実装)」と「config(管理)」の 3つを作成する • バージョンアップの際には既存のAPIにも修正が入って いる可能性があるので、動作を確認する • リポジトリも頻繁に変更されるので、ビルドエラーが起き たら疑ってみる Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19
  20. 20. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 20 今後もOpenDaylightの最新情報を追いかけていきます! Infrastructures Evolution

×