halyardを使ってspinnaker1.8をdeployする MacOSX編

# 何が書いてあるか

+ halyardをMacOSX上にインストールして、spinnaker1.8をデプロイするまでを書いています
+ 公式ドキュメントが英語しかないのと、微妙にハマりポイントがあったのでそのあたりの解説をしています

# 環境

+ MacOSX High Sierra
+ halyard 1.5.0
+ Java 10 (Javaが必要なのでインストールしておきます)
+ kubectl 1.11 (kubectlが必要なのでインストールしておきます)

# halyardインストール

基本はここの公式ドキュメントを参照します https://www.spinnaker.io/setup/install/halyard/

## ダウンロード&&インストール

### スクリプトダウンロード

公式ドキュメントにあるスクリプトを実行してインストールスクリプトをダウンロードします

```bash
curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/macos/InstallHalyard.sh
```

### インストール

```bash
sudo bash InstallHalyard.sh
```

~~あなたがJava8を使っているならここで成功しますが、9~を使っているならスクリプトが通りません
エディタで開いて152行目を修正します~~

2018/7/25: 自分の書いたPullRequestがMergeされたので以下の修正は必要なくなりました。そのまま実行してください。

```diff

@@ -149,12 +149,14 @@ function install_java() {
   local java_version=$(java -version 2>&1 head -1)
   set -e

-  if [[ "$java_version" == *"1.8"* ]]; then
+  if [[ "$java_version" == *"1.8"* ]] || \
+     [[ "$java_version" == *"9.0"* ]] || \
+     [[ "$java_version" == *"10.0"* ]]; then
     echo "Java is already installed & at the right version"
     return 0;
   fi
```

+ これで `sudo bash InstallHalyard.sh` を行うと動くはずです

### 確認

実行して下記が表示されれば成功です

```
hal -v
1.5.0-20180713143726
```

下記のコマンドでアップデートが可能です

```
sudo update-halyard
```

# spinnaker deployの設定

## cloud providerの設定

https://www.spinnaker.io/setup/install/providers/

halyardでdeployを行うspinnakerのcloud providerを設定します。
今回は`kubernetes V2`に沿って行います。

### accountの設定

https://www.spinnaker.io/setup/install/providers/kubernetes-v2/

kubectlを用いてspinnakerをdeployしたいclusterへ接続するためのkubeconfigが設定されていることが前提条件となります。

まず下記のコマンドを実行します

```bash
hal config provider kubernetes enable
```

次にこちらのコマンドを実行します `my-k8s-v2-account` のところは `~/.kube/config` にある `users:` 項目にあるユーザーのうち、権限があるユーザーの `username` を使用します。

```bash
hal config provider kubernetes account add my-k8s-v2-account \
    --provider-version v2 \
    --context $(kubectl config current-context)
```

こちらが成功したら

```bash
hal config features edit --artifacts true
```

を実行します

## 環境の選択

https://www.spinnaker.io/setup/install/environment/#distributed-installation

今回は `Distributed installation on Kubernetes` に沿っています。

下記のコマンドを実行します `$ACCOUNT` は先程設定したアカウント名を記述します

```bash
hal config deploy edit --type distributed --account-name $ACCOUNT
```

## パーシステントストレージの設定

https://www.spinnaker.io/setup/install/storage/

spinnakerはspinnaker上の設定ファイルを何らかのパーシステントストレージに保存するので、その設定を行います。
今回はs3を利用する方法で記述します。以下のコマンドでs3 bucketをパーシステントストレージとして扱う設定を行います。

```bash

hal config storage s3 edit \
    --access-key-id $YOUR_SECRET_KEY_ID \
    --secret-access-key \
    --region $REGION \
    --bucket $BUCKET_NAME
```

`--bucket $BUCKET_NAME` は指定しない場合、指定したアクセスキーのアカウントにbucketをcreateする権限があれば自動的にbucketが作成されるようです

こちらが成功したら

```bash
hal config storage edit --type s3
```

を実行すると完了です

## deploy

https://www.spinnaker.io/setup/install/deploy/

ここまできたらあとはやるだけです。

以下のコマンドで利用可能なバージョンを確認して

```bash
hal version list
```

こちらのコマンドでどのバージョンをデプロイするかセットします

```bash
hal config version edit --version 1.8.2
```

最後に以下を実行して完了です

```bash
hal deploy apply
```

## 動作確認

spinnakerが立ち上がるまで待ちます

```bash

kubectl get pod -n spinnaker --watch
```

で確認を行い、runningになったら

```
hal deploy connect
```

を実行して、成功したら `http://localhost:9000/` にアクセスするとspinnakerのweb画面が表示されるはずです。