Helm 배포와 롤백 시나리오 · 값과 의존성 · 실습
값이 합쳐지는 순서를 렌더로 확인한다
목표
값이 합쳐지는 순서를 외우는 대신 렌더해서 확인하는 습관을 만듭니다. 로컬
서브차트를 의존성으로 걸고, 값 파일 두 장과 --set 을 겹쳐 누가 이기는지 보고,
스키마로 잘못된 값을 배포 전에 막는 데까지 갑니다.
왜 중요한가
운영 배포는 값 파일이 보통 두세 겹입니다. 차트 기본값, 환경별 값, 그리고 CI 가
주입하는 이미지 태그입니다. 어느 것이 이기는지 헷갈리면 스테이징 값이 프로덕션에
새어 들어갑니다. 여기에 함정이 둘 더 있습니다. 맵은 병합되지만 **리스트는 통째로
교체된다는 것, 그리고 서브차트에 주는 값은 서브차트 이름을 키로 감싸야**
전달된다는 것입니다.
의존성도 같은 종류의 문제를 냅니다. Chart.yaml 에 적는 버전은 범위이고, 실제로
무엇이 잡혔는지는 Chart.lock 에 적힙니다. 이 파일을 커밋하지 않으면 사람마다
다른 의존성을 받고, 그때부터 "내 컴퓨터에서는 되는데" 가 시작됩니다.
환경
인터넷이 없으므로 차트 저장소를 받아올 수 없습니다. 대신 서브차트를 옆
디렉터리에 만들고 file:// 로 가리킵니다. helm dependency update 는 이 방식으로
정상 동작합니다. 작업 디렉터리는 /root/hs-val 이고 산출물은 /root/hs-val/out
아래에 둡니다. 채점은 파일을 글자로 보지 않고 helm template 을 직접 돌려
결과를 읽습니다.
단계
1. 서브차트 cache 와 부모 platform 을 만들고 file:// 의존성을 걸어 잠급니다.
2. platform/values.yaml 에서 cache 키로 서브차트에 값을 내려보냅니다.
3. global.env 를 두고 양쪽 차트가 함께 읽는 것을 확인합니다.
4. values/base.yaml 과 values/prod.yaml 을 겹쳐 렌더해 /root/hs-val/out/render.yaml 에 저장합니다.
5. 리스트가 교체된다는 것을 확인하고 /root/hs-val/out/list-note.txt 에 적습니다.
6. cache.enabled: false 로 서브차트를 통째로 끕니다.
7. values.schema.json 으로 범위를 넘는 값을 막고 거절 출력을 저장합니다.
8. val-lab 에 설치하고 helm get values 결과를 저장합니다.
참고
- 서브차트 템플릿을 고쳤으면
helm dependency update를 다시 돌리세요. --set의 쉼표는 키 구분자입니다. 값 안에 쉼표가 필요하면 백슬래시로- 흔한 실수는 서브차트 값을 최상위에 적는 것입니다. 그러면 부모 차트의 값이
- 스키마에
required를 넣을 때는 값 파일 없이 렌더하는 경우까지 생각하세요.
charts/ 안의 꾸러미는 자동으로 갱신되지 않습니다.
이스케이프하거나 임시 값 파일에 담으세요.
될 뿐이고 helm 은 아무 경고도 하지 않습니다.
단계 8개
- 로컬 서브차트를 의존성으로 걸고 잠근다
- 서브차트에 값을 내려보낸다
- global 아래 값만 모든 차트가 함께 본다
- 두 값 파일과 --set 을 겹쳐 누가 이기는지 본다
- 리스트는 병합되지 않고 통째로 바뀐다
- 조건이 거짓이면 서브차트는 렌더되지 않는다
- 스키마로 잘못된 값을 배포 전에 막는다
- 배포된 릴리스에 실제로 들어간 값을 확인한다