9.1. Helm 차트
어떨 때 쓰는가
- 여러 자원으로 이루어진 애플리케이션을 한 번에 설치할 때
- 같은 애플리케이션을 환경별로 값만 바꿔 배포할 때
- 설정을 바꿨다가 문제가 생겨 이전 상태로 되돌릴 때
여러 자원을 함께 배포하는 문제
애플리케이션 하나를 배포하려면 자원이 여럿 필요합니다.
| 자원 | 하는 일 |
|---|---|
| Deployment | 애플리케이션을 띄웁니다 |
| Service | 고정 이름을 줍니다 |
| Ingress | 외부 접속을 연결합니다 |
| ConfigMap | 설정을 담습니다 |
| Secret | 비밀번호를 담습니다 |
| PVC | 저장 공간을 요청합니다 |
이것들을 따로 만들면 문제가 생깁니다.
- 순서를 지켜야 합니다 (PVC 가 있어야 Deployment 가 뜹니다)
- 하나라도 빠뜨리면 동작하지 않습니다
- 지울 때도 하나씩 찾아 지워야 합니다
- 환경마다 값이 다른 곳을 일일이 고쳐야 합니다
Helm 이란
여러 자원을 하나로 묶어 설치·변경·삭제하는 도구 입니다. Kubernetes 의 패키지 관리자에 해당합니다.
Helm 이 해결하는 것은 이렇습니다.
| 문제 | Helm 의 해결 |
|---|---|
| 자원이 여럿 | 하나의 명령으로 함께 설치·삭제 |
| 환경마다 값이 다름 | 값만 바꿔 같은 차트를 재사용 |
| 되돌리기가 어려움 | 개정 이력을 남겨 되돌립니다 |
| 무엇이 설치됐는지 모름 | 릴리즈 단위로 관리합니다 |
차트 · 릴리즈 · 개정
세 낱말을 구분해야 합니다.
| 낱말 | 뜻 | 비유 |
|---|---|---|
| 차트(Chart) | 배포 정의 꾸러미. 자원 틀과 기본값이 들어 있습니다 | 설치 파일 |
| 릴리즈(Release) | 차트를 설치한 결과 하나 | 설치된 프로그램 |
| 개정(Revision) | 릴리즈를 고칠 때마다 올라가는 번호 | 변경 이력 |
같은 차트로 이름만 다르게 여러 번 설치할 수 있습니다. 예를 들어 데이터베이스 차트 하나로
db-dev 와 db-prod 두 릴리즈를 만들 수 있습니다.
차트에는 틀(템플릿)과 기본값 이 들어 있습니다. 설치할 때 값을 넘기면 그 값이 틀에 채워져 실제 자원 정의가 만들어집니다.
릴리즈 목록
Helm 차트 > 릴리스 로 들어갑니다.

| 열 | 설명 |
|---|---|
| 이름 | 릴리즈 이름 |
| 네임스페이스 | 설치된 네임스페이스 |
| 차트 | 차트 이름과 버전 |
| 앱 버전 | 애플리케이션 버전 |
| 상태 | 설치 결과 |
| 개정 | 몇 번째 변경인지 |
차트 버전과 앱 버전은 다릅니다.
| 버전 | 무엇의 버전인가 |
|---|---|
| 차트 버전 | 배포 정의의 버전. 틀만 고쳐도 올라갑니다 |
| 앱 버전 | 그 안에 담긴 애플리케이션의 버전 |
차트 버전이 올라갔다고 애플리케이션이 새 버전이 되는 것은 아닙니다.
릴리즈 상태
| 상태 | 뜻 | 다음에 할 일 |
|---|---|---|
| deployed | 정상 설치됨 | 없음 |
| failed | 설치·변경 실패 | 상세의 매니페스트와 자원 상태를 확인합니다 |
| pending-install | 설치 진행 중 | 오래 머물면 자원 상태를 확인합니다 |
| pending-upgrade | 변경 진행 중 | 위와 같습니다 |
| superseded | 더 새 개정으로 대체됨 | 정상입니다. 이력에 남는 값입니다 |
pending-* 에서 오래 머무는 것은 대개 파 드가 뜨지 못하는 경우입니다. 릴리즈가 만든 파드를
찾아 이벤트를 확인하십시오(3.1 장).
릴리즈 상세
이름을 누르면 상세 화면이 열립니다.
| 탭 | 내용 | 언제 봅니다 |
|---|---|---|
| 값 | 설치할 때 지정한 설정값 | 어떤 값으로 설치했는지 확인할 때 |
| 매니페스트 | 실제로 만들어진 자원 정의 | 값이 어떻게 반영됐는지 확인할 때 |
| 자원 | 이 릴리즈가 만든 자원 목록 | 영향 범위를 볼 때 |
| 노트 | 차트가 제공하는 안내문 | 설치 후 접속 방법 등 |
| 이력 | 개정별 변경 기록 | 되돌릴 개정을 고를 때 |
값과 매니페스트의 차이
이 둘을 구분하면 문제를 빨리 찾습니다.
| 탭 | 보이는 것 |
|---|---|
| 값 | 내가 넣은 값만 |
| 매니페스트 | 차트 기본값까지 합쳐진 최종 결과 |
"값을 넣었는데 반영되지 않았다" 는 경우 매니페스트를 보십시오. 세 가지 중 하나입니다.
| 원인 | 확인 방법 |
|---|---|
| 값 이름이 틀림 | 매니페스트에 반영되지 않았습니다 |
| 차트가 그 값을 쓰지 않음 | 값 탭에는 있는데 매니페스트에 없습니다 |
| 다른 값이 덮어씀 | 매니페스트에 다른 값이 들어가 있습니다 |
저장소 관리
Helm 차트 > 저장소 에서 차트를 받아 올 곳을 관리합니다.

