Cloud Launcher で起動したspinnakerにデプロイ先のクラスタを追加しようとした際にハマったので手順を記します.
ubuntuユーザで実施しないといけない点と hal deploy applyでだけでは設定が適用されない点に注意が必要です.
前提
Cloud Lancherのspinnakerの起動は以下の状態で起動するものとします.
-
Kubernetes Account Name
- first-cluster-k8s
-
Kubernetes Cluster Name
- first-cluster
-
Kubernetes Cluster Zone
- asia-east1-a
-
Google Container Registry Address
- asia.gcr.io
-
GCR Account Name
- first-cluster-gcr
追加するクラスタは次のものとします.
-
クラスタ名
- second-cluster
-
ゾーン
- asia-east1-a
手順
$ gcloud compute ssh spinnakerが動いているインスタンス
SSHした後,
$ sudo su - ubuntu
$ chmod +w .kube/config
# kubectlのインストール
$ sudo curl -L https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl
$ sudo chmod 755 /usr/local/bin/kubectl
$ gcloud config set project <PROJECT NAME>
$ gcloud config set container/use_client_certificate true
# Cloud Lancherで起動した際に自動で作成されるspinnaker上のアカウント [first-cluster-k8s]に
# [first-cluster] クラスタのコンテキストを紐付けます.
# 単一のクラスタ管理であればコンテキストが追加されていなくとも動かすことができますが複数のクラスタを管理するには,
# どのアカウントがどのクラスタのコンテキストを有しているかが必要になるためです.
# (デフォルトではコンテキストは紐づいていません)
$ hal config provider kubernetes account edit first-cluster-k8s --context=gke_<PROJECT NAME>_asia-east1-a_first-cluster
$ K8S_ACCOUNT=second-cluster-k8s
$ GCR_ACCOUNT=second-cluster-gcr
$ GCR_ZONE=asia.gcr.ip
$ KEY_FILE_PATH=~/.gcp/gce-for-second-cluster.json
$ SERVICE_ACCOUNT_EMAIL=<サービスアカウントのメールアドレス(自分はデフォルトのCompute Engine default service accountを使いました)>
# サービスアカウントの鍵の作成
$ gcloud iam service-accounts keys create $KEY_FILE_PATH --iam-account $SERVICE_ACCOUNT_EMAIL
# (任意)クラスタ共通で同じサービスアカウントとその鍵を使いまわしていいのであればこれは不要です
$ hal config provider docker-registry account add $GCR_ACCOUNT \
--address $GCR_ZONE \
--password-file $KEY_FILE_PATH \
--username _json_key
ここまできたらクラスタの作成をします. (今回は例として second-cluster という名前)
注意なのは作成する際にサービスアカウントは上の手順で $SERVICE_ACCOUNT_EMAIL
に代入したメールアドレスのサービスアカウントを指定することです.
クラスタの作成が完了したらまたspinnakerインスタンスで作業します.
$ gcloud container clusters get-credentials second-cluster --zone=asia-east1-a
$ hal config provider kubernetes account add $K8S_ACCOUNT \
--docker-registries $GCR_ACCOUNT \
--context $(kubectl config current-context)
$ hal deploy apply
hal deploy apply
を実行すると
+ Get current deployment
Success
+ Prep deployment
Success
Problems in halconfig:
- WARNING There is a newer version of Halyard available (0.44.0),
please update when possible
? sudo apt-get update && sudo apt-get upgrade spinnaker-halyard
+ Preparation complete... deploying Spinnaker
+ Get current deployment
Success
+ Apply deployment
Success
+ Run `hal deploy connect` to connect to Spinnaker.
/home/ubuntu/.hal/default/install.sh must be executed with root permissions; exiting
! ERROR Error encountered running script. See above output for more
details.
このように最後にエラーメッセージが表示されます.
このままでは設定が適用されていないので適用するために下記のコマンドを実行します.
$ sudo .hal/default/install.sh
しばらく時間がかかりますがこれで完了です.
うまく追加されればspinnakerから複数のアカウントが選択できるようになり,それに紐づくクラスタへのデプロイができるようになります.