Spinnakerについて調べたのでまとめる

Spinnakerについて簡単に調べたので自分用にまとめておく

Spinnaker とは

Spinnakerとは、マルチクラウドに対応した継続デリバリのプラットフォームです。 デプロイパイプラインの管理機能を備え、Red/Blackデプロイ(Blue/Greenデプロイ)やカナリアリリースにも対応しています。 2015年にNetflix によってOSS化され、GoogleMicrosoftを始め、様々な企業やコミュニティが開発に参加しています。

特徴

  • Spinnakerは、「Immutable Infrastructure」の原則に基づいて構築されており、クラウドネイティブ アプリの高速かつ信頼性の高いデプロイのための基盤を提供します。
    • Immutable Infrastructureとは、一度Deployをしたインスタンスやコンテナには二度と手を加えず、新たにDeployを行う場合はインスタンスやコンテナを作り直すという考え方です。Immutable Infrastructureを採用することでConfiguration driftを避け、安全かつ高速なRollbackが実現できます。
  • デプロイは、予測可能で安全であり、必要なときに簡単にロールバックすることができます。
  • テスト、QA、本番など、複数の開発環境にまたがる複雑なデプロイパイプラインを作成することができます。
  • デプロイパイプラインはパラレル実行とシリアル実行に対応してます スクリーンショット 2019-05-29 11.29.43.png

デプロイパイプラインが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

手動判断ステージでは、デプロイする前に手動の承認を必要とすることができます スクリーンショット 2019-05-24 10.05.23.png

カナリアリリース

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