DevOps/helm

Helm이란?(helm개요 및 설치)

치킨맛코드 2022. 9. 29. 20:13

k8s를 사용하다 보면 종종 helm, helm chat와 같은 단어를 발견할 수 있다. 헬름이라고 발음하고 어떤 분들은 헴 이라고도 발음하곤 한다. 원 의미로는 투구 혹은 배의 조종간인 타륜을 의미한다. 단어에서 유추할 수 있듯 k8s환경은 일종의 바다와 같은 이미지를 체용하는데, 그렇다면 헬름은 이런 k8s을 운용하기에 지원해주는 일종의 도구라고 할 수 있다.

 

일반적으로 k8s로 어플리케이션을 배포하다보면 정말 많은 서비스가 생성되고 삭제되기를 반복한다. 이때 사람이 이러한 활동을 작업하다 보면 삭제하지 않고 방치되는 자원들이 종종 발생하기 마련이다. 이러한 관리적인 허점을 케어하기 위해 만들어진것이 helm이다.

 

k8s에서 사용하는 helm의 의미는 " 일반적인 k8s 클러스터에 쉽게 배포할 수 있는 k8s의 생태계를 관리해주는 페키지 관리 도구(페키지 메니저. ex yum, apt, )이며, 반복성을 가지는 시나리오에서 사용하기 좋은 툴이다. "

 

helm의 요소는 3가지로써 chart, config, release가 있다.

chart : k8s의 리소스를 묶어둔 페키지를 총칭하는 명칭이다. 

config 어플리케이션을 실행할 때 디폴트 설정을 사용할 수 도 있지만, 수정이 가능한 값(ex. 도메인주소, 볼륨사이즈, 리플리카 갯수. etc)을 추가로 지정할 수 있다. 

release: chart와 config가 조합되어 k8s이 설치가 되면 이때부터 release라는 이름으로 helm이 관리를 하게 된다. 다양한 메타정보(어떤 차트, 설정값, 설치된 시간. etc)를 알 수 있다.

 

helm은 cli로 실행되며, 특별한 서버없이 단순 helm설치만 한다면 다른 명령어처럼 사용할 수 있다. 또한 helm은 클라이언트만 존재하기에 별도의 저장소가 필요하다. 이를 위해 configmap이나 PostgreSQL도 사용되지만 가장 많이 사용되는것은 Secret이다. secret은 namespace에 종속되기 때문에, 하나의 어플리케이션을 같은 이름으로 다른 각각의 namespace에 설치할 수 있으며, 특정 namespce에 어떤 helm chart가 있는지 알아보기 위해서는 그 특정 namespace의 secret만 조회하면 된다.

# kubectl get secret pc.helm.release.v1.Test-nginx.v1

apiVersion: v1
==>버전을 확인한다.
data:
  release: asfglnaslinASdfgnlnaslASG
==> 어떤 정보가 있는지 인코딩되어 저장되어 있다.
kind : Secret
==> 어떤 종류인지 확인한다.
metadata:
==> Secret의 메타데이터를 확인할 수 있다.
   creationTimestamp: "2022-09-09T13:55:14Z"
   labels:
     modifiedAt:"123456789"
     name: Test-nginx
     owner: helm
     status: deployed
     version: "1"
   name: pc.helm.release.v1.Test-nginx.v1
   ==> secret의 이름.
   namespace: default
   resourceVersion: "123456"
   uid: 123456-dba7-a1b2-c2c2c-d132541q65
type:helm.pc.release.v1

이런 helm chart는 다양한 repository를 활용할 수 있다. 원격 저장소로는 artifact hub, bitnami가 있으며, 로컬 저장소로는 harbor, ChartMuseum이 있다.

 

설치는 정말 간단하다. 아래의 공식 홈페이지에서 다운로드를 받을 수 도 있으며, git이나 curl 스크립트를 통해서도 당연히 설치할 수 있다.

https://helm.sh/

 

Helm

Helm - The Kubernetes Package Manager.

helm.sh

아래의 명령어를 그대로 실행해 보도록 하자.

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
==> curl로 다운로드 받는다.
$ chmod 700 get_helm.sh
==> sh파일에 권한을 부여한다.
$ ./get_helm.sh
==> helm을 인스톨한다.

정말 가볍게 helm을 설치할 수 있다. helm chart를 설치하는것도 은근 간단하다.

$ helm install "name" "chart" "flags"
name: helm로 설치할때 어떤 이름으로 지정할 것인가
chart: 어떤 어플리케이션 chart를 설치할 것인가.
flags: install과정에서 지원되는 옵션을 확인.