spinnakerとopenstackの構築

49
SpinnakerOpenStackの構築 新しいOSSは茨道

Upload: ntt-communications-technology-development

Post on 21-Jan-2018

914 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: SpinnakerとOpenStackの構築

SpinnakerとOpenStackの構築

新しいOSSは茨道

Page 2: SpinnakerとOpenStackの構築

はじめに

本LTはマルチクラウドで継続的デリバリー(Continuous Delivery)を実現するための

ツールSpinnakerと、OpenStackを連携させるために戦ったエンジニアの記録です。

OpenStack以外のクラウドについては試していないので、各自が試していただいて何処

かでその結果を発表していただけると助かります。

Page 3: SpinnakerとOpenStackの構築

Mahito Ogura (小倉真人<[email protected]>)

NTTコミュニケーションズ 技術開発部

業務:クラウドや分散システムの調査検証

● NTTコムウェア入社(H21)2014年に異動で現職

● インフラ構築(Chef, Ansible)

● アプリケーション開発(Ruby)

● OpenStackとか分散ミドルとかコンテナ

● 採用のお手伝いとか各種イベント業, etc...

自己紹介

Page 4: SpinnakerとOpenStackの構築

● マルチクラウド上でContinuous Delivery(CD)を実現するツール

○ Imageの作成やサーバグループの作成、デプロイ、条件に応じたスケールなどをパイプラインとして

組むことでマルチクラウドの上で Microservicesを実現するためのデプロイツール

○ CDツールでありPlatform as a Serviceではない

● Netflix社が開発し、OSSとして公開されているが現在はGoogleやMicrosoft、

Pivotalなども開発に参加している

● OpenStack Summit 2017 Bostonにおいてマルチクラウド対応の一つとして、

OpenStackにも対応していると発表されていた

Spinnakerとは

Page 5: SpinnakerとOpenStackの構築

Spinnakerのパイプライン(参考)

Page 6: SpinnakerとOpenStackの構築

Spinnaker Cloud Targets

Page 7: SpinnakerとOpenStackの構築

ご存知の方は少ないかもしれませんが

Page 8: SpinnakerとOpenStackの構築

Enterprise Cloud(通称:ECL、OpenStackベースのクラウド)

Page 9: SpinnakerとOpenStackの構築

に加え、Azure、 GCP協業とマルチクラウド体制

https://japan.zdnet.com/article/35103126/

Page 10: SpinnakerとOpenStackの構築

Spinnakerが使えれば

面白そう!というわけで試してみた

Page 11: SpinnakerとOpenStackの構築

● 必須のコンポネント

○ 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/

Page 12: SpinnakerとOpenStackの構築

(参考)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/

Page 13: SpinnakerとOpenStackの構築

Data model (公式より抜粋)

Page 14: SpinnakerとOpenStackの構築

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)

Page 15: SpinnakerとOpenStackの構築

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と同じ

Page 16: SpinnakerとOpenStackの構築

Spinnaker & OpenStackSpinnakerのClouddriverの一つとしてOpenStack実装があり、

Spinnakerを用いたOpenStack上での継続的デリバリーが可能。

OpenStack側には以下のコンポーネントが必要(当時の公式ドキュメント)

● Keystone (Identity) v3● Compute v2● LBaaS v2 → ECL未対応

● Networking v2● Orchestration (Heat) → ECL未対応

● Ceilometer  → ECL未対応

● Glance v2

Page 17: SpinnakerとOpenStackの構築

ECLじゃ使えないけど

OpenStackと動くところまでは

DevStackでやってみよう!

Page 18: SpinnakerとOpenStackの構築

公式ドキュメントに従いDevStackのlocal.conf 作成

#Enable heat pluginenable_plugin heat https://git.openstack.org/openstack/heat

# Enable the Ceilometer devstack pluginenable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git

# Load the external LBaaS plugin.enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaasenable_plugin octavia https://git.openstack.org/openstack/octavia

# Enable LBaaS v2ENABLED_SERVICES+=,q-lbaasv2ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api

Page 19: SpinnakerとOpenStackの構築

OpenStackへログイン

Page 20: SpinnakerとOpenStackの構築

OpenStack RCファイルをダウンロード(API v3)

Page 21: SpinnakerとOpenStackの構築

Load Balancer が使う Floating IPを確保

Page 22: SpinnakerとOpenStackの構築

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での起動が公式から消えてる)

Page 23: SpinnakerとOpenStackの構築

compose.env に追記

SPINNAKER_OPENSTACK_ENABLED=true

Spinnakerの設定ファイルは各Clouddriverのオン/オフを環境設定で行っているので

OpenStackの設定を有効にする。

なお、今回はcompose.envに記載してみたが、docker-compose.ymlのclouddriverの

「environment」に記載しても良い。(多分こっちの方がいい)

Page 24: SpinnakerとOpenStackの構築

$ 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)

Page 25: SpinnakerとOpenStackの構築

Spinnakerにアクセス

ブラウザに http://localhost:9000/ でアクセス

立ち上がりが遅いので繋がらなくても暫く待って再接続

Page 26: SpinnakerとOpenStackの構築

Applicationの作成

1. Top画面右上の「Action」から

「Create Application」を選択