| 항목 | 설명 |
|---|---|
| 이름 | 저장소 별칭 |
| 주소 | 저장소 URL |
폐쇄망에서는 내부 저장소(ChartMuseum)만 등록되어 있습니다. 외부 저장소는 연결되지 않습니다. 새 차트가 필요하면 운영 담당자가 내부 저장소에 올려야 합니다.
설치와 업그레이드
- 저장소에서 차트를 고릅니다.
- 릴리즈 이름과 설치할 네임스페이스를 정합니다.
- 설정값을 확인하고 필요한 항목을 고칩니다.
- 설치를 실행합니다.
이미 설치된 릴리즈의 설정을 바꾸려면 상세 화면에서 업그레이드를 실행합니다. 개정 번호가
하나 올라가고 이전 개정은 superseded 가 됩니다.
릴리즈 이름은 네임스페이스 안에서 겹치면 안 됩니다. 같은 이름으로 다시 설치하려면 먼저 지워야 합니다.
되돌리기
이력 탭에서 개정을 골라 되돌립니다.
되돌려도 개정 번호는 앞으로 나아갑니다. 개정 3에서 개정 2로 되돌리면 개정 4가 만들어지고 내용은 개정 2와 같아집니다. Deployment 롤백과 같은 방식입니다(3.2 장).
되돌리기는 차트와 값 을 되돌립니다.
| 되돌아가는 것 | 되돌아가지 않는 것 |
|---|---|
| 자원 정의 (Deployment, Service 등) | 데이터베이스 안의 데이터 |
| 설정값 | PVC 안의 파일 |
| 컨테이너 이미지 태그 | 외부 시스템의 상태 |
데이터베이스 스키마가 바뀐 업그레이드는 되돌려도 문제가 남을 수 있습니다. 옛 버전이 새 형식의 데이터를 읽지 못하기 때문입니다. 업그레이드 전에 차트의 안내문(노트)에 되돌리기 제약이 적혀 있는지 확인하십시오.
삭제할 때 주의할 것
릴리즈를 지우면 그 릴리즈가 만든 자원이 함께 지워집니다. 다만 다음은 예외입니다.
| 자원 | 남는가 |
|---|---|
| PVC | 차트 설정에 따라 남기도 합니다 |
| 수동으로 만든 자원 | 남습니다 |
| CRD | 대부분 남습니다 (8.2 장) |
데이터가 필요 없어진 것이 확실할 때만 지우십시오. 지우기 전에 상세의 자원 탭에서 무엇이 함께 사라지는지 확인하고, PVC 는 스토리지 화면에서 따로 정리하십시오(6.1 장).
Helm 과 Console 배포의 차이
같은 애플리케이션을 배포하는 방법이 여럿 있습니다.
| 방법 | 적합한 경우 |
|---|---|
| Console 에서 자원 직접 생성 | 자원이 한둘이고 단순할 때 |
| 빌드 화면의 배포 버튼 | 소스에서 빌드한 것을 바로 배포할 때 (4.2 장) |
| Helm | 자원이 여럿이고 되돌리기·환경별 값 관리가 필요할 때 |
| Jenkins 파이프라인 | 승인 절차와 이력이 필요할 때 (4.4 장) |
Helm 으로 설치한 릴리즈의 자원을 Console 에서 직접 고치지 마십시오. Helm 은 자기가 만든 상태를 기억하고 있어서, 다음 업그레이드 때 그 변경이 사라집니다. 값을 고쳐 업그레이드하는 방식으로만 바꾸십시 오.