Helm で Gitops を実行するために Kustomization ファイル内のパッチ項目を編集する方法 (パッチが積み重なるのを回避する方法)

Helm で Gitops を実行するために Kustomization ファイル内のパッチ項目を編集する方法 (パッチが積み重なるのを回避する方法)

現在の方法ではノイズが生成されるため、GitOps を使用して HelmRelease で定義された Docker イメージを更新するより良い方法を探しています。

GitOps で管理しているクラスターに Helm を導入した後、クラスターで使用する新しい Docker イメージ ビルドを適切に宣言する方法に問題が生じています。

デプロイメントでは、単純な Kustomization リソースを使用して画像要素を置き換えることができます。例:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace

resources:
- namespace.yaml
- my-deployment.yaml

images:
- name: my/image
  newName: my/image
  newTag: updated-tag

そして、新しいビルドごとにファイルを次のように変更するだけです

kustomize edit set image my/image=my/image:updated-tag

現在、Helm では同じトリックを使用できません。HelmRelease でタグを更新する必要がありspec.values.image、Kustomize にはそのためのショートカットがないようです。そのため、オプションはパッチを作成することです。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace

resources:
- namespace.yaml
- my-helm-release.yaml

patches:
- patch: '[{"op": "replace", "path": "/spec/values/image", "value": "my/image:updated-tag"}]'
  target:
    kind: HelmRelease
    name: my-helm-release
    namespace: my-namespace

同様のコマンドを使用します:

kustomize edit add patch \
    --kind HelmRelease \
    --name my-helm-release \
    --namespace my-namespace --patch "[{\"op\": \"replace\", \"path\": \"/spec/values/image\", \"value\": \"my/image:updated-tag\"}]"

(引用文はあまり気にしないでください、ご容赦ください)

問題は、このコマンドを複数回実行するときに発生します。 はkustomize edit set image以前の値を上書きしますが、後者の場合、patchによって新しい値がリストに追加されますmore-updated-tag

patches:
- patch: '[{"op": "replace", "path": "/spec/values/image", "value": "my/image:updated-tag"}]'
  target:
    kind: HelmRelease
    name: my-helm-release
    namespace: my-namespace
- patch: '[{"op": "replace", "path": "/spec/values/image", "value": "my/image:more-updated-tag"}]'
  target:
    kind: HelmRelease
    name: my-helm-release
    namespace: my-namespace

この繰り返しを回避し、ファイルにノイズがどんどん追加されないようにするにはどうすればよいでしょうか?

ありがとう!

答え1

もっときれいな方法を見つけたyq

yq -ei '.spec.values.image.tag = "YOURTAG"' yourfile.yaml

関連情報