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.image
em 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 image
substitua 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