マルチクラウド継続型デリバリープラットフォーム「Spinnaker 1.0」をインストールしてみた


■ 1. はじめに

Spinnaker 1.0がリリースされたので、さわってようと思いインストールしてみました。
この際1.0で追加された機能『Halyard』を使ったので、手順を記述します。

Spinnakerとは?
・Spinnakerのホームページ
https://www.spinnaker.io/
・Spinnakerの説明が記載されているページ
https://cloudplatform-jp.googleblog.com/2017/06/spinnaker-10-continuous-delivery.html

■ 2. Halyardとは?

ざっくり説明すると、Spinnakerのインストール、アップデート、設定変更を補助するCLIツールです。後述しますが、Halyardを利用することで簡単にSpinnakerをインストールできます。

■ 3. Halyardでインストールしてみる

今回のインストールは、GCPで起動したインスタンスで行いました。
手順はSpinnakerが公開しているドキュメント通りに実施します。

・インスタンスの作成

ゾーン:任意のリージョン
OS:Ubuntu 14.04
マシンタイプ:vCPU×4(メモリ26GB、n1-highmem-4)
アクセス範囲:すべての Cloud API に完全アクセス権を許可
ファイアウォール:HTTP トラフィックを許可する/HTTPS トラフィックを許可する

・Google SDKの認証

詳細は割愛しますが、Spinnakerをインストールするインスタンスで以下のコマンドで認証を行います。


$ gcloud auth login
$ gcloud config set project "GCPのプロジェクト名"
・Halyard をインストール

$ curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/stable/InstallHalyard.sh

$ sudo bash InstallHalyard.sh

"Halyardのバージョンが最新であることを確認"
$ hal -v

$ . ~/.bashrc

$ sudo apt-get update

$ sudo apt-get upgrade spinnaker-halyard
・Halyard のインストールタイプを選択

"HalyardをインストールしたサーバでSpinnakerをインストールすることを選択"
$ hal config deploy edit --type localdebian
・ストレージの設定(今回はGoogle Cloud Storageを選択)

$ SERVICE_ACCOUNT_NAME=spinnaker-gcs-account

$ SERVICE_ACCOUNT_DEST=~/.gcp/gcs-account.json

$ gcloud iam service-accounts create \
>     $SERVICE_ACCOUNT_NAME \
>     --display-name $SERVICE_ACCOUNT_NAME

$ SA_EMAIL=$(gcloud iam service-accounts list \
>     --filter="displayName:$SERVICE_ACCOUNT_NAME" \
>     --format='value(email)')

$ gcloud projects add-iam-policy-binding "自分のプロジェクト名" \
>     --role roles/storage.admin --member serviceAccount:$SA_EMAIL

$ mkdir -p $(dirname $SERVICE_ACCOUNT_DEST)

$ gcloud iam service-accounts keys create $SERVICE_ACCOUNT_DEST \
>     --iam-account $SA_EMAIL

$ hal config storage gcs edit --project "自分のプロジェクト名" \
>     --bucket-location "バケットのロケーション" \
>     --json-path $SERVICE_ACCOUNT_DEST

$ hal config storage edit --type gcs
:
+ Successfully edited persistent storage. 
・SpinnakerにGoogle Compute Engineの操作権限を付与

$ SERVICE_ACCOUNT_NAME=spinnaker-gce-account

$ SERVICE_ACCOUNT_DEST=~/.gcp/gce-account.json

$ gcloud iam service-accounts create \
>     $SERVICE_ACCOUNT_NAME \
>     --display-name $SERVICE_ACCOUNT_NAME

$ SA_EMAIL=$(gcloud iam service-accounts list \
>     --filter="displayName:$SERVICE_ACCOUNT_NAME" \
>     --format='value(email)')

$ gcloud projects add-iam-policy-binding "自分のプロジェクト名" \
>     --member serviceAccount:$SA_EMAIL \
>     --role roles/compute.instanceAdmin 

$ gcloud projects add-iam-policy-binding "自分のプロジェクト名" \
>     --member serviceAccount:$SA_EMAIL \
>     --role roles/compute.networkAdmin 

$ gcloud projects add-iam-policy-binding "自分のプロジェクト名" \
>     --member serviceAccount:$SA_EMAIL \
>     --role roles/compute.securityAdmin

$ gcloud projects add-iam-policy-binding "自分のプロジェクト名" \
>     --member serviceAccount:$SA_EMAIL \
>     --role roles/compute.storageAdmin

$ gcloud projects add-iam-policy-binding "自分のプロジェクト名" \
>     --member serviceAccount:$SA_EMAIL \
>     --role roles/iam.serviceAccountActor

$ mkdir -p $(dirname $SERVICE_ACCOUNT_DEST)

$ gcloud iam service-accounts keys create $SERVICE_ACCOUNT_DEST \
>     --iam-account $SA_EMAIL

$ hal config provider google enable

$ hal config provider google account add my-gce-account --project "自分のプロジェクト名" \
>     --json-path $SERVICE_ACCOUNT_DEST
:
+ Successfully added account my-gce-account for provider
  google.
・デプロイ

$ hal version list
:
? Options include: 
  - X.X.X "Spinnakerのバージョンをメモする。"

$ hal config version edit --version "Spinnakerのバージョン"

$ sudo hal deploy apply
:
spinnaker start/running

"Spinnakerプロセスが起動していることを確認"
$ status spinnaker
spinnaker start/running
・ポートフォワード

SpinnakerのGUIはlocalhostの9000番で起動します。そのため、9000番ポートにポートフォワードします。
(Spinnakerの仕様上、8084番,8087番も併せてポートフォワードする必要があります。)

ひとつの例として、Google Cloud SDKを使用した方法をご紹介します。
まず、ローカルマシン(今回はWindows)にGoogle Cloud SDKをインストールします。
https://cloud.google.com/sdk/?hl=ja
次に、インストールされた「Google Cloud SDK Shell」を開き、以下のコマンドを入力します。


> gcloud auth login
> gcloud config set project "GCPのプロジェクト名"
> gcloud compute ssh --ssh-flag="-L" --ssh-flag="9000:localhost:9000" --ssh-flag="-L" --ssh-flag="8084:localhost:8084" --ssh-flag="-L" --ssh-flag="8087:localhost:8087" --project="自分のプロジェクト名" --zone="インスタンスのリージョン" "インスタンス名"

■ 4. Spinnakerに接続してみる

ブラウザにhttp://localhost:9000 を入力して接続します。

GUIに接続できたら、右上のActionsプルタブより、Applicationなどの設定を行う事ができます。


BakeとDeployも実施できました!

■ 5. おまけ

Halyardを利用して、Spinnakerを監視するツール『Prometheus』を簡単に
インストールすることもできます。興味ある方は、ぜひ試してみてください。
https://www.spinnaker.io/setup/monitoring/prometheus/