如何編輯 Kustomization 檔案中的補丁項目以使用 Helm 執行 gitop(並避免補丁堆積)

如何編輯 Kustomization 檔案中的補丁項目以使用 Helm 執行 gitop(並避免補丁堆積)

我正在尋找一種更好的方法來使用 GitOps 更新 HelmRelease 中定義的 docker 映像,因為我目前的方法會產生雜訊。

將 Helm 引入我使用 GitOps 管理的叢集後,我發現如何正確聲明要在叢集中使用的新 docker 映像建置存在一些困難。

在部署中,我可以使用簡單的 Kustomization 資源來取代映像元素,例如:

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,我無法使用相同的技巧,因為我需要更新 HelmRelease 中的標籤spec.values.image,而 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

yq -ei '.spec.values.image.tag = "YOURTAG"' yourfile.yaml

相關內容