Helm으로 gitops를 수행하고 패치가 쌓이지 않도록 Kustomization 파일에서 패치 항목을 편집하는 방법

Helm으로 gitops를 수행하고 패치가 쌓이지 않도록 Kustomization 파일에서 패치 항목을 편집하는 방법

현재 방법은 노이즈를 생성하므로 GitOps를 사용하여 HelmRelease에 정의된 도커 이미지를 업데이트하는 더 나은 방법을 찾고 있습니다.

GitOps로 관리 중인 클러스터에 Helm을 도입한 후 클러스터에서 사용할 새 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이전 값을 덮어쓰는 동안 , 이 나중의 경우 새 값 patchmore-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

관련 정보