Spinnaker を導入した
概要
GKE のアプリケーションのデプロイに Spinnaker を導入したので、その手順をまとめておく。
halyard のインストール
Try out Halyard on GKE に従い、GCE 上に halyard VM を作り、Kubernetes クラスタに Spinnaker をセットアップしていく。
Try out Halyard on GKE の通りに行った。
ただし、複数人が halyard を扱うことを考慮し、~/.hal/config ではなく /opt/config/.hal/config に変更した。
/opt/spinnaker/config/halyard.yml を修正すればよい。
~/.kube/config, ~/.gcp/gcp.json も /opt/config 以下を参照するよう変更した。
あと .hal/config の timezone を Asia/Tokyo に設定した。
Kubernetes Account の設定
https://www.spinnaker.io/setup/install/providers/kubernetes/
GKE の k8s クラスタを扱うには、
- クラスタのレガシー認証を有効にする
- Kubernetes RBAC を設定する
どちらかしなければならない。
RBAC を設定する
その前に、GKE の k8s クラスタに追加の Role または ClusterRole 権限を作成する前には、自分の Google ID に cluster-admin の役割を与える RoleBinding を作成する必要があるらしい。
一旦、cluster-admins ClusterRoleBinding を作成。
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: cluster-admins subjects: - kind: User name: [google アカウント名] roleRef: kind: ClusterRole name: cluster-admin apiGroup: ""
ClusterRoleBinding, ServiceAccount を作成。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: spinnaker-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - namespace: default kind: ServiceAccount name: spinnaker-service-account --- apiVersion: v1 kind: ServiceAccount metadata: name: spinnaker-service-account namespace: default
Optional: configure Kubernetes roles (RBAC) の通りに ClusterRole で spinnaker-role を作成したが、エラーでうまく行かず...
https://github.com/spinnaker/spinnaker/issues/2413#issuecomment-391962077
こちらを追加してみてもまだ足りなかった。
よって、cluster-admin を bind した。
ServiceAccount で context を作成する。
kubectl config set-credentials spinnaker-service-account-token-user --token XXXX kubectl config set-context spinnaker-service-account --cluster=[クラスタ] --user spinnaker-service-account-token-user
Kubernetes Account を追加
spinnaker のデプロイには Kubernetes V1 アダプタを使用し、アプリケーションのデプロイには Kubernetes V2 アダプタを使用した。 V2 では manifest-based deployment が可能になる。
hal config provider kubernetes enable
spinnaker(V1)
hal config provider kubernetes account add spinnaker-account \ --docker-registries my-docker-registry \ --context spinnaker-service-account
アプリケーション(V2)
hal config provider kubernetes account add app-account \ --provider-version v2 \ --context spinnaker-service-account
hal config features edit --artifacts true
hal deploy apply
常時 Spinnaker を使えるように
デフォルトでは hal deploy connect
している時しか Spinnaker へアクセスできないので、常時アクセスできるように設定する。
Try out public Spinnaker on GKE に従えば良い。
deck, gate の service の編集で少し補足を。
service の type: LoadBalancer
で設定できる loadBalancerIP
は region のみ。(global は使えない)
gcloud compute addresses create [NAME] --region=[REGION]
また loadBalancerSourceRanges
でIP制限を追加できる。
これで Spinnker へアクセスし、pipeline を作成できる。