Как редактировать элементы патчей в файле настройки для выполнения гитопов с помощью Helm (и избежать накопления патчей)
Я ищу лучший способ обновления изображений докеров, определенных в 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
Как мне избежать этого повторения и добавления в мои файлы все большего и большего шума?
Спасибо!