Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@maruware

GKE+Cloud Build+kustomizeのデプロイ

概要

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What is going on with this article?