헬름이 제공하는 기능헬름 통해 애플리케이션 설치개념헬름으로 애플리케이션 패키징하기템플릿 변수로 YAML 파일 작성 & 애플리케이션 여러벌 배치헬름 차트 파일 구조헬름 차트를 리포지토리에 공유배포를 위한 단계리포지토리에서 설치 후 설정값 이용하여 차트 설치차트 간 의존관계 모델링하기헬름으로 설치한 릴리스의 업그레이드와 롤백헬름은 어떤 상황에 적합한가
헬름이 제공하는 기능
헬름 통해 애플리케이션 설치
- 기능
- 명령행 도구의 형태로 리포지토리 서버와 상호작용하며, 애플리케이션 패키지를 찾아 내려받고 쿠버네티스 클러스터에 이를 설치하고 관리하는 기능
- 쿠버네티스에서 동작하도록 만들어진 애플리케이션을 위한 패키지 관리자
- 헬름에서 사용되는 패키징 포맷은 쿠버네티스 YAML 파일을 확장한 것으로,
헬름 패키지
는 말하자면 여러 개의 쿠버네티스 매니페스트를 모아 놓은 것과 같음
개념
차트
: 애플리케이션의 패키지. 로컬 컴퓨터에서 만들어져 로컬 컴퓨터에 설치될 수도 있고리포지토리
로 배포될 수도 있다.
릴리즈
: 설치한차트
. 릴리스에는 이름을 붙일 수 있어 릴리스 이름을 달리해 가며 하나의 클러스터에 같은 차트를 여러 벌 설치 가능함
- 차트에는 쿠버네티스 YAML 매니페스트가 있고 이 정의에는 파라미터 값이 있어 사용자가 동일한 차트를 레플리카 수나 로그 수준 등 설정을 바꾸어 가며 설치할 수 있음

- 공개 리포지토리의 공개 차트를 설치하여, 레이블이 쿠버네티스 설정의 베스트 프랙티스 가이드를 따라 한것이라 좀 길어짐
헬름으로 애플리케이션 패키징하기
템플릿 변수로 YAML 파일 작성 & 애플리케이션 여러벌 배치
.Release.Name
: Release 객체에서 릴리스 이름. Release 객체는 install 또는 upgrade 명령을 실행할 때 관련 정보를 담아 생성되는 객체
.Values.kiamolChapter
: Values 객체는 차트에 포함된 기본값에 사용자가 지정한 값을 오버라이드한 정보를 담아 생성되는 객체
quote
함수는 삽입된 값에 앞뒤로 따옴표가 없을 때 따옴표를 붙여 주는 역할을 함
- 같은 YAML 파일로 여러 번 애플리케이션을 배치하면 kubectl로는 리소스 이름이 같아서 업데이트만 되지만 헬름으로 하면 여러 벌의 애플리케이션 실행이 가능함
lint
명령은 로컬에서 작업중인 차트에서만 사용할 수 있음
install
명령은 로컬에서 작업 중인 차트와 리포지터리에서 내려받은 차트 모두에서 사용 가능- 로컬에 위치한 차트는 디렉터리여도 되고 압축파일이여도 됨
- 헬름과 kubectl apply 는 호환될 수 없다. 왜냐면 헬름 사용시, yaml 파일에 템플릿 변수 때문에 유효한 YAML 파일이 될 수 없다.
헬름 차트 파일 구조
- 최상위 디렉터리 이름이 차트 이름
- 이 디렉터리에는 최소한 아래 세가지 요소가 있어야 함
- chart.yaml : 차트의 이름이나 버전 등 메타데이터를 기록한 파일
- values.yaml : 파라미터 값의 기본값을 기록한 파일
- templates 디렉터리 : 템플릿 변수가 포함된 쿠버네티스 매니페스트 파일을 담은 디렉터리
헬름 차트를 리포지토리에 공유
배포를 위한 단계
- 차트를 zip 파일로 압축 후,
- 서버에 압축 파일 업로드,
- 리포지터리 인덱스에 새로운 차트 정보 추가
리포지토리에서 설치 후 설정값 이용하여 차트 설치
- 버전을 명시하지 않고 helm install 을 하는건 좋지 않음. 버전 명시하기. 명시하지 않으면 최신 버전이 설치됨
차트 간 의존관계 모델링하기
- 원주율 계산 애플리케이션의 차트 정의. 위 애플리케이션은 두 개의 의존 차트가 있음
- 상위 차트가 하위 차트(프록시와 vweb)을 필요로 하는 관계이며, 하위 차트는 독립된 차트여야 함
- 하위 차트의 정의는 최대한 일반적으로 활용할 수 있도록 템플릿 변수를 사용해야 함
- 또한 특정한 애플리케이션에만 쓸모가 있는 요소라면 해당 요소는 하위 차트가 아니라 애플리케이션 차트에 직접 포함되는 것이 맞음
proxy 차트를 의존 차트로 사용하려면 상위 차트의 정의에서 해당 차트를 의존 차트 목록에 추가하여 하위 차트로 삼아야 한다. 그다음 하위 차트의 설정값을 상위 차트의 정의에서 지정. 이때 하위 차트의 설정값 참조 시, 설정값 이름앞에 차트 이름 붙이기.
<차트이름>.<설정값>
→ proxy.upstreamToProxy차트를 설치하거나 패키징하려면 자신이 의존하는 하위 차트를 사용할 수 있어야 함
- 로컬 디렉터리를 압축하거나, 리포지터리에서 내려받은 압축 파일을 차트 디렉터리에 넣으면 됨

헬름으로 설치한 릴리스의 업그레이드와 롤백
—reuse-values
: 현재 릴리스에 사용된 설정값을 그대로 새 릴리스에도 사용하라- 그런데 2.0.0 에는 원래 릴리스에 없었던 설정값이 있음
—atomic
: 리소스 하나에서 문제가 생기면 다른 모든 리소스들도 다 롤백을 진행해줌. kubectl 에서는 지원하지 않는 기능
헬름은 어떤 상황에 적합한가
- 애플리케이션의 매니페스트에 한번 템플릿 변수를 추가하고 나면, 이전으로 돌아가기가 어렵다. 헬름을 사용하기로 했다면 모두가 함께 사용해야 하고, 억지로 혼자 남아 있으려면 매니페스트를 여러 벌 유지해야 함
- 헬름이 적합한지 아닌지는 개발해서 패키징하는 애플리케이션이 어떤 것인지
- 개발팀이 저마다 담당 마이크로서비스를 다루고 네이티브 또는 도커나 도커 컴포즈 환경에서 애플리케이션을 실행하는 경우, 헬름 도입하면 수백개 YAML 파일을 훨씬 적은 수의 차트로 합쳐 중앙화된 관리 가능
- 완전 자동화된 지속적 배치 절차를 갖추었는지
- CICD 는 헬름을 도입하면 훨씬 간편해짐. 환경별 설정값 파일을 사용하여 테스트 환경에서 동일한 버전의 차트를 테스트할 수 있고, 애플리케이션을 배치할 때마다 검증을 위한 잡을 둘 수도 있음