LoginSignup
11
9

More than 5 years have passed since last update.

Spinnaker on GKE (導入編)

Last updated at Posted at 2017-12-11

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の管理にも)

役割
spinnaker_netflix.png

(引用:参考記事①)

これにより、リリースにおける
安定したイメージの作成 、デプロイ後のテスト、問題が発生した場合の切り戻し
などの作業を"ちゃんと"管理できる

この "ちゃんと" の部分を今回は検証したい
→ 今回は導入のみ

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

作るもの

spinnaker_deployment.png

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が出るが接続はできる
 
Screen Shot 2017-12-07 at 15.49.29.png

感想

長くなったので、実動作については別記事に書こうと思います。

コンテナレジストリ(今回は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)

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9