본문으로 건너뛰기
버전: 1.0.3

9.1. Helm 차트

어떨 때 쓰는가

  • 여러 자원으로 이루어진 애플리케이션을 한 번에 설치할 때
  • 같은 애플리케이션을 환경별로 값만 바꿔 배포할 때
  • 설정을 바꿨다가 문제가 생겨 이전 상태로 되돌릴 때

여러 자원을 함께 배포하는 문제

애플리케이션 하나를 배포하려면 자원이 여럿 필요합니다.

자원하는 일
Deployment애플리케이션을 띄웁니다
Service고정 이름을 줍니다
Ingress외부 접속을 연결합니다
ConfigMap설정을 담습니다
Secret비밀번호를 담습니다
PVC저장 공간을 요청합니다

이것들을 따로 만들면 문제가 생깁니다.

  • 순서를 지켜야 합니다 (PVC 가 있어야 Deployment 가 뜹니다)
  • 하나라도 빠뜨리면 동작하지 않습니다
  • 지울 때도 하나씩 찾아 지워야 합니다
  • 환경마다 값이 다른 곳을 일일이 고쳐야 합니다

Helm 이란

여러 자원을 하나로 묶어 설치·변경·삭제하는 도구 입니다. Kubernetes 의 패키지 관리자에 해당합니다.

Helm 이 해결하는 것은 이렇습니다.

문제Helm 의 해결
자원이 여럿하나의 명령으로 함께 설치·삭제
환경마다 값이 다름값만 바꿔 같은 차트를 재사용
되돌리기가 어려움개정 이력을 남겨 되돌립니다
무엇이 설치됐는지 모름릴리즈 단위로 관리합니다

차트 · 릴리즈 · 개정

세 낱말을 구분해야 합니다.

낱말비유
차트(Chart)배포 정의 꾸러미. 자원 틀과 기본값이 들어 있습니다설치 파일
릴리즈(Release)차트를 설치한 결과 하나설치된 프로그램
개정(Revision)릴리즈를 고칠 때마다 올라가는 번호변경 이력

같은 차트로 이름만 다르게 여러 번 설치할 수 있습니다. 예를 들어 데이터베이스 차트 하나로 db-devdb-prod 두 릴리즈를 만들 수 있습니다.

차트에는 틀(템플릿)과 기본값 이 들어 있습니다. 설치할 때 값을 넘기면 그 값이 틀에 채워져 실제 자원 정의가 만들어집니다.

차트에서 자원이 만들어지는 흐름

릴리즈 목록

Helm 차트 > 릴리스 로 들어갑니다.

Helm 릴리즈 목록
설명
이름릴리즈 이름
네임스페이스설치된 네임스페이스
차트차트 이름과 버전
앱 버전애플리케이션 버전
상태설치 결과
개정몇 번째 변경인지

차트 버전과 앱 버전은 다릅니다.

버전무엇의 버전인가
차트 버전배포 정의의 버전. 틀만 고쳐도 올라갑니다
앱 버전그 안에 담긴 애플리케이션의 버전

차트 버전이 올라갔다고 애플리케이션이 새 버전이 되는 것은 아닙니다.

릴리즈 상태

상태다음에 할 일
deployed정상 설치됨없음
failed설치·변경 실패상세의 매니페스트와 자원 상태를 확인합니다
pending-install설치 진행 중오래 머물면 자원 상태를 확인합니다
pending-upgrade변경 진행 중위와 같습니다
superseded더 새 개정으로 대체됨정상입니다. 이력에 남는 값입니다

pending-* 에서 오래 머무는 것은 대개 파드가 뜨지 못하는 경우입니다. 릴리즈가 만든 파드를 찾아 이벤트를 확인하십시오(3.1 장).

릴리즈 상세

이름을 누르면 상세 화면이 열립니다.

내용언제 봅니다
설치할 때 지정한 설정값어떤 값으로 설치했는지 확인할 때
매니페스트실제로 만들어진 자원 정의값이 어떻게 반영됐는지 확인할 때
자원이 릴리즈가 만든 자원 목록영향 범위를 볼 때
노트차트가 제공하는 안내문설치 후 접속 방법 등
이력개정별 변경 기록되돌릴 개정을 고를 때

값과 매니페스트의 차이

이 둘을 구분하면 문제를 빨리 찾습니다.

보이는 것
내가 넣은 값만
매니페스트차트 기본값까지 합쳐진 최종 결과

"값을 넣었는데 반영되지 않았다" 는 경우 매니페스트를 보십시오. 세 가지 중 하나입니다.

원인확인 방법
값 이름이 틀림매니페스트에 반영되지 않았습니다
차트가 그 값을 쓰지 않음값 탭에는 있는데 매니페스트에 없습니다
다른 값이 덮어씀매니페스트에 다른 값이 들어가 있습니다

저장소 관리

Helm 차트 > 저장소 에서 차트를 받아 올 곳을 관리합니다.

Helm 저장소 목록
항목설명
이름저장소 별칭
주소저장소 URL

폐쇄망에서는 내부 저장소(ChartMuseum)만 등록되어 있습니다. 외부 저장소는 연결되지 않습니다. 새 차트가 필요하면 운영 담당자가 내부 저장소에 올려야 합니다.

설치와 업그레이드

  1. 저장소에서 차트를 고릅니다.
  2. 릴리즈 이름과 설치할 네임스페이스를 정합니다.
  3. 설정값을 확인하고 필요한 항목을 고칩니다.
  4. 설치를 실행합니다.

이미 설치된 릴리즈의 설정을 바꾸려면 상세 화면에서 업그레이드를 실행합니다. 개정 번호가 하나 올라가고 이전 개정은 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 은 자기가 만든 상태를 기억하고 있어서, 다음 업그레이드 때 그 변경이 사라집니다. 값을 고쳐 업그레이드하는 방식으로만 바꾸십시오.