2. 「Name」と「Email」を記入

その他の部分は任意である

3. 完了後「Create」をクリック

Page 27: SpinnakerとOpenStackの構築

Security Groupの作成

1. 作成したApplicationの右上にある、

「Security Groups」をクリック

2. 右上の「Create Security Group」

をクリック

3. 「Stack」、「Detail」、

「Description」を埋める

4. 「Ingress」のルールを設定する

5. 完了後「Create」をクリック

Page 28: SpinnakerとOpenStackの構築

Load Balancerの作成

1. 作成したApplicationの右上にある、「Load Balancers」をクリック

2. 右上の「Create Load Balancer」をクリック

3. 「Stack」、「Detail」を埋め、「Subnet」を選択する

4. 「Network」と「Sercurity Group」を選択する

5. 完了後「Create」をクリック

Page 29: SpinnakerとOpenStackの構築

が、LBができず毎度エラー

Page 30: SpinnakerとOpenStackの構築

原因と解決策

毎回同じ時間でエラーを起こすのでタイムアウトを疑う。

ドキュメントを調べると、DevStackなどを使っていたり、

低スペックなマシンを使うとLoad Balancerの作成中にタイムアウト(デフォルト60秒)を

迎えるので、タイムアウト値を伸ばすことが推奨されていた。

Page 31: SpinnakerとOpenStackの構築

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分以上)を設定した

Page 32: SpinnakerとOpenStackの構築

Server Groupの作成

1. 「Stack」、「Detail」を埋め、「Subnet」を選択する

2. 「Inctance Type」と「Image」を選択する

3. クラスタサイズを設定

4. LBとセキュリティグループを設定

5. 完了後「Create」をクリック

Page 33: SpinnakerとOpenStackの構築

が、Imageが出てこない

Page 34: SpinnakerとOpenStackの構築

原因と解決策

どこにもエラーログが出ていないのでエラーログからの解決はほぼお手上げ。

デバッガを使って最終的に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

Page 35: SpinnakerとOpenStackの構築

Spinnaker & OpenStackSpinnakerのClouddriverの一つとしてOpenStack実装があり、

Spinnakerを用いたOpenStack上での継続的デリバリーが可能。

OpenStack側には以下のコンポーネントが必要

● Keystone (Identity) v3● Compute v2● LBaaS v2● Networking v2● Orchestration (Heat)● Ceilometer● Glance v2 v1

※白字はDocumentに非記載 or 記載誤り

Page 36: SpinnakerとOpenStackの構築

# GlanceGLANCE_V1_ENABLED=True

#Enable heat pluginenable_plugin heat https://git.openstack.org/openstack/heat

# Enable the Ceilometer devstack pluginenable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git

# Load the external LBaaS plugin.enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaasenable_plugin octavia https://git.openstack.org/openstack/octavia

# Enable LBaaS v2ENABLED_SERVICES+=,q-lbaasv2ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api

local.conf に追記(太字部分)

Page 37: SpinnakerとOpenStackの構築

再びServer Groupの作成に挑戦

1. 「Stack」、「Detail」を埋め、「Subnet」を選択する

2. 「Inctance Type」と「Image」を選択する

3. クラスタサイズを設定

4. LBとセキュリティグループを設定

5. 完了後「Create」をクリック

Page 38: SpinnakerとOpenStackの構築

が、やっぱりServer Groupが作れない

Page 39: SpinnakerとOpenStackの構築

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}

Page 40: SpinnakerとOpenStackの構築

紆余曲折を経た結果

Page 41: SpinnakerとOpenStackの構築

Spinnaker & OpenStackSpinnakerの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 記載誤り

Page 42: SpinnakerとOpenStackの構築

公式ドキュメント・・・

Page 43: SpinnakerとOpenStackの構築

# GlanceGLANCE_V1_ENABLED=True

#Enable heat pluginenable_plugin heat https://git.openstack.org/openstack/heat

# Enable the Ceilometer devstack pluginenable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git

# Load the external LBaaS plugin.enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaasenable_plugin octavia https://git.openstack.org/openstack/octavia

# Enable LBaaS v2ENABLED_SERVICES+=,q-lbaasv2ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api

# Enable the aodh alarming servicesenable_plugin aodh https://git.openstack.org/openstack/aodh master

DevStackのlocal.conf 最終版(太字部分)

Page 44: SpinnakerとOpenStackの構築

これでServerGroupを作ってパイプラインを作成

Page 45: SpinnakerとOpenStackの構築

マニュアルでパイプラインを起動

Page 46: SpinnakerとOpenStackの構築

サーバグループが出来ていることを確認

Page 47: SpinnakerとOpenStackの構築

まとめ

Spinnakerはマルチクラウドで継続的デリバリーをするためのツール

OpenStackとSpinnakerを連携させることも可能

ただしまだ未成熟なツールなのでご利用の際はお気をつけください

困った際はログとソースコードを読んで解決しましょう

他のClouddriverでの動作報告お待ちしております!

Page 48: SpinnakerとOpenStackの構築

宣伝: 8/10(木) 13:00 ~ 18:00

イベントサイト:https://ntt-developers.github.io/ntt-tech-conference/02/

Page 49: SpinnakerとOpenStackの構築

Presentation by NTT Communications