ToDo
Halyard on GKE Quickstart - [https://www.spinnaker.io/setup/quickstart/halyard-gke/]
これをそのまま(最新版にして, asia-northeast1-cゾーンで)やってみた。
Spinnaker?
-> CD (Continuous Delivery Platform)
メリットは
・Immutable Infrastructure *1 の徹底
・予測可能で安全なデプロイ パイプラインの作成
(cronによってもパイプライン起動可 → k8s jobsの管理にも)
(引用:参考記事①)
これにより、リリースにおける
安定したイメージの作成 、デプロイ後のテスト、問題が発生した場合の切り戻し
などの作業を"ちゃんと"管理できる
この "ちゃんと" の部分を今回は検証したい
→ 今回は導入のみ
Halyard?
-> Spinnaker自体のDeploy管理ツール
Spinnakerは複数のコンポーネント(コンテナ)で形成されているため、Halyardでの管理が推奨されている。
Spinnakerの各コンポーネントのDeploy、Test、Updateの実行が含まれる。
必要になるもの
・GCPアカウント
・gcloudコマンド (GoogleCloudSDK)
・GCE, GKEを使用
・以下のAPI有効化
Google Identity and Access Management (IAM) API
Google Cloud Resource Manager API
作るもの
GCEにHalyardを展開、そこからGKEにSpinnakerを展開する
やってみた
少し時間がかかるので、先にGKEのクラスタを作成しておく
(1.8.4-gke.0, asia-northeast1-c, あとはデフォルト)
左にVM(GCE)作成
GCP_PROJECT=$(gcloud info --format='value(config.project)')
HALYARD_SA=halyard-service-account
gcloud iam service-accounts create $HALYARD_SA \
--project=$GCP_PROJECT \
--display-name $HALYARD_SA
HALYARD_SA_EMAIL=$(gcloud iam service-accounts list \
--project=$GCP_PROJECT \
--filter="displayName:$HALYARD_SA" \
--format='value(email)')
gcloud projects add-iam-policy-binding $GCP_PROJECT \
--role roles/iam.serviceAccountKeyAdmin \
--member serviceAccount:$HALYARD_SA_EMAIL
gcloud projects add-iam-policy-binding $GCP_PROJECT \
--role roles/container.admin \
--member serviceAccount:$HALYARD_SA_EMAIL
GCS_SA=gcs-service-account
gcloud iam service-accounts create $GCS_SA \
--project=$GCP_PROJECT \
--display-name $GCS_SA
GCS_SA_EMAIL=$(gcloud iam service-accounts list \
--project=$GCP_PROJECT \
--filter="displayName:$GCS_SA" \
--format='value(email)')
gcloud projects add-iam-policy-binding $GCP_PROJECT \
--role roles/storage.admin \
--member serviceAccount:$GCS_SA_EMAIL
HALYARD_HOST=$USER-halyard-`date +%m%d`
gcloud compute instances create $HALYARD_HOST \
--project=$GCP_PROJECT \
--zone=asia-northeast1-c \
--scopes=cloud-platform \
--service-account=$HALYARD_SA_EMAIL \
--image-project=ubuntu-os-cloud \
--image-family=ubuntu-1404-lts \
--machine-type=n1-standard-4
VM(GCE)にSSHで入る
gcloud compute ssh $HALYARD_HOST \
--project=$GCP_PROJECT \
--zone=asia-northeast1-c \
--ssh-flag="-L 9000:localhost:9000" \
--ssh-flag="-L 8084:localhost:8084"
最新の安定版 kubectl を入れる。(今回はv1.8.4が入った)
→ 試してみたが画面表示されないバグになって、かなり詰まった。
チュートリアル通りここはv1.6.1を入れる。
curl -O https://storage.googleapis.com/kubernetes-release/release/v1.6.1/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl
安定版halyardを入れる。
curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/stable/InstallHalyard.sh
sudo bash InstallHalyard.sh
. ~/.bashrc
GKE登録
GKE_CLUSTER_NAME={YOUR_GKE_CLUSTER_NAME}
GKE_CLUSTER_ZONE={YOUR_GKE_CLUSTER_ZONE}
gcloud config set container/use_client_certificate true
gcloud container clusters get-credentials $GKE_CLUSTER_NAME \
--zone=$GKE_CLUSTER_ZONE
GCS_SA=gcs-service-account
GCS_SA_DEST=~/.gcp/gcp.json
mkdir -p $(dirname $GCS_SA_DEST)
GCS_SA_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:$GCS_SA" \
--format='value(email)')
gcloud iam service-accounts keys create $GCS_SA_DEST \
--iam-account $GCS_SA_EMAIL
Spinnaker最新バージョンを使うように設定(今回はv1.5.1が設定された)
hal config version edit --version $(hal version latest -q)
GCS設定
hal config storage gcs edit \
--project $(gcloud info --format='value(config.project)') \
--json-path ~/.gcp/gcp.json
hal config storage edit --type gcs
GCR設定
hal config provider docker-registry enable
hal config provider docker-registry account add my-gcr-account \
--address asia.gcr.io \
--password-file ~/.gcp/gcp.json \
--username _json_key
k8s プロバイダ設定
hal config provider kubernetes enable
hal config provider kubernetes account add my-k8s-account \
--docker-registries my-gcr-account \
--context $(kubectl config current-context)
Deploy Spinnaker!
hal config deploy edit \
--account-name my-k8s-account \
--type distributed
hal deploy apply
Halyard (GCP) ⇔ Spinnaker (GKE) 接続
hal deploy connect
今回はローカルから9000番をリンクしてSSH接続したので、
http://localhost:9000 でSpinnakerに接続
※ deploy後、OAuthを設定してない、GCRに何もないなどWarningが出るが接続はできる
感想
長くなったので、実動作については別記事に書こうと思います。
コンテナレジストリ(今回はGCR)と連携してくれてとても便利そう。
halコマンド覚えないと。中身の動作まで理解できたらk8sの勉強にもなりそう。
hal deploy apply
SoCOOL! Halyardは常駐させなくていい?
大変参考になる記事
①Global Continuous Delivery with Spinnaker - Netflix 本家ブログ
→ はじめに。
②SpinnakerによるContinuous Delivery - メルカリブログ
→ 分かりやすいく使いたくなる記事。簡潔にまとまってて素晴らしい。
③Compute Engine での Spinnaker の実行 - GCP Blog
→ "Spinnakerについて" のセクションが分かりやすい
*1 不変のインフラ (参考:http://image.itmedia.co.jp/l/im/enterprise/articles/1701/23/l_kz_kore0123_01.jpg)