Kustomize運用でyqを使ってImage tagを更新していく方法


※ 追記
Kustomize edit set imageコマンドがあるためyqでやる必要がなかったです...つらみ

$ cd overlays/dev/bases                                                                                                   
$ kustomize edit set image XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/backend-admin:v1.0.0

はじめに

Kustomizeのimagesを使ってtag運用を行っているパターンは多いと思います
tagの更新を手動ではなくCIなどで自動化したいと思った際に出てくるimagesの値をreplaceする手段をyqで解決していきます

yqのインストール

注意点としてpipbrewでyqを入れちゃうと、今回利用するオプションは使えないのでpip3をおすすめします

$ pip3 install jq
$ pip3 install yq

Kustomizeでimagesを使う

images[1].newTagを更新したい

# 更新前の`kustomization.yaml`
$ cat overlays/dev/bases/kustomization.yaml
namespace: development
bases:
  - ../../../bases/backend
patchesStrategicMerge:
  - patch-backend.yaml
images:
  - name: nginx
    newTag: 1.15.2
  - name: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/backend
    newName: 00000000000X.dkr.ecr.ap-northeast-1.amazonaws.com/backend
    newTag: latest
resources:
  - namespace.yaml

images[1].newTagをv1.0.0に更新する

# yqでImage tagの更新
$ yq -y -i '.images |= map(select(.name=="XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/backend").newTag |= "v1.0.0")' overlays/dev/bases/kustomization.yaml

# 確認
$ cat overlays/dev/bases/kustomization.yaml
namespace: development
bases:
  - ../../../bases/backend
patchesStrategicMerge:
  - patch-backend.yaml
images:
  - name: nginx
    newTag: 1.15.2
  - name: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/backend
    newName: 00000000000X.dkr.ecr.ap-northeast-1.amazonaws.com/backend
    newTag: v1.0.0
resources:
  - namespace.yaml

うまくできてます
注意点としてはkustomization.yamlのコードに空白行は挟めない(yqが取り除いてしまうので)という制約ができる点です

まとめ

このようにyqを使うとワンライナーでtagを更新できました
これに加えてVersioningの自動化、CIからPRを自動的に発行などをするとGitopsのマニフェスト運用周りが大分綺麗になりそうですね〜(絶賛取組中)ここらへんも随時自分かチームの人で情報出せてけたらなーと思います