Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SpinnakerとOpenStackの構築

1,435 views

Published on

OpenStack Days Tokyo 2017のLTで、マルチクラウドで継続的デリバリーを実現するためのツールSpinnakerとOpenStackを連携させるまでについて記載した資料です。

Published in: Technology

SpinnakerとOpenStackの構築

  1. 1. Spinnakerと OpenStackの構築 新しいOSSは茨道
  2. 2. はじめに 本LTはマルチクラウドで継続的デリバリー(Continuous Delivery)を実現するための ツールSpinnakerと、OpenStackを連携させるために戦ったエンジニアの記録です。 OpenStack以外のクラウドについては試していないので、各自が試していただいて何処 かでその結果を発表していただけると助かります。
  3. 3. Mahito Ogura (小倉真人<m.ogura@ntt.com>) NTTコミュニケーションズ 技術開発部 業務:クラウドや分散システムの調査検証 ● NTTコムウェア入社(H21)2014年に異動で現職 ● インフラ構築(Chef, Ansible) ● アプリケーション開発(Ruby) ● OpenStackとか分散ミドルとかコンテナ ● 採用のお手伝いとか各種イベント業, etc... 自己紹介
  4. 4. ● マルチクラウド上でContinuous Delivery(CD)を実現するツール ○ Imageの作成やサーバグループの作成、デプロイ、条件に応じたスケールなどをパイプラインとして 組むことでマルチクラウドの上で Microservicesを実現するためのデプロイツール ○ CDツールでありPlatform as a Serviceではない ● Netflix社が開発し、OSSとして公開されているが現在はGoogleやMicrosoft、 Pivotalなども開発に参加している ● OpenStack Summit 2017 Bostonにおいてマルチクラウド対応の一つとして、 OpenStackにも対応していると発表されていた Spinnakerとは
  5. 5. Spinnakerのパイプライン(参考)
  6. 6. Spinnaker Cloud Targets
  7. 7. ご存知の方は少ないかもしれませんが
  8. 8. Enterprise Cloud(通称:ECL、OpenStackベースのクラウド)
  9. 9. に加え、Azure、 GCP協業とマルチクラウド体制 https://japan.zdnet.com/article/35103126/
  10. 10. Spinnakerが 使えれば 面白そう! というわけで試してみた
  11. 11. ● 必須のコンポネント ○ Orca - オーケストレーションエンジン ○ Clouddriver - クラウドとの連携やアカウントの状態を管理する ○ Front50 - アプリケーションのメタデータを管理する ● オプションのコンポーネントは任意で利用 ○ Deck - SpinnakerのUI ○ Gate - API Gateway ○ Rosco - ImageのBake(Packer, Docker build or etc...) ○ Igor - 外部リソースのポーリングとレポートティング、 Echoのイベントの状態監視 ○ Echo - イベントの管理と設定済みのパイプラインのトリガを受け取る ○ Fiat - 認証とアクセス管理 Spinnaker’s components Architecture - Spinnaker: https://www.spinnaker.io/reference/architecture/
  12. 12. (参考)Spinnaker’s Cloud Data Model ● Account - デプロイ必要な各クラウドのアカウント ● Cluster - Server Groupの論理的な集合 ● Server Group - デプロイ可能なVMイメージとインスタンス数や オートスケール、メタデータなどの構成設定を定義したもの ● Instance - 各クラウドで実際に起動するVM ● Load Balancer - 複数のインスタンスに負荷を分散するためのリソース ● Security Group - Ingress/Egressが定義されたFirewall Concepts - Spinnaker:https://www.spinnaker.io/concepts/
  13. 13. Data model (公式より抜粋)
  14. 14. Data model(私の理解) Cluster Load Balancer Server Group Load Balancer Server Group Load Balancer Server Group Security Group (Firewall Rules) Security Group (Firewall Rules) Security Group (Firewall Rules)
  15. 15. Spinnaker’s Data Model -> OpenStack Data Model ● Account - OpenStack Project ● Cluster - Server Groupの集合 ● Server Group - OpenStackのHeatでテンプレートから作られた“Stack” ● Instance - HeatのStackで管理されたVM ● Load Balancer - LBaaS v2のオブジェクト ● Security Group - OpenStackのSecurity Groupと同じ
  16. 16. Spinnaker & OpenStack SpinnakerのClouddriverの一つとしてOpenStack実装があり、 Spinnakerを用いたOpenStack上での継続的デリバリーが可能。 OpenStack側には以下のコンポーネントが必要(当時の公式ドキュメント) ● Keystone (Identity) v3 ● Compute v2 ● LBaaS v2 → ECL未対応 ● Networking v2 ● Orchestration (Heat) → ECL未対応 ● Ceilometer  → ECL未対応 ● Glance v2
  17. 17. ECLじゃ使えないけど OpenStackと動くところまでは DevStackでやってみよう!
  18. 18. 公式ドキュメントに従いDevStackのlocal.conf 作成 #Enable heat plugin enable_plugin heat https://git.openstack.org/openstack/heat # Enable the Ceilometer devstack plugin enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git # Load the external LBaaS plugin. enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas enable_plugin octavia https://git.openstack.org/openstack/octavia # Enable LBaaS v2 ENABLED_SERVICES+=,q-lbaasv2 ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api
  19. 19. OpenStackへログイン
  20. 20. OpenStack RCファイルをダウンロード(API v3)
  21. 21. Load Balancer が使う Floating IPを確保
  22. 22. Spinnakerの構築 (docker-compose利用) AWS, GCP, Azure上ではSpinnakerのVMイメージが公開されているが今回はローカ ルで動かすためdockerを利用。(なお、Spinnakerを試し始めた2017/6/初旬に自力構 築を試したが、 Ubuntu 14.04上でしか対応していないうえ、バグが有り構築ができな かった。) docker-composeの資料はgithubにあるので参照 https://github.com/spinnaker/spinnaker/blob/master/experimental/docker-compose/README.md (というか、docker-composeでの起動が公式から消えてる)
  23. 23. compose.env に追記 SPINNAKER_OPENSTACK_ENABLED=true Spinnakerの設定ファイルは各Clouddriverのオン/オフを環境設定で行っているので OpenStackの設定を有効にする。 なお、今回はcompose.envに記載してみたが、docker-compose.ymlのclouddriverの 「environment」に記載しても良い。(多分こっちの方がいい)
  24. 24. $ git clone https://github.com/spinnaker/spinnaker.git $ cd spinnaker/experimental/docker-compose $ vim ../../config/clouddriver.yml $ vim compose.env $ source demo-openrc.sh (⇠さっきOpenStackからDLしてきたもの) $ env | grep OS_ >> compose.env $ docker-compose -f docker-compose.yml -f docker-compose.override.yml Spinnakerの立ち上げ(localhost)
  25. 25. Spinnakerにアクセス ブラウザに http://localhost:9000/ でアクセス 立ち上がりが遅いので繋がらなくても暫く待って再接続
  26. 26. Applicationの作成 1. Top画面右上の「Action」から 「Create Application」を選択 2. 「Name」と「Email」を記入 その他の部分は任意である 3. 完了後「Create」をクリック
  27. 27. Security Groupの作成 1. 作成したApplicationの右上にある、 「Security Groups」をクリック 2. 右上の「Create Security Group」 をクリック 3. 「Stack」、「Detail」、 「Description」を埋める 4. 「Ingress」のルールを設定する 5. 完了後「Create」をクリック
  28. 28. Load Balancerの作成 1. 作成したApplicationの右上にある、 「Load Balancers」をクリック 2. 右上の「Create Load Balancer」 をクリック 3. 「Stack」、「Detail」を埋め、 「Subnet」を選択する 4. 「Network」と「Sercurity Group」 を選択する 5. 完了後「Create」をクリック
  29. 29. が、LBができず毎度エラー
  30. 30. 原因と解決策 毎回同じ時間でエラーを起こすのでタイムアウトを疑う。 ドキュメントを調べると、DevStackなどを使っていたり、 低スペックなマシンを使うとLoad Balancerの作成中にタイムアウト(デフォルト60秒)を 迎えるので、タイムアウト値を伸ばすことが推奨されていた。
  31. 31. clouddriver.ymlを変更 # intervals would need to be adjusted, especially if testing out # Spinnaker with Devstack or another resource constrained enviroment lbaas: - pollTimeout: 60 - pollInterval: 5 + pollTimeout: 300 + pollInterval: 10 DevStack利用時、手元の環境では2分以上かかっていたので 多めに時間(3分以上)を設定した
  32. 32. Server Groupの作成 1. 「Stack」、「Detail」を埋め、 「Subnet」を選択する 2. 「Inctance Type」と「Image」 を選択する 3. クラスタサイズを設定 4. LBとセキュリティグループを設定 5. 完了後「Create」をクリック
  33. 33. が、Imageが出てこない
  34. 34. 原因と解決策 どこにもエラーログが出ていないのでエラーログからの解決はほぼお手上げ。 デバッガを使って最終的にGlanceにリクエストが飛んでいるところまでは確認出来た が、値が取れていない(CLIではイメージの取得は可能) Glanceのログをみると "GET /v1/images/detail HTTP/1.1" の文字 ドキュメントではGlance v2と記載されていたが、ソースコードを読むと、 実装はGlance v1にしか対応していないことが判明。 GithubにIssue[1]として登録し、現在は解決済み [1] : https://github.com/spinnaker/spinnaker/issues/1750
  35. 35. Spinnaker & OpenStack SpinnakerのClouddriverの一つとしてOpenStack実装があり、 Spinnakerを用いたOpenStack上での継続的デリバリーが可能。 OpenStack側には以下のコンポーネントが必要 ● Keystone (Identity) v3 ● Compute v2 ● LBaaS v2 ● Networking v2 ● Orchestration (Heat) ● Ceilometer ● Glance v2 v1 ※白字はDocumentに非記載 or 記載誤り
  36. 36. # Glance GLANCE_V1_ENABLED=True #Enable heat plugin enable_plugin heat https://git.openstack.org/openstack/heat # Enable the Ceilometer devstack plugin enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git # Load the external LBaaS plugin. enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas enable_plugin octavia https://git.openstack.org/openstack/octavia # Enable LBaaS v2 ENABLED_SERVICES+=,q-lbaasv2 ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api local.conf に追記(太字部分)
  37. 37. 再びServer Groupの作成に挑戦 1. 「Stack」、「Detail」を埋め、 「Subnet」を選択する 2. 「Inctance Type」と「Image」 を選択する 3. クラスタサイズを設定 4. LBとセキュリティグループを設定 5. 完了後「Create」をクリック
  38. 38. が、やっぱりServer Groupが作れない
  39. 39. Clouddriverのログを見ると以下のエラーが Heatのエラーのようでよく見ると “Service aodh is not available” と言っているので 調べるとaodhというTelemetry Alarming(Aodh)のコンポーネントがあるらしく、素直にそ れを入れてみる。 こちらもGithubのIssue[1]に登録済みでPR[2]マージ待ち。 原因と解決策 [1] : https://github.com/spinnaker/spinnaker/issues/1757 [2] : https://github.com/spinnaker/spinnaker.github.io/pull/274 clouddriver | Caused by: ClientResponseException{message=HEAT-E99001 Service aodh is not available for resource type OS::Ceilometer::Alarm, reason: aodh alarming endpoint is not in service catalog., status=400, status-code=BAD_REQUEST}
  40. 40. 紆余曲折を経た結果
  41. 41. Spinnaker & OpenStack SpinnakerのClouddriverの一つとしてOpenStack実装があり、 Spinnakerを用いたOpenStack上での継続的デリバリーが可能。 OpenStack側には !!!以下のコンポーネントが必要!!! ● Keystone (Identity) v3 ● Compute v2 ● LBaaS v2 ● Networking v2 ● Orchestration (Heat) ● Ceilometer + Telemetry Alarming(Aodh) ● Glance v2 v1 ※白字はDocumentに非記載 or 記載誤り
  42. 42. 公式ドキュメント・・・
  43. 43. # Glance GLANCE_V1_ENABLED=True #Enable heat plugin enable_plugin heat https://git.openstack.org/openstack/heat # Enable the Ceilometer devstack plugin enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git # Load the external LBaaS plugin. enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas enable_plugin octavia https://git.openstack.org/openstack/octavia # Enable LBaaS v2 ENABLED_SERVICES+=,q-lbaasv2 ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api # Enable the aodh alarming services enable_plugin aodh https://git.openstack.org/openstack/aodh master DevStackのlocal.conf 最終版(太字部分)
  44. 44. これでServerGroupを作ってパイプラインを作成
  45. 45. マニュアルでパイプラインを起動
  46. 46. サーバグループが出来ていることを確認
  47. 47. まとめ Spinnakerはマルチクラウドで継続的デリバリーをするためのツール OpenStackとSpinnakerを連携させることも可能 ただしまだ未成熟なツールなのでご利用の際はお気をつけください 困った際はログとソースコードを読んで解決しましょう 他のClouddriverでの動作報告お待ちしております!
  48. 48. 宣伝: 8/10(木) 13:00 ~ 18:00 イベントサイト:https://ntt-developers.github.io/ntt-tech-conference/02/
  49. 49. Presentation by NTT Communications

×