Spinnaker on GKE のチュートリアルをやったので、Spinnakerをデプロイするところまでの頭の整理

先月こういうことをやったので

bufferings.hatenablog.com

今日は、もう少しちゃんと中身を理解しようとしてみようと思ったのであった。まずはSpinnakerをデプロイするところまで。

準備

1) spinnaker-tutorial という名前のGKE用のクラスターを us-central1-f に作成

gcloud config set compute/zone us-central1-f
gcloud container clusters create spinnaker-tutorial \
    --machine-type=n1-standard-2

こうかな

f:id:bufferings:20180302081025p:plain

2) spinnaker-storage-account というサービスアカウントを作成してロールを紐付ける

gcloud iam service-accounts create  spinnaker-storage-account \
    --display-name spinnaker-storage-account

export SA_EMAIL=$(gcloud iam service-accounts list \
    --filter="displayName:spinnaker-storage-account" \
    --format='value(email)')
export PROJECT=$(gcloud info --format='value(config.project)')

gcloud projects add-iam-policy-binding \
    $PROJECT --role roles/storage.admin --member serviceAccount:$SA_EMAIL

雰囲気で

f:id:bufferings:20180302081217p:plain

3) そのサービスアカウントのキーを spinnaker-sa.json というファイル名でダウンロードしておく

gcloud iam service-accounts keys create spinnaker-sa.json --iam-account $SA_EMAIL

f:id:bufferings:20180302081423p:plain

Helmの設定

1) Helmをインストール

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz
tar zxfv helm-v2.7.2-linux-amd64.tar.gz
cp linux-amd64/helm .

f:id:bufferings:20180302081535p:plain

2) 自分にk8sの cluster-admin ロールを紐付ける

kubectl create clusterrolebinding user-admin-binding --clusterrole=cluster-admin --user=$(gcloud config get-value account)

f:id:bufferings:20180302081613p:plain

3) k8sで kube-system ネームスペースに tiller というサービスアカウントを作成して cluster-admin ロールを紐付ける

kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

f:id:bufferings:20180302081711p:plain

4) k8sで全ネームスペースにリソースをデプロイできるようにSpinnakerに cluster-admin ロールを紐付ける

kubectl create clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:default spinnaker-admin

ん? default:default がSpinnaker?よく分からん。

f:id:bufferings:20180302081813p:plain

5) TillerをクラスターにインストールするためにHelmを初期化

./helm init --service-account=tiller
./helm update
./helm version
# should be v2.7.2

Helmよく分からん。

いよいよSpinnakerをデプロイするぞー!

1) Spinnakerの設定を保存するためのバケットを作成

export PROJECT=$(gcloud info \
    --format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
gsutil mb -c regional -l us-central1 gs://$BUCKET

f:id:bufferings:20180302081929p:plain

2) Spinnakerの設定ファイルを作成

export SA_JSON=$(cat spinnaker-sa.json)
export PROJECT=$(gcloud info --format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
cat > spinnaker-config.yaml <<EOF
storageBucket: $BUCKET
gcs:
  enabled: true
  project: $PROJECT
  jsonKey: '$SA_JSON'

# Disable minio the default
minio:
  enabled: false


# Configure your Docker registries here
accounts:
- name: gcr
  address: https://gcr.io
  username: _json_key
  password: '$SA_JSON'
  email: 1234@5678.com
EOF

設定の内容分からんぁ。

f:id:bufferings:20180302082017p:plain

3) Spinnakerをデプロイ!

./helm install -n cd stable/spinnaker -f spinnaker-config.yaml --timeout 600 \
    --version 0.3.1

f:id:bufferings:20180302082118p:plain

4) デプロイしたSpinnakerにつなげられるようにする

export DECK_POD=$(kubectl get pods --namespace default -l "component=deck" \
    -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace default $DECK_POD 8080:9000 >> /dev/null &

で、8080につなぐと見える。

分かっとらんこと

  • Spinnaker用のロール紐付けの部分
  • Helmの初期化
  • HelmのSpinnaker設定ファイル
  • Spinnakerのdeckというコンポーネント

あぁ、だめだ。花粉のあれでつらいしもう寝よう。おやすー。