継続的デリバリープラットフォーム「Spinnaker」を試してみた
継続的デリバリー(CD)プラットフォームの「Spinnaker」をちょっと触ってみたので記録しておきます。
Spinnakerとは
Spinnakerは、Netflixが開発したマルチクラウドに対応したオープンソースの継続的デリバリープラットフォームです。
例えばJenkinsのCI後、自動でデプロイをしてくれたりするのがこいつです。
ただデプロイするだけであればいくらでも手段はありますが、
うまいことブルーグリーンデプロイをしてくれたりロールバックしてくれたりします。
またこのデプロイのトリガーもcronやJenkinsや手動だったり色々可能です。
例えばKubernatesのデプロイはインフラ担当者でないと難しいものではあるのですが
それもSpinnakerがいい感じにデプロイをしてくれるのでその課題もなくなります。
- AWS EC2
- Kubernates
- Google Cloud Engine
- Google Kubernates Engine
- Google App Engine
- Microsoft Azure
- OpenStack
今後も増えていくみたいです。
こう見ると主要なパブリッククラウドにも対応しているし、
KubernatesやOpenStackにも対応しているので今後も期待できるものではないでしょうか。
用語
このSpinnakerを利用する上で理解していないとわかりづらいものがあったのでここで整理しておきます。
https://www.spinnaker.io/concepts/
ServerGroup
インスタンス数やオートスケーリングのポリシーなどの基本設定や、
DockerやVMイメージを指定して、展開されたインスタンスの集合のことです。
環境(開発/検証/本番など)単位でServerGroupを作ることになると思います。
Cluster
Server Groupをグループ化したものがClusterです。
もうデプロイ済みでトラフィックに乗っているものです。
Application
Clusterをグループ化したものがApplicationです。
通常のアプリケーションの単位で分割していくものだと思います。
Security Group
IP範囲(CIDR)とポートを指定して通信を制限する機能です。
AWSのセキュリティグループみたいなものです。
LoadBalancer
ServerGroup内のインスタンス間のトラフィックのバランシングを行います。
AWSのELBのようなものです。
Pipeline
ステージと呼ばれるいくつかのアクション(デプロイ、ManualJudgment、イメージの取得など)を組み合わせて
デプロイの流れを作っていくものです。
https://www.spinnaker.io/concepts/
触ってみた
ほとんど以下のドキュメント通り。
https://cloud.google.com/solutions/managing-deployments-on-gcp-with-spinnaker?hl=ja
Spinnakerのデプロイ
Spinnakerの用意はGCPアカウントを持っていればすごく簡単でした。
CloudLancharで数クリックで用意できました。
デプロイが終わると以下のような画面が表示されます。
「使うんならSSHトンネル通して見るんやで」って書いてあります。
黒くなってて見えないけど、ここにgloudコマンドが書いてあるので、ローカルPCで実行してブラウザで「localhost:9000」を見るとSpinnakerが表示されます。
WindowsPCでの確認方法
かなり蛇足ですが、Windows10の環境だとWindows Subsystem for Linuxを使うと
gcloudの導入が楽だったのでおすすめです。
Applicationの作成
Spinnakerでデプロイするためには、まずApplicationを作る必要があります。
Name: tutorial
Owner Email: 適当なメールアドレス
Instance Health: Consider only ~にチェック(タスクの実行時にクラウド プロバイダの正常性のみ考慮する)
作成ボタンをクリック。
Server Groupの作成
続いてClusterタブに行き、Sever Groupを作成します。
Stack: test (こうするとCluster名がtutorial-test となる)
Image: デプロイするイメージを指定
Instance Type: Micro Utilityで「Micro」を選択
作成ボタンをクリック。
Pipileneの作成
続いてPipelineタブに行き、パイプラインを作っていきます。
Pipeline Name: Promote Test to Stage
以下の画面が出るので「Add stage」をクリック
第1ステージを入力
第1ステージでは、「tutorial-test」クラスタのイメージを検索します。
Type: Find Image from Cluster
Find Image from Cluster Configuration
Cluster: tutorial-test
Server Group Selection: Newest(最新)
第2ステージを入力
第2ステージでは、第1ステージで見つけたイメージをステージング環境にデプロイします。
Type: Deploy
Deploy Configurationの「add server group」をクリック。
Copy configuration fromは「None」。
ステージング環境のクラスタの設定を行います。
Stack: stage
Strategy: Highlander(新しいクラスタのヘルスチェック確認後、古いクラスタを削除する)
あとは最初に設定したクラスタの設定と同じです。
デプロイしてみる
ではいま作ったパイプラインを実行してみます。
ちゃんと動けばstageのインスタンスが出来てるはずです。
できてるっぽい
実際にできたインスタンスを見てみると、stageのインスタンスがいる。
このデプロイをもう1度実行すると、Stageのインスタンスが切り替わるはずです。
ということでもう一度デプロイしてみる。
変わりました
最後に
Spinnakerを触ってみて感じたのは
- ブルーグリーンデプロイのようなデプロイ戦略を簡単に実現できて楽
- immutable infrastructureを強制できて良い
- トリガーも多種多様なので扱いやすい
- PipelineやServer Groupはソースコード管理できないのでしたい
なかなかこういうのを自分たちで実装するのは大変なので
OSSとして使えるのはすごくありがたいです。
今回はGoogleが公開しているサンプルをそのままやってみましたが、
機会があればより実践的なものを作っていきたいと思います。
では!