Kubernetes - Helm (헬름)

category DevOps/Kubernetes 2021. 12. 28. 22:12
728x90
반응형

Helm (헬름) 이란?

헬름은 쿠버네티스 애플리케이션 관리하는 도구이다. 헬름 차트는 복잡한 쿠버네티스 애플리케이션도 편리하게 정의하여 설치하거나 업그레이드할 수 있다.

출처: https://anarsolutions.com/helm-deployments-kubernetes/

아키텍쳐

출처 : https://medium.com/dwarves-foundation/kubernetes-helm-101-78f70eeb0d1

주요 특징

복잡성 관리

차트는 매우 복잡한 애플리케이션도 표현하고, 반복적인 애플리케이션 설치를 제공하며, 단일 권한으로 서비스할 수 있다.

쉬운 업데이트

즉시(in-place) 업그레이드와 커스텀 훅을 통해 업데이트하는 수고를 줄여줄 수 있다.

간단한 공유

차트는 버전 관리, 공유, 퍼블릭이나 프라이빗 서버 호스팅이 편리하다

롤백

helm rollback을 사용하여 릴리스를 예전 버전으로 간편하게 되돌릴 수 있다.

주요 개념 3가지

차트

쿠버네티스 애플리케이션의 인스턴스를 생성하는 데에 필요한 정보의 꾸러미이다.

설정

릴리스 가능한 객체를 생성하기 위해 패키징된 차트로 병합될 수 있는 설정 정보를 가진다.

릴리스

차트의 구동중 인스턴스이며, 특정 설정이 결합되어 있다.

 

설치방법

설치방법은 snap, source 등 여러가지 방법이 있지만 쉘 스크립트 방식으로 설치를 해본다.

1. 쉘 스크립트 다운로드

guru@master:~/temp$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
guru@master:~/temp$ chmod 700 get_helm.sh
guru@master:~/temp$ ls -al
합계 20
drwxrwxr-x  2 guru guru  4096 12월 28 20:18 .
drwxr-xr-x 17 guru guru  4096 12월 28 20:18 ..
-rwx------  1 guru guru 11156 12월 28 20:18 get_helm.sh

2. 쉘 스크립트 실행

guru@master:~/temp$ ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
[sudo] guru의 암호: 
helm installed into /usr/local/bin/helm

3. 버전 확인

guru@master:~/temp$ helm version
version.BuildInfo{Version:"v3.7.2", GitCommit:"663a896f4a815053445eec4153677ddc24a0a361", GitTreeState:"clean", GoVersion:"go1.16.10"}

 

'helm search': 차트 찾기

1.  헬름 허브 검색

helm search hub는 여러 저장소들에 있는 헬름 차트들을 포괄하는 헬름 허브를 검색한다.

guru@master:~$ helm search hub wordpress
URL                                               	CHART VERSION 	APP VERSION        	DESCRIPTION                                       
https://artifacthub.io/packages/helm/kube-wordp...	0.1.0         	1.1                	this is my wordpress package                      
https://artifacthub.io/packages/helm/bitnami/wo...	12.2.7        	5.8.2              	Web publishing platform for building blogs and ...
https://artifacthub.io/packages/helm/bitnami-ak...	12.2.7        	5.8.2              	Web publishing platform for building blogs and ...
...

2.  로컬에서 검색

helm search repo는 helm repo add를 사용하여 로컬 헬름 클라이언트에 추가된 저장소들을 검색한다. 검색은 로컬 데이터 상에서 이루어지며, 퍼블릭 네트워크 접속이 필요하지 않다.

guru@master:~$ helm search repo brigade
Error: no repositories configured
guru@master:~$ helm repo add brigade https://brigadecore.github.io/charts
"brigade" has been added to your repositories
guru@master:~$ helm search repo brigade
NAME                        	CHART VERSION	APP VERSION	DESCRIPTION                                       
brigade/brigade             	1.10.0       	v1.5.0     	Brigade provides event-driven scripting of Kube...
brigade/brigade-github-app  	0.8.0        	v0.4.1     	The Brigade GitHub App, an advanced gateway for...
brigade/brigade-github-oauth	0.4.0        	v0.20.0    	The legacy OAuth GitHub Gateway for Brigade       
brigade/brigade-k8s-gateway 	0.3.0        	           	A Helm chart for Kubernetes                       
brigade/brigade-project     	1.1.0        	v1.0.0     	Create a Brigade project                          
brigade/kashti              	0.7.0        	v0.4.0     	A Helm chart for Kubernetes

