Ich suche nach einer besseren Möglichkeit, in einem HelmRelease definierte Docker-Images mit GitOps zu aktualisieren, da meine aktuelle Methode Störungen verursacht.
Nachdem ich Helm in einem Cluster eingeführt habe, den ich mit GitOps verwalte, habe ich einige Schwierigkeiten damit, neue Docker-Image-Builds zur Verwendung im Cluster richtig zu deklarieren.
Bei einer Bereitstellung kann ich eine einfache Kustomization-Ressource verwenden, um Bildelemente zu ersetzen, z. B.:
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
und bei jedem neuen Build ändere ich einfach die Datei mit
kustomize edit set image my/image=my/image:updated-tag
Mit Helm kann ich den gleichen Trick nicht verwenden, da ich das Tag in einem HelmRelease aktualisieren muss spec.values.image
und Kustomize dafür anscheinend keine Abkürzung hat. Die Option besteht also darin, einen Patch zu erstellen:
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
indem Sie einen ähnlichen Befehl verwenden:
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\"}]"
(achten Sie nicht zu sehr auf die zitierten Zitate, haben Sie Geduld mit mir)
Das Problem tritt auf, wenn dieser Befehl mehrmals ausgeführt wird. Während der kustomize edit set image
den vorherigen Wert überschreibt, wird im letzteren Fall ein neuer patch
mit dem an die Liste angehängt 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
Wie kann ich diese Wiederholung und die zunehmende Störgeräuschbildung in meinen Dateien vermeiden?
Danke!
Antwort1
habe einen saubereren Weg gefunden, es zu tun mitja.
yq -ei '.spec.values.image.tag = "YOURTAG"' yourfile.yaml