Spinnaker使ってGoogle Kubernetes Engineで継続的デリバリをする 前編

ドーモ、読者=サン。DTB(どうぶつタワーバトル)面白いですね。まだ未プレイであれば、是非プレイして見て下さい。これがe-Sportsです。

では早速、本題にはいると今回は、Spinnakerを使ってGoogle Kubernetes Engineのクラスタにアプリケーションを継続的デリバリ出来るようにする方法についてご紹介します。Spinnakerは継続的デリバリを行うためのツールです。

今回はこんな感じの継続的デリバリのフローをSpinnakerを使って実現します。

![Untitled Diagram (1).png](https://qiita-image-store.s3.amazonaws.com/0/89131/957128fa-6777-e3fa-427b-b8dc18d0fbbf.png)

ユーザー（アプリケーション開発者）はレポジトリにPushするだけでアプリケーションがデプロイされます。デプロイ後に今度は、ユーザーが手動でデプロイしたアプリケーションに対して動作確認を行い、問題なければ本番環境のLBを切り替えてデプロイしたアプリケーションをリリースする想定です。

Spinnakerの概要などは今回は紹介しないので、知りたい人は公式を御覧ください。
[Spinnaker Concepts](https://www.spinnaker.io/concepts/)

# 手順

+ Container Builderの設定(Docker　buildとDocker push)
+ Spinnakerのデプロイ

手順としては、大きく分けて2つになります。今回の記事ではSpinnakerのデプロイまでを行い、次の記事でSpinnakerのパイプラインの設定の解説を行う予定です。

# Container Builderの設定
Container BuilderではDockerコンテナイメージのビルドとプッシュを行います。設定方法に関しては公式ドキュメントのDockerfileによるクイックスタートを読んで下さい！
[Dockerfile によるクイックスタート](https://cloud.google.com/container-builder/docs/docker-build?hl=ja)
ちなみにDockerfileのビルドだけであれば、UIポチポチで設定出来ます！

# Spinnakerのデプロイ

Spinnakerをデプロイして、その後に動作確認も兼ねて新しいアプリケーションを作るところまでを行います。アプリケーションはSpinnakerのトップレベルの概念です。

## Spinnakerのデプロイ
SpinnakerのデプロイはGCPのCLOUD LAUNCHERを使います。CLOUD LAUNCHERのページからポチポチするだけでGCEにSpinnakerのインスタンスがデプロイされてめっちゃ楽です。

[公式 CLOUD LAUNCHER](https://cloud.google.com/launcher/?hl=ja)

 ではデプロイしていきましょう。GCPのコンソールからCloud Launcherのページに移動して、Cloud Launcherの検索窓にspinnakerと入力して、検索結果にSpinnakerにが表示されたらそれをクリックして下さい。

![スクリーンショット 2017-12-10 20.53.01.png](https://qiita-image-store.s3.amazonaws.com/0/89131/bde8913d-15f4-e9e9-50a2-48f55df5bc34.png)

![スクリーンショット 2017-12-10 20.51.52.png](https://qiita-image-store.s3.amazonaws.com/0/89131/ec5f469c-7f6e-47eb-b9b2-ae90747c1b65.png)

クリックしたら下記の画面に移動するので、COMPUTE ENGINE　上で起動をクリックして下さい。

![スクリーンショット 2017-12-10 21.02.41.png](https://qiita-image-store.s3.amazonaws.com/0/89131/99d47409-a73c-a526-0ea6-896ec7eab44a.png)

クリックすると新しいSpinnaker のデプロイというページが表示されます。今回はKubernetesにデプロイしたいので、Kubernetes Enabledにチェックを付けて、Cluster Nameなどを入力して下さい。入力が終わったらデプロイを押してデプロイしましょう。

![スクリーンショット 2017-12-10 21.05.51.png](https://qiita-image-store.s3.amazonaws.com/0/89131/737c6c6b-6ab0-6915-9fd5-3e86a90d64b2.png)

デプロイが上手く行けば、下記の様な画面が表示されると思います。緑のチェックが付いてあれば成功しています。
![スクリーンショット 2017-12-10 21.49.09.png](https://qiita-image-store.s3.amazonaws.com/0/89131/753ead9e-6ab8-54ff-719e-57179c697998.png)
ちなみに、ここでデプロイにコケてるとエラーの内容が表示されるのですが、場合によっては何も伝わってこないエラーが表示されるので結構地獄です・・・

## Spinnakerのアップデート
 　2017/12/14現在でCLOUD LAUNCHERで構築するとSpinnakerのGateというソフトが、起動しないことがあるみたいなので、SpinnakerのVMにSSHで入ってSpinnakerのアップデートをしましょう。

**手順**
1. sshでログイン
2. apt-get update && apt-get upgrade spinnakerを実行


### 1. sshでログイン
```
gcloud compute ssh --project={プロジェクト名} --zone={ゾーン} spinnaker-1
```

### 2. apt-get update && apt-get upgrade spinnakerを実行

```
sudo apt-get update
sudo apt-get upgrade spinnaker
```
upgradeの時の質問には全部、yで問題ないかと思います。

## Spinnakerの画面にアクセス
それでは、Spinnakerのパイプラインの設定を行っていきましょう。まず最初にSSHトンネルを使って先程デプロイしたSpinnakerにブラウザからアクセスします。SSHトンネルはgcloud コマンドを使って行います。コマンドはSpinnakerデプロイ直後に表示されるWebページの**Spinnkarを使ってみる**の**Accessing Spinnaker through SSH Tunnel**に表示されているコマンドをコピペしてターミナルで実行して下さい。


![スクリーンショット 2017-12-10 21.53.41.png](https://qiita-image-store.s3.amazonaws.com/0/89131/aca6cd12-7281-f6f8-2468-ffee4732dd93.png)

コマンド例

```shell

gcloud compute ssh --project={プロジェクト名} --zone={ゾーン} spinnaker-1 -- -L 9000:localhost:9000  -L 8084:localhost:8084
```

コマンドを実行したらブラウザからlocalhost:9000にアクセスしてみて下さい。下記にようなロード画面が表示されるはずです。

![spinnaker起動画面.png](https://qiita-image-store.s3.amazonaws.com/0/89131/54c384ce-698f-97e1-0e9d-b15adfe38df0.png)

## 新しいアプリケーションを作る
 Spinnakerではまず最初にアプリケーションというものを作る必要があります。アプリケーションはSpinnakerのトップレベルの概念で、アプリケーションの中にパイプライン、クラスタ、ロードバランサがあります。
それでは、アプリケーションを作っていきましょう。Spinnakerのトップページから右下のActionsをクリックしてCreate Applicationをクリックして下さい。

![スクリーンショット 2017-12-10 23.25.34.png](https://qiita-image-store.s3.amazonaws.com/0/89131/302edf7d-ac78-b632-dc18-02e372cdeba9.png)


クリックするとNew Applicationというページに飛ばされるので必要な情報を入力します。今回は、kubernetesにデプロイするのでCloudProvidersでkubernetesを選択して下さい。

![スクリーンショット 2017-12-10 22.30.18.png](https://qiita-image-store.s3.amazonaws.com/0/89131/487e8ee8-10a4-2775-8c39-875fbd7169b1.png)

入力が終わったら、Createを押して作成しましょう。

正常にCreateされたら下記のような画面が表示されるはずです！
![スクリーンショット 2017-12-11 0.03.41.png](https://qiita-image-store.s3.amazonaws.com/0/89131/831e7e2c-1444-6662-9430-fc7837011cf8.png)


# さいごに
今回はこれで、最後になります。次回の記事でSpinnakerでLBの作成とパイプラインの構築について解説します。