Helm은 Kubernetes 애플리케이션을 chart라는 묶음으로 배포하고 관리하는 도구다. chart에는 자원 선언 템플릿과 기본 설정값, 패키지 정보가 들어가며, 이를 특정 이름으로 설치한 결과를 릴리스라고 부른다. 동일한 chart를 설정값을 달리해 여러 번 설치할 수 있다. Chart 문서가 파일 구조와 패키지 개념을 설명한다.
Chart·values·릴리스
Chart.yaml은 chart의 이름과 버전 등 메타데이터를 담고 values.yaml은 기본 설정을 제공한다. templates 안의 선언은 설정값과 템플릿 함수를 이용해 실제 Kubernetes YAML로 렌더링된다. chart 버전은 패키지 버전이며, 그 안에서 실행하는 애플리케이션 이미지 버전과 항상 같지는 않다.
환경마다 같은 템플릿을 복제하기보다 values 파일을 달리해 복제본 수와 자원 요구량을 조정할 수 있다. 다만 설정 키의 의미는 chart 작성자가 정한 계약이다. 이름이 같은 옵션도 다른 chart에서 다르게 동작하므로 제공된 values와 문서를 확인해야 한다.
장점과 한계
여러 Kubernetes 자원을 하나의 배포 단위로 묶고 재사용할 수 있으며, 널리 쓰이는 애플리케이션을 직접 모두 작성하지 않고 도입할 수 있다. 설정과 chart 버전을 함께 고정하면 변경 검토와 재현에 도움이 된다. 반면 복잡한 템플릿과 종속 chart는 최종 YAML을 예상하기 어렵게 만들 수 있다.
Helm의 롤백은 데이터베이스 내부 데이터를 과거 시점으로 되돌리는 기능이 아니다. chart 업데이트가 CRD·스토리지·스키마에 미치는 영향은 별도로 검토한다. 설치 성공도 애플리케이션의 업무 처리 성공을 보장하지 않으므로 실제 준비 상태와 기능을 확인해야 한다.
독서실 예약 chart 확인 예시
검토한 로컬 chart 디렉터리 reading-room-chart가 있고 replicas라는 값을 사용하는 템플릿을 포함한다고 가정한다. 다음 명령은 파일을 검사하고 로컬에서 결과를 출력한다. 클러스터에 릴리스를 설치하거나 업데이트하지 않는다.
helm lint ./reading-room-chart
helm template reading-room ./reading-room-chart --namespace reading-room --set replicas=2출력에서 Deployment의 복제본 수가 2인지, Service 선택자와 Pod 레이블이 일치하는지 확인한다. replicas 키를 템플릿이 읽지 않는다면 값을 줘도 원하는 변화가 생기지 않는다. 따라서 명령이 정상 종료됐다는 사실보다 생성된 자원 내용이 의도와 맞는지가 중요하다.
로컬 template 렌더링은 서버의 실제 API 지원과 입장 정책까지 검증하지 않는다. helm template 참조도 서버 측 검증이 수행되지 않는 범위를 명시한다. Helm 주요 버전과 chart의 요구 조건을 맞추고, 운영 적용 전 대상 클러스터에서 별도 검증 단계를 둔다.
자주 생기는 오해
일회성 명령줄 설정만 남기고 values 파일을 보관하지 않으면 다음 업데이트에서 의도를 복원하기 어렵다. 비밀번호를 명령 인수나 일반 Git 파일에 넣는 실수도 피한다. 렌더링된 출력에는 Secret 내용이 나타날 수 있으므로 검토 결과를 공유할 때 필요한 부분만 공개한다.