So bearbeiten Sie Patch-Elemente in einer Kustomization-Datei, um Gitops mit Helm auszuführen (und vermeiden, dass sich Patches anhäufen)

So bearbeiten Sie Patch-Elemente in einer Kustomization-Datei, um Gitops mit Helm auszuführen (und vermeiden, dass sich Patches anhäufen)

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.imageund 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 imageden vorherigen Wert überschreibt, wird im letzteren Fall ein neuer patchmit 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

verwandte Informationen