LabHub

Helm 배포와 롤백 시나리오 · 값과 의존성 · 이론

values 는 어떤 순서로 합쳐지나

LabHub 에서 이어서 보기

한 줄 요약

-f 는 여러 번 쓸 수 있고 뒤에 온 것이 이긴다. --set 은 모든 -f 를 이긴다. 이 순서를 모르면 "분명히 값을 넣었는데 반영이 안 된다" 로 하루를 태운다.

왜 이게 필요했나

운영 배포는 values 파일이 보통 두세 겹이다. 차트 기본값, 환경별 값, 그리고 CI 가 주입하는 이미지 태그. 어느 것이 이기는지 헷갈리면 스테이징 값이 프로덕션에 새어 들어간다.

우선순위는 낮은 것부터 이렇다.

1. 차트의 values.yaml
2. 부모 차트가 서브차트에 준 값
3. -f a.yaml (먼저 온 것)
4. -f b.yaml (나중에 온 것 — a 를 덮는다)
5. --set / --set-string / --set-file

어떻게 동작하나

합쳐진 결과를 추측하지 말고 확인한다.

helm template demo ./chart -f prod.yaml --set image.tag=abc123 \  --show-only templates/deployment.yamlhelm get values demo            # 배포된 릴리스에 실제로 들어간 값helm get values demo --all      # 기본값까지 합친 전체

helm get values 는 사고 조사에서 가장 먼저 치는 명령이다. "무슨 값으로 떴는가" 에 대한 유일한 사실이다.

흔한 착각

맵은 병합되지만 배열은 통째로 교체된다. -f 두 개에 각각 리스트가 있으면 합쳐지지 않고 뒤엣것이 앞엣것을 통째로 덮는다. 그래서 extraEnv 같은 리스트를 환경별로 나눠 두면 하나만 남는다. 리스트를 합치고 싶으면 맵으로 설계하는 것이 정석이다.

--set 의 쉼표와 점. --set a.b=1,a.c=2 는 두 값이다. 값 안에 쉼표가 있으면 \, 로 이스케이프해야 한다. 이걸 놓쳐서 이미지 태그가 잘리는 사고가 흔하다. 값이 복잡하면 --set-string 이나 임시 values 파일을 쓰는 게 안전하다.

실무에서 진짜 중요한 것

서브차트의 값은 부모 차트에서 서브차트 이름을 키로 지정한다.

# 부모 차트의 values.yamlpostgresql:  auth:    database: labhub

global: 아래 둔 값만 모든 서브차트가 함께 본다. 이 구분을 모르면 "서브차트가 값을 안 읽는다" 로 헤맨다.