helm에서 하나의 리소스 선언으로 여러 리소스 만들기
helm을 사용하여 ConfigMap을 배포하려고 할 때, 전달한 변수의 값에 따라 동일한 리소스를 여러 개 만들고 싶은 케이스가 있다. 예를 들면여러 네임스페이스에 걸쳐서 도커 이미지를 받을 수 있는 시크릿을 배포하려고 할 때가 그렇다. 시크릿의 내용은 모두 동일하지만 리소스의 metadata.namespace
만 달라지는 경우를 말한다.
secret:
dockerConfigJson: ABCD...
namespaces:
- service
- service-test
- service-qa
이런 형태의 values.yaml 있다면 이를 다음과 같은 형태의 차트로 작성하여 여러 네임스페이스에 배포할 수 있다.
{{- $top := . -}}
{{- range .Values.secret.namespaces }}
---
apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
name: private-registry-secret
namespace: {{ . }}
data:
.dockerconfigjson: {{ $top.Values.secret.dockerConfigJson }}
{{- end }}
루프야 당연한 거고 여기서 중요한 건 ---
를 통해 매 루프마다 yaml의 끝을 알려야 한다는 것이다.