Как редактировать элементы патча в файле Kustomization для выполнения gitops с Helm (и избегания накопления патчей)

Как редактировать элементы патча в файле Kustomization для выполнения gitops с Helm (и избегания накопления патчей)

Я ищу лучший способ обновления образов Docker, определенных в HelmRelease, с помощью GitOps, поскольку мой текущий метод генерирует шум.

После внедрения Helm в кластер, которым я управляю с помощью GitOps, я столкнулся с некоторыми трудностями при правильном объявлении новых сборок образов Docker для использования в кластере.

При развертывании я могу использовать простой ресурс кастомизации для замены элементов изображения, например:

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 я не могу использовать тот же трюк, так как мне нужно обновить тег spec.values.imageв HelmRelease, а в 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 -ei '.spec.values.image.tag = "YOURTAG"' yourfile.yaml

Связанный контент