helm은 k8s 패키지 매니저로, k8s 어플리케이션을 정의, 저장, 관리하는데 사용한다.
'패키지'는 helm 차트를 의미하며, 이는 k8s 리소스에 대한 설명이 포함된 yaml 매니페스트 파일들의 집합이다.
예를 들어 FE 앱 배포를 위해 Ingress, Service, Deployment 총 3개에 대한 yaml이 필요하다. 이 파일들을 매번 각각 작성하기 보다는 하나의 차트로 관리하여 손쉽게 재사용할 수 있다.
repo는 public과 private 2개의 종류가 존재한다.
hub는 repo들의 집합이며, 이때의 repo는 public repo만을 의미한다.
repo는 만들어진 차트들이 위치하는 공간이다.
$ helm repo add ${이름} ${repo 주소}
로컬 헬름 클라이언트에 저장소를 추가
$ helm repo update
저장소 업데이트
repo가 add되면 그 순간의 정보들이 로컬에 저장된다. 때문에 최신화를 위해서 지속적인 repo update가 필요하다.
$ helm repo list
추가된 저장소들을 확인
$ helm search hub ${키워드}
hub에서 키워드를 포함하는 차트를 검색 (= public repo 전체를 대상으로 키워드를 포함하는 차트를 검색)
키워드를 생략하면 public repo의 전체 차트를 노출한다.
$ helm search repo ${키워드}
$helm repo add를 사용해 로컬 헬름 클라이언트에 추가한 저장소에서 키워드의 차트를 검색
$ helm install ${사용자가 지정하는 릴리스 이름} ${repo 이름}/${차트 이름}
특정 레포의 특정 차트를 지정한 릴리스 이름으로 설치
helm의 차트 이름은 해당 repo 내에서 유니크해야 한다. 즉, 서로 다른 repo에서는 같은 이름의 차트가 존재할 수 있다.
$ helm install ${repo 이름}/${차트 이름} --generate-name
특정 레포의 특정 차트를 설치하는데, 이때 이름은 헬름이 생성해주는 것을 그대로 사용
$ helm status ${사용자가 지정한 릴리스 이름}
설치된 차트의 상태 확인
$ helm show values ${차트 이름}
차트의 기본 구성 옵션 확인 (차트 자체의 기본값 확인을 위한 명령어)
$ helm get values ${치트 이름}
배포된 helm release의 설정값 확인 (사용자가 배포 시점에 제공한 값들을 확인하기 위한 명령어)
$ helm list
배포된 모든 릴리스들을 확인
설치 작업시 구성 데이터 (보통 values.yaml 파일) 를 전달하는 방법에는 두가지가 있다.
--values (또는 -f)
override할 yaml 파일을 지정한다. (여러번 지정할 수 있지만 가장 마지막의 파일이 우선시된다.)
--set
명령줄 상에서 override 정보를 지정한다.
$ helm get values <release-name>으로 해당 릴리스에 대한--set설정값들을 조회할 수 있다.--set설정값들은$ helm upgrade를 실행할 때--reset-values를 명시하여 제거할 수 있다.
$ echo '{mariadbUser: user0, mariadbDatabase: user0db}' > config.yaml
$ helm install -f config.yaml stable/mariadb --generate-name
name: value
$ helm install my-practice repo/chart --set name=value
a: b
c: d
$ helm install my-practice repo/chart --set a=b,c=d
outer:
inner: value
$ helm install my-practice repo/chart --set outer.inner=value
name:
- a
- b
- c
$ helm install my-practice repo/chart --set name={a, b, c}
servers:
- port: 80
host: example
$ helm install my-practice repo/chart --set servers[0].port=80,servers[0].host=example
새로운 버전의 차트가 릴리스되었을 때, 또는 릴리스의 구성을 변경하고자 할 때, helm upgrade 명령어를 사용한다.
명령어의 형식은 $ helm install 과 동일하다.
helm의 핵심 기능 중 하나는 템플릿 내에서 변수를 사용하여 동적 매니페스트를 생성할 수 있다는 점이다.
helm 템플릿에서 사용할 수 있는 주요 변수와 객체에는 다음과 같은 것들이 존재한다.
Values
보통 values.yaml 파일에서 정의하거나, 설치 시 --set 플래그 또는 -f 플래그로 오버라이드한 정보들이다.
.Values객체를 통해 해당 값들에 대한 조회가 가능하다.
Release
이 객체는 설치에 대한 정보를 포함한다. 예를 들어
.Release.Name은 helm 차트의 이름을 반환하고,.Release.Namespace는 차트가 설치되는 쿠버네티스 네임스페이스를 반환한다.
Chart
차트에 대한 정보를 제공한다.
.Chart.Name은 차트의 이름을,.Chart.Version은 차트의 버전을 반환한다.
이외에도 몇가지 더 있지만 솔직히 위에 3개 정도만을 쓰게 될 것 같다.
또한, helm 템플릿에서는 제어 구조 (if, else, with, range 등) 와 함수 (default, quote, tpl 등)이 사용 가능하다. 이러한 템플릿 문법은 Go 템플릿 언어를 기반으로 한다.
helm~