[k8s] helm

장동균·2023년 7월 2일

helm이란

helm은 k8s 패키지 매니저로, k8s 어플리케이션을 정의, 저장, 관리하는데 사용한다.

'패키지'는 helm 차트를 의미하며, 이는 k8s 리소스에 대한 설명이 포함된 yaml 매니페스트 파일들의 집합이다.

예를 들어 FE 앱 배포를 위해 Ingress, Service, Deployment 총 3개에 대한 yaml이 필요하다. 이 파일들을 매번 각각 작성하기 보다는 하나의 차트로 관리하여 손쉽게 재사용할 수 있다.


hub와 repo

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

배포된 모든 릴리스들을 확인


helm install 시 사용할 수 있는 옵션들

설치 작업시 구성 데이터 (보통 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 

--set 활용 예시

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


upgrade

새로운 버전의 차트가 릴리스되었을 때, 또는 릴리스의 구성을 변경하고자 할 때, 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 템플릿 언어를 기반으로 한다.

profile
프론트 개발자가 되고 싶어요

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

helm~

답글 달기