현재 방법은 노이즈를 생성하므로 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
이전 값을 덮어쓰는 동안 , 이 나중의 경우 새 값 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