helm template 의 변수 치환 개념helm 차트 디렉토리/파일 구성 설명에서 "--set <key>=<value>" 또는 value.yaml 파일로 치환될 변수를 지정해 줄 수 있다고 하였다. 그러나 "--set" 방식으로 모든 파라미터를 넘기기에는 그 갯수가 너무 많고, value.yaml 에만 지정하여 사용하면 환경별로 다른 변수들을 관리하기 힘들다는 단점이 있다. 따라서 환경별로 다른 변수들만 지정해놓은 value-<환경명>.yaml 같은 파일을 만들고, 이를 helm 배포 커맨드에서 지정하여 사용하는 방법을 소개한다.

 

1. helm 패키지 디렉토리 구성

my-chart/
├── .helmignore 
├── Chart.yaml
├── values.yaml
├── values-dev.yaml  // 추가
├── values-qa.yaml   // 추가
├── values-prod.yaml // 추가
├── charts/
└── templates/
    ├── NOTES.txt
    ├── _helpers.tpl
    ├── deployment.yaml
    ├── hpa.yaml
    ├── ingress.yaml
    ├── service.yaml
    ├── serviceaccount.yaml
    └── tests/

 

위와 같이 패키지 루트에 values.yaml 의 형제로 values-<환경명>.yaml 파일을 생성해준다. 해당 파일에는 환경별로 다르게 지정해주고 싶은 변수들을 아래 예시처럼 선언해준다.(예시: values-dev.yaml)

replicaCount: 1
resources:
  limits:
    cpu: 200m
    memory: 200Mi
  requests:
    cpu: 100m
    memory: 100Mi

 

2. 배포 커맨드

helm upgrade <배포명> <helm 패키지 경로> -f <환경별 values.yaml 경로> --install

위와 같은 형식으로 "-f" 옵션을 통해 배포할 환경의 values-<환경명>.yaml 경로를 지정해주면 실제 기본 values.yaml 내용 위에 해당 내용이 오버레이된다. 즉, 기본으로 values.yaml 내용을 사용하되, values-<환경명>.yaml 파일에 지정된 변수가 override 된다. 만약 위의 예시에서처럼 values-dev.yaml 파일에 replicaCount: 1 이 지정되어있고, 기본 values.yaml 에는 replicaCount: 2 가 지정되어있다면, 최종적으로 replicaCount 는 1이 된다.

 

참고로, helm install 은 헬름 패키지를 클러스터에 처음 배포할 때에만 사용할 수 있는 명령어이고(이미 동일한 이름의 릴리즈가 있으면 에러 발생), helm upgrade 는 이미 클러스터에 배포되어있는 헬름 패키지 릴리즈의 내용이나 버전을 수정배포할 때 쓰인다. 하지만, upgrade 명령어를 사용하면서 --install 옵션을 추가하면 릴리즈가 없을때는 install 과 동일하게 동작하게 되어서 보통 helm install 을 따로 쓰기보다는 helm upgrade --install 형식으로 쓰인다.

 

3. --set 파라미터와 -f 파일 지정을 함께 썼을 때

위에서 말했듯 helm install 또는 helm upgrade 실행시에 "--set <key>=<value>" 형식으로 파라미터를 지정할 수 있다. 그렇다면 동일한 변수를 --set 으로도 지정하고, -f 로도 지정하면 어떻게 될까?

결론은 --set 파라미터가 최종적으로 override 하게 된다. 따라서 --set 과 함께 사용할때는 의도대로 변수가 오버라이드되는지 유의하여야 한다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,