Como editar itens de patch em um arquivo Kustomization para fazer gitops com Helm (e evitar o acúmulo de patches)

Como editar itens de patch em um arquivo Kustomization para fazer gitops com Helm (e evitar o acúmulo de patches)

Estou procurando uma maneira melhor de atualizar imagens do docker definidas em um HelmRelease usando GitOps, pois meu método atual está gerando ruído.

Depois de apresentar o Helm a um cluster que estou gerenciando com GitOps, estou encontrando algumas dificuldades sobre como declarar corretamente novas compilações de imagens do Docker para serem usadas no cluster.

Em uma implantação posso usar um recurso simples de Kustomization para substituir elementos de imagem, por exemplo:

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

e com cada nova compilação eu simplesmente modifico o arquivo com

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

Agora, com o Helm, não posso usar o mesmo truque, pois preciso atualizar a tag spec.values.imageem um HelmRelease, e o Kustomize parece não ter uma abreviação para isso. Então a opção é criar um patch:

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

usando um comando semelhante:

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\"}]"

(não se importe muito com as citações citadas, tenha paciência)

O problema surge ao executar esse comando várias vezes. Embora kustomize edit set imagesubstitua o valor anterior, neste último caso, um novo patché anexado à lista com a extensão 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

Como posso evitar essa repetição e adicionar cada vez mais ruído aos meus arquivos?

Obrigado!

Responder1

encontrei uma maneira mais limpa de fazer isso comsim.

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

informação relacionada