マルチクラウド継続型デリバリープラットフォーム｢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をインストールするインスタンスで以下のコマンドで認証を行います。

```cl

$ gcloud auth login
$ gcloud config set project "GCPのプロジェクト名"
```

#####・Halyard をインストール
```cl

$ 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 のインストールタイプを選択
```cl

"HalyardをインストールしたサーバでSpinnakerをインストールすることを選択"
$ hal config deploy edit --type localdebian
```

#####・ストレージの設定(今回はGoogle Cloud Storageを選択)
```cl

$ 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の操作権限を付与
```cl

$ 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.
```

#####・デプロイ
```cl

$ 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｣を開き、以下のコマンドを入力します。

```cl

> 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 を入力して接続します。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/192426/855ba2ed-ee5a-155f-0dc4-66f103db050a.png)

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

![2.png](https://qiita-image-store.s3.amazonaws.com/0/192426/f3135d3e-511a-baaf-8578-c50a792d3724.png)
BakeとDeployも実施できました！


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

![4.png](https://qiita-image-store.s3.amazonaws.com/0/192426/df0d5cf1-32c9-2d77-9b63-eacb6badf702.png)