Spinnakerについて簡単に調べたので自分用にまとめておく
Spinnaker とは
Spinnakerとは、マルチクラウドに対応した継続デリバリのプラットフォームです。
デプロイパイプラインの管理機能を備え、Red/Blackデプロイ(Blue/Greenデプロイ)やカナリアリリースにも対応しています。
2015年にNetflix によってOSS化され、GoogleやMicrosoftを始め、様々な企業やコミュニティが開発に参加しています。
特徴
- Spinnakerは、「Immutable Infrastructure」の原則に基づいて構築されており、クラウドネイティブ アプリの高速かつ信頼性の高いデプロイのための基盤を提供します。
- Immutable Infrastructureとは、一度Deployをしたインスタンスやコンテナには二度と手を加えず、新たにDeployを行う場合はインスタンスやコンテナを作り直すという考え方です。Immutable Infrastructureを採用することでConfiguration driftを避け、安全かつ高速なRollbackが実現できます。
- デプロイは、予測可能で安全であり、必要なときに簡単にロールバックすることができます。
- テスト、QA、本番など、複数の開発環境にまたがる複雑なデプロイパイプラインを作成することができます。
- デプロイパイプラインはパラレル実行とシリアル実行に対応してます
デプロイパイプラインがGUIからでしか定義できない時代もありましたが、現在は設定ファイルに定義できます。
機能一覧
CI Integrations
パイプラインの実行トリガーとして、「Docker Registry」「Cron」「Git」「Jenkins」「Werker」「Travis」「Spinnakerの他のPipeline」「Pub/Sub」「Webhook」「手動」などを設定できます。
VM Bakery
同梱されているPackerを使ってImageを焼くことができる
Deployment Strategies
以下のようなビルドインデプロイメント戦略が選択できる
- highlander(既存のインスタンスに新しいコードをデプロイするTraditionalなやり方。ダウンタイムが発生する)
- Red/Black(Blue/Green)
- Rolling Red/Black
- カナリアリリース
- もしくは独自のデプロイメント戦略
Spinnakerは、kubernetesに対してのCD機能が標準的に実装されているだけではなく、他のクラウドプロバイダに対してにもCD機能が実装されています。(つまりKubernetesデプロイ専用ミドルウェアというわけではない)
Amazon Web Services(AWS)
Microsoft Azure
Google Cloud Platform
Cloud Foundry
Kubernetes
OpenStack など
カスタマイズにより他のクラウドプロバイダ追加も可能です
Manual Judgments
手動判断ステージでは、デプロイする前に手動の承認を必要とすることができます
Spinnakerを使うことで、カナリアリリースした成果物の任意のメトリクスの計測、スコア化を自動で行い、予め決めた合格点を満たすか自動判定できる。そしてその判定をクリアした成果物だけ本番にデプロイがされ、クリアしなかった場合は、ロールバックを自動で行う。
カナリアリリースした成果物の任意のメトリクスの計測、スコア化を行う機構はAutomated Canary Analysis(ACA)と呼ばれていて、kayentaというソフトウェアがそれを担当している。
計測する際のメトリクスは、DataDog、Stackdriver、New Relic、 Prometheus等々から取得できる。
そしてSpinnaker上からどのメトリクスを使うか、またそのメトリクスのしきい値(つまり合格とみなすしきい値)を設定できる。
参考: GoogleとNetflix、カナリアリリース分析ツール「Kayenta」オープンソースで公開
Notifications
email, Slack, SMS(via Twilio)等を使ってイベント通知ができる
Role-based Access Control
OAuth, SAML, LDAP, X.509 certs, Google groups, Azure groups, or GitHub teamsを使用してプロジェクトやアカウントへのアクセスに制限をかけることができます。
パイプライン実行時間の制限
特定の時間のみパイプラインの実行がされるように制限することができます。
たとえば、トラフィックがピークではない時間帯や、適切な担当者がロールアウトを監視しているときに実行するように、時間帯を指定することができます(ホワイトリスト形式)
Chaos Monkey Integration
故意にインスタンスを終了させることによってアプリケーションが問題なく動作するかテストすることができる
Spinnakerはクラスタ管理機能も提供しています。
クラスタの「サーバグループ」「ロードバランサ」「セキュリティグループ」などに対する管理操作を行えます。
またSpinnakerはクラスタ自体の可視化をすることができます。
Monitoring Integrations
モニタリングサービス Datadog、Prometheus、Stackdriverなどと連携したモニタリングを行えます。
またこれらのmetricsをカナリアリリース時に使用できます。
パイプラインテンプレート
https://www.1915keke.com/entry/2018/05/19/124103
パイプラインのテンプレートを作っておいてそれをもとにパイプラインを作ることができる。
特徴としてはテンプレートをもとに作ったパイプラインは設定変更できない。
テンプレートのほうでパイプラインの各フェーズで入力可能な変数を定義できる。(たとえばレプリカ数はパイプライン作成時に決めるなど)
フィードバック
拡張性
Spinnakerの機能だけでは対応できないエッジケースのために、Spinnakerを拡張することもできる
例えばパイプライン中にカスタムステージを作成したり、UIに独自のリンクやボタンを追加するなど。
Typescript/Reactの知識があればフロントエンドの拡張を、Java(JVM)の知識があればバックエンドの拡張を行うことが可能
参考資料:
GKEでspinnakerを動かしてみたい場合
以下の英語ドキュメントを参考にするとよいです
Continuous Delivery Pipelines with Spinnaker and Google Kubernetes Engine
日本語ドキュメントのほうは手順に抜けがあるっぽいので基本は英語のドキュメントのほうをみたほうがよさげ。
解説資料
https://tech.plaid.co.jp/builderscon-2018/
https://www.youtube.com/watch?v=ejcJXjhfG2I&feature=youtu.be
Multicloud deploy with Spinnaker
https://www.ossnews.jp/oss_info/Spinnaker
参考資料
Compute Engine での Spinnaker の実行 | ソリューション | Google Cloud
SpinnakerによるContinuous Delivery - Mercari Engineering Blog