Я ищу лучший способ обновления образов 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