やりたいこと
- 簡単にSpinnakerをGKEにインストールしたい
- 新しいやつを入れたい
GCPの公式のSpinnakerのドキュメントを見て、GKEにインストールしてみたくなったが、最新(19/5/18)のSpinnaker(v1.12.5)ではなく、0.31というめっちゃ古いやつやって、そのままではインストールできなかった!
GCP公式のドキュメント
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#start_a_cloud_shell_instance
MACにHalyardをインストールして構築したことはあるが、全部Kubernetesでやりたかった。
Spinnakerの必要条件
- Kubernetesクラスタ
- DockerRegistoryの権限
やることリスト
- サービスアカウント作成
- アクセス権限付与
- サービスアカウントのSecretリソース作成
サービスアカウント作成
SERVICE_ACCOUNT_NAME=spinnaker-account
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
--display-name $SERVICE_ACCOUNT_NAME
変数整理
export SA_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:$SERVICE_ACCOUNT_NAME" \
--format='value(email)')
export PROJECT=$(gcloud info --format='value(config.project)')
アクセス権限付与
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$SA_EMAIL \
--role roles/storage.admin
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$SA_EMAIL \
--role roles/browser
gcloud iam service-accounts keys create spinnaker-sa.json --iam-account $SA_EMAIL
values.yamlファイル作成
詳しくはこちらを参考にしてください。
halyard:
spinnakerVersion: 1.12.5
image:
repository: gcr.io/spinnaker-marketplace/halyard
tag: 1.16.0
dockerRegistries:
- name: gcr
address: asia.gcr.io
username: _json_key
# パスワードは先ほど作ったspinnaker-sa.jsonをコピペ
password: |
{
"type": "service_account",
...
}
spinnakerFeatureFlags:
- artifacts
- jobs
minio:
enabled: true
imageTag: RELEASE.2018-06-09T02-18-09Z
serviceType: ClusterIP
accessKey: spinnakeradmin
secretKey: spinnakeradmin
bucket: "spinnaker"
rbac:
create: true # ここはkubeconfigをsecretでやる方法とRBACでやる方法の2種類があります、こちらの方が簡単かと
Helmからインストール
helm install -n cd -f values.yaml stable/spinnaker --timeout 600
ログの確認
こちらで、どこでつまづいたのか確認できます。先ほどのvalues.yamlの rbac.create
を true
にするのを忘れると、インストーラ(cd-install-using-hal
)がデプロイできなかったりするので注意が必要です。他にも、認証が通ってないとかって問題も発生しやすそうです。
k logs jobs/cd-install-using-hal -f
# stern をお使いの場合は
stern cd-i
Spinnakerにアクセス
ちなみに、ポッドが立ち上がるまで若干かかります。
export DECK_POD=$(kubectl get pods --namespace spinnaker -l "cluster=spin-deck" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace spinnaker $DECK_POD 9000
export GATE_POD=$(kubectl get pods --namespace spinnaker -l "cluster=spin-gate" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace spinnaker $GATE_POD 8084