Cómo editar elementos de parche en un archivo de personalización para hacer gitops con Helm (y evitar que se acumulen parches)

Cómo editar elementos de parche en un archivo de personalización para hacer gitops con Helm (y evitar que se acumulen parches)

Estoy buscando una mejor manera de actualizar las imágenes de la ventana acoplable definidas en HelmRelease usando GitOps, ya que mi método actual genera ruido.

Después de presentar Helm a un clúster que administro con GitOps, encuentro algunas dificultades sobre cómo declarar correctamente nuevas compilaciones de imágenes de Docker para usar en el clúster.

En una implementación, puedo usar un recurso de personalización simple para reemplazar elementos de imagen, por ejemplo:

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

y con cada nueva compilación simplemente modifico el archivo con

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

Ahora con Helm no puedo usar el mismo truco, ya que necesito actualizar la etiqueta spec.values.imageen HelmRelease, y Kustomize no parece tener una abreviatura para eso. Entonces la opción es crear un parche:

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 un comando similar:

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

(no te preocupes mucho por las citas citadas, ten paciencia)

El problema surge al ejecutar varias veces este comando. Si bien kustomize edit set imagesobrescribe el valor anterior, en este caso posterior patchse agrega un nuevo a la lista con el archivo 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

¿Cómo puedo evitar esta repetición y agregar cada vez más ruido a mis archivos?

¡Gracias!

Respuesta1

Encontré una manera más limpia de hacerlo cony q.

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

información relacionada