3.  차트 업데이트

guru@master:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "brigade" chart repository
Update Complete. ⎈Happy Helming!⎈

 

'helm install': 패키지 설치

기본 명령어

helm install <릴리즈명> <차트명> <옵션>

# 네임스페이스 지정시
helm install <릴리즈명> <차트명> --namespace <네임스페이스>

1. 설치

happy-panda 차트 이름으로 test-helm의 namespace에 bitnami/mariadb를 설치해보도록 한다.

guru@master:~$ helm install happy-panda bitnami/mariadb --namespace test-helm --create-namespace \
--set auth.rootPassword="a1234",primary.persistence.enabled=false,secondary.persistence.enabled=false
NAME: happy-panda
LAST DEPLOYED: Tue Dec 28 20:58:04 2021
NAMESPACE: test-helm
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mariadb
CHART VERSION: 10.1.1
APP VERSION: 10.5.13

** Please be patient while the chart is being deployed **

Tip:

  Watch the deployment status using the command: kubectl get pods -w --namespace test-helm -l app.kubernetes.io/instance=happy-panda

Services:

  echo Primary: happy-panda-mariadb.test-helm.svc.cluster.local:3306

Administrator credentials:

  Username: root
  Password : $(kubectl get secret --namespace test-helm happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)

To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run happy-panda-mariadb-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mariadb:10.5.13-debian-10-r32 --namespace test-helm --command -- bash

  2. To connect to primary service (read/write):

      mysql -h happy-panda-mariadb.test-helm.svc.cluster.local -uroot -p my_database

To upgrade this helm chart:

  1. Obtain the password as described on the 'Administrator credentials' section and set the 'auth.rootPassword' parameter as shown below:

      ROOT_PASSWORD=$(kubectl get secret --namespace test-helm happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
      helm upgrade --namespace test-helm happy-panda bitnami/mariadb --set auth.rootPassword=$ROOT_PASSWORD

2. 상태 확인

guru@master:~$ helm status happy-panda --namespace test-helm
NAME: happy-panda
LAST DEPLOYED: Tue Dec 28 20:58:04 2021
NAMESPACE: test-helm
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mariadb
CHART VERSION: 10.1.1
APP VERSION: 10.5.13

** Please be patient while the chart is being deployed **

Tip:

  Watch the deployment status using the command: kubectl get pods -w --namespace test-helm -l app.kubernetes.io/instance=happy-panda

Services:

  echo Primary: happy-panda-mariadb.test-helm.svc.cluster.local:3306

Administrator credentials:

  Username: root
  Password : $(kubectl get secret --namespace test-helm happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)

To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run happy-panda-mariadb-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mariadb:10.5.13-debian-10-r32 --namespace test-helm --command -- bash

  2. To connect to primary service (read/write):

      mysql -h happy-panda-mariadb.test-helm.svc.cluster.local -uroot -p my_database

To upgrade this helm chart:

  1. Obtain the password as described on the 'Administrator credentials' section and set the 'auth.rootPassword' parameter as shown below:

      ROOT_PASSWORD=$(kubectl get secret --namespace test-helm happy-panda-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
      helm upgrade --namespace test-helm happy-panda bitnami/mariadb --set auth.rootPassword=$ROOT_PASSWORD

 

'helm list': 차트 리스트

리스트 확인

guru@master:~$ helm list --namespace test-helm
NAME       	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART         	APP VERSION
happy-panda	test-helm	1       	2021-12-28 20:58:04.232767233 +0900 KST	deployed	mariadb-10.1.1	10.5.13

 

'helm uninstall': 릴리스 언인스톨하기

guru@master:~$ helm uninstall happy-panda --namespace test-helm
release "happy-panda" uninstalled
728x90
반응형