現在の方法ではノイズが生成されるため、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