spinnakerとopenstackの構築
TRANSCRIPT
SpinnakerとOpenStackの構築
新しいOSSは茨道
はじめに
本LTはマルチクラウドで継続的デリバリー(Continuous Delivery)を実現するための
ツールSpinnakerと、OpenStackを連携させるために戦ったエンジニアの記録です。
OpenStack以外のクラウドについては試していないので、各自が試していただいて何処
かでその結果を発表していただけると助かります。
Mahito Ogura (小倉真人<[email protected]>)
NTTコミュニケーションズ 技術開発部
業務:クラウドや分散システムの調査検証
● NTTコムウェア入社(H21)2014年に異動で現職
● インフラ構築(Chef, Ansible)
● アプリケーション開発(Ruby)
● OpenStackとか分散ミドルとかコンテナ
● 採用のお手伝いとか各種イベント業, etc...
自己紹介
● マルチクラウド上でContinuous Delivery(CD)を実現するツール
○ Imageの作成やサーバグループの作成、デプロイ、条件に応じたスケールなどをパイプラインとして
組むことでマルチクラウドの上で Microservicesを実現するためのデプロイツール
○ CDツールでありPlatform as a Serviceではない
● Netflix社が開発し、OSSとして公開されているが現在はGoogleやMicrosoft、
Pivotalなども開発に参加している
● OpenStack Summit 2017 Bostonにおいてマルチクラウド対応の一つとして、
OpenStackにも対応していると発表されていた
Spinnakerとは
Spinnakerのパイプライン(参考)
Spinnaker Cloud Targets
ご存知の方は少ないかもしれませんが
Enterprise Cloud(通称:ECL、OpenStackベースのクラウド)
に加え、Azure、 GCP協業とマルチクラウド体制
https://japan.zdnet.com/article/35103126/
Spinnakerが使えれば
面白そう!というわけで試してみた
● 必須のコンポネント
○ 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/
(参考)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/
Data model (公式より抜粋)
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)
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と同じ
Spinnaker & OpenStackSpinnakerのClouddriverの一つとしてOpenStack実装があり、
Spinnakerを用いたOpenStack上での継続的デリバリーが可能。
OpenStack側には以下のコンポーネントが必要(当時の公式ドキュメント)
● Keystone (Identity) v3● Compute v2● LBaaS v2 → ECL未対応
● Networking v2● Orchestration (Heat) → ECL未対応
● Ceilometer → ECL未対応
● Glance v2
ECLじゃ使えないけど
OpenStackと動くところまでは
DevStackでやってみよう!
公式ドキュメントに従い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
OpenStackへログイン
OpenStack RCファイルをダウンロード(API v3)
Load Balancer が使う Floating IPを確保
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での起動が公式から消えてる)
compose.env に追記
SPINNAKER_OPENSTACK_ENABLED=true
Spinnakerの設定ファイルは各Clouddriverのオン/オフを環境設定で行っているので
OpenStackの設定を有効にする。
なお、今回はcompose.envに記載してみたが、docker-compose.ymlのclouddriverの
「environment」に記載しても良い。(多分こっちの方がいい)
$ 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)
Applicationの作成
1. Top画面右上の「Action」から
「Create Application」を選択
2. 「Name」と「Email」を記入
その他の部分は任意である
3. 完了後「Create」をクリック
Security Groupの作成
1. 作成したApplicationの右上にある、
「Security Groups」をクリック
2. 右上の「Create Security Group」
をクリック
3. 「Stack」、「Detail」、
「Description」を埋める
4. 「Ingress」のルールを設定する
5. 完了後「Create」をクリック
Load Balancerの作成
1. 作成したApplicationの右上にある、「Load Balancers」をクリック
2. 右上の「Create Load Balancer」をクリック
3. 「Stack」、「Detail」を埋め、「Subnet」を選択する
4. 「Network」と「Sercurity Group」を選択する
5. 完了後「Create」をクリック
が、LBができず毎度エラー
原因と解決策
毎回同じ時間でエラーを起こすのでタイムアウトを疑う。
ドキュメントを調べると、DevStackなどを使っていたり、
低スペックなマシンを使うとLoad Balancerの作成中にタイムアウト(デフォルト60秒)を
迎えるので、タイムアウト値を伸ばすことが推奨されていた。
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分以上)を設定した
Server Groupの作成
1. 「Stack」、「Detail」を埋め、「Subnet」を選択する
2. 「Inctance Type」と「Image」を選択する
3. クラスタサイズを設定
4. LBとセキュリティグループを設定
5. 完了後「Create」をクリック
が、Imageが出てこない
原因と解決策
どこにもエラーログが出ていないのでエラーログからの解決はほぼお手上げ。
デバッガを使って最終的に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
Spinnaker & OpenStackSpinnakerのClouddriverの一つとしてOpenStack実装があり、
Spinnakerを用いたOpenStack上での継続的デリバリーが可能。
OpenStack側には以下のコンポーネントが必要
● Keystone (Identity) v3● Compute v2● LBaaS v2● Networking v2● Orchestration (Heat)● Ceilometer● Glance v2 v1
※白字はDocumentに非記載 or 記載誤り
# 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 に追記(太字部分)
再びServer Groupの作成に挑戦
1. 「Stack」、「Detail」を埋め、「Subnet」を選択する
2. 「Inctance Type」と「Image」を選択する
3. クラスタサイズを設定
4. LBとセキュリティグループを設定
5. 完了後「Create」をクリック
が、やっぱりServer Groupが作れない
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}
紆余曲折を経た結果
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 記載誤り
公式ドキュメント・・・
# 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 最終版(太字部分)
これでServerGroupを作ってパイプラインを作成
マニュアルでパイプラインを起動
サーバグループが出来ていることを確認
まとめ
Spinnakerはマルチクラウドで継続的デリバリーをするためのツール
OpenStackとSpinnakerを連携させることも可能
ただしまだ未成熟なツールなのでご利用の際はお気をつけください
困った際はログとソースコードを読んで解決しましょう
他のClouddriverでの動作報告お待ちしております!
宣伝: 8/10(木) 13:00 ~ 18:00
イベントサイト:https://ntt-developers.github.io/ntt-tech-conference/02/
Presentation by NTT Communications