LoginSignup
9
12

More than 5 years have passed since last update.

GKE+Cloud Build+kustomizeのデプロイ

Last updated at Posted at 2019-01-07

概要

GKEにCloud Buildを使ってデプロイする。
Cloud Build内のstepでkubectlの代わりにkustomizeを使う。

手順

1. Code Buildを有効にする

Webコンソール等でCode Buildを有効にする

2. Code BuildのIAMにGKE権限付与

Code BuildのIAM(ex. 123456789012@cloudbuild.gserviceaccount.com)に
"Kubernetes Engine 管理者" の権限を与える。

3. cloud-builders-community/kustomize を使う

cloud-builders-communityにkustomize入りbuilderがあるのでそれを使う。
READMEにあるように

git clone https://github.com/GoogleCloudPlatform/cloud-builders-community
cd cloud-builders-community/kustomize
gcloud builds submit --config cloudbuild.yaml .

する。
(事前に gcloud config set project が必要)

そうするとREADMEにあるように


- id: deploy
  name: 'gcr.io/$PROJECT_ID/kustomize'
  args:
  - 'build'
  - 'overlays/prod'
  env:
    - 'APPLY=true'
    - 'CLOUDSDK_COMPUTE_ZONE=us-west1'
    - 'CLOUDSDK_CONTAINER_CLUSTER=tf-k8s'
    - 'GCLOUD_PROJECT=compound-dev'

というようにstepを記述してkustomizeを実行できる。

その他

stageでconfを分ける

このあたりはいまいち固まりきってないけど

  • develop
    • ブランチへのpushをトリガーにする
    • latest, develop等のタグへDockerイメージをpush
    • Deploymentを強制的に更新するためにsedで無理やりテンプレート置換してgitのハッシュをannotationに入れる
  • production
    • タグのpushをトリガーにする
    • $TAG_NAMEをDockerイメージをpush
    • kustomizeのimageTagsでイメージのタグを上書き指定

としてみている。いろいろ気持ち悪さがあるのでもうちょっとなんとかしたい。。
sedのところはkubectl patch deploymentするのとどっちがいいか微妙なところ。

overlays/develop/app.yaml
# ...
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    metadata:
      annotations:
        git-sha: _COMIT_SHA_
# ...
cloudbuild.develop.yaml
steps:
# ...
- name: 'gcr.io/$PROJECT_ID/kustomize'
  entrypoint: bash
  args:
  - '-c'
  - |
    gcloud container clusters get-credentials --zone "$$CLOUDSDK_COMPUTE_ZONE" "$$CLOUDSDK_CONTAINER_CLUSTER"
    kustomize build "overlays/develop" | sed -e "s/__COMMIT_SHA__/$COMMIT_SHA/g" | kubectl apply -f -  
  env:
    - 'APPLY=true'
    - 'CLOUDSDK_COMPUTE_ZONE=$_ZONE'
    - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
    - 'GCLOUD_PROJECT=$PROJECT_ID'
overlays/production/kustomization.yaml
# ...
imageTags:
  - name: asia.gcr.io/my-project/my-app
    newTag: v0.0.2
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args:
    - 'build'
    - '--tag=asia.gcr.io/$PROJECT_ID/my-app:$TAG_NAME'
    - '.'
- name: 'gcr.io/cloud-builders/docker'
  args: ["push", "asia.gcr.io/$PROJECT_ID/my-app:$TAG_NAME"]

- name: 'gcr.io/$PROJECT_ID/kustomize'
  args:
  - 'build'
  - 'overlays/production'
  env:
    - 'APPLY=true'
    - 'CLOUDSDK_COMPUTE_ZONE=$_ZONE'
    - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
    - 'GCLOUD_PROJECT=$PROJECT_ID'

参考

Cloud BuildとkustomizeでGKEのCDパイプラインを作る - y-ohgi's blog
https://y-ohgi.hatenablog.com/entry/2018/09/06/080921

9
12
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
9
12