Helm 설치하기
Helm은 Kubernetes의 패키지 매니저입니다. Kubernetes에서 애플리케이션을 배포할 경우 같은 애플리케이션이어도 환경에 따라 설정이 달라지는 경우가 발생하는데 이에 따라 설정을 매번 변경해줘야하는 불편함이 생깁니다. Helm은 이렇게 배포 환경에 따라 달라지는 설정값을 정의하고 배포할 수 있도록 패키지 매니징을 지원합니다.
1. Helm 구성
Helm의 기본 구조는 다음과 같습니다. (Helm 3.0 기준으로 확인한 내용입니다)
- Charts
yaml 파일을 묶어서 정의한 package입니다. kubernetes app 빌드를 위한 리소스가 정의되어 있습니다. - Repository
생성된 차트들의 저장소입니다. - Release
kubernetes 클러스터에 로드된 chart instance들의 버전입니다. chart로 배포된 app들은 각각 고유한 버전을 갖고 있습니다.
2. Helm 설치하기
Kubernetes 클러스터가 구성된 환경에서 다음 명령어를 실행하여 Helm을 설치해줍니다.
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Helm v3.6.3 is available. Changing from version v3.6.1.
Downloading https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /helm
Password:
helm installed into /bin/helm
설치가 완료되면 버전을 확인해줍니다.
$ helm version
version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"clean", GoVersion:"go1.16.5"}
3. Helm 사용하기
3.1. 차트 Repository 추가 및 업데이트
Helm 차트를 사용하기 위해 차트 repository를 추가해줍니다.
$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
추가된 repository를 확인해줍니다.
$ helm repo list
NAME URL
stable https://charts.helm.sh/stable
추가된 repository에 어떤 차트가 있는지 검색하여 확인해줍니다.
$ helm search repo stable
NAME CHART VERSION APP VERSION DESCRIPTION
stable/acs-engine-autoscaler 2.2.2 2.1.1 DEPRECATED Scales worker nodes within agent pools
stable/aerospike 0.3.5 v4.5.0.5 DEPRECATED A Helm chart for Aerospike in Kubern...
stable/airflow 7.13.3 1.10.12 DEPRECATED - please use: https://github.com/air...
stable/ambassador 5.3.2 0.86.1 DEPRECATED A Helm chart for Datawire Ambassador
stable/anchore-engine 1.7.0 0.7.3 Anchore container analysis and policy evaluatio...
stable/apm-server 2.1.7 7.0.0 DEPRECATED The server receives data from the El...
stable/ark 4.2.2 0.10.2 DEPRECATED A Helm chart for ark
stable/artifactory 7.3.2 6.1.0 DEPRECATED Universal Repository Manager support...
stable/artifactory-ha 0.4.2 6.2.0 DEPRECATED Universal Repository Manager support...
stable/atlantis 3.12.4 v0.14.0 DEPRECATED A Helm chart for Atlantis https://ww...
stable/auditbeat 1.1.2 6.7.0 DEPRECATED A lightweight shipper to audit the a...
stable/aws-cluster-autoscaler 0.3.4 DEPRECATED Scales worker nodes within autoscali...
stable/aws-iam-authenticator 0.1.5 1.0 DEPRECATED A Helm chart for aws-iam-authenticator
...
최신 차트 리스트 사용을 위해 업데이트를 해줍니다.
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈
3.2. Package 설치하기
helm install 명령어를 이용하여 패키지를 설치해줍니다. 설치할 때는 다음과 같이 릴리스 이름과 차트 이름을 지정해줍니다. postgresql을 'db'라는 이름의 namespace에 설치하였고 릴리스 이름은 'postgresql-v1'으로 지정해줬습니다.
설치 후엔 helm stauts 명령어로 릴리스의 상태를 확인할 수 있습니다.
$ kubectl create namespace db
$ helm install postgresql-v1 stable/postgresql --namespace db
$ helm status postgresql-v1
NAME: postgresql-v1
LAST DEPLOYED: Sun Sep 12 12:58:35 2021
NAMESPACE: db
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
...
** Please be patient while the chart is being deployed **
PostgreSQL can be accessed via port 5432 on the following DNS name from within your cluster:
postgresql-v1.db.svc.cluster.local - Read/Write connection
...
다음으로 pod과 service의 상태를 확인해줍니다.
$ kubectl get pods --namespace db
postgresql-v1-postgresql-0 1/1 Running 0 9m47s
$ kubectl get services --namespace db
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
postgresql-v1 ClusterIP 10.110.15.51 <none> 5432/TCP 14m
postgresql-v1-headless ClusterIP None <none> 5432/TCP 14m
3.3. Upgrade & Rollback
새로운 버전의 차트가 릴리스 되거나 구성을 변경할 때는 다음과 같이 helm upgrade 명령어를 사용하여 업그레이드를 진행합니다.
$ helm upgrade postgresql-v1 stable/postgresql --namespace db
Release "postgresql-v1" has been upgraded. Happy Helming!
NAME: postgresql-v1
LAST DEPLOYED: Sun Sep 12 13:17:37 2021
NAMESPACE: db
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
** Please be patient while the chart is being deployed **
PostgreSQL can be accessed via port 5432 on the following DNS name from within your cluster:
postgresql-v1.db.svc.cluster.local - Read/Write connection
...
반대로 릴리스를 롤백하기 위해서는 helm rollback 명령어를 사용하여 롤백을 진행해줍니다. 롤백할 때는 원하는 revision 번호를 찾아서 지정해주면 됩니다.
$ helm history postgresql-v1 --namespace db
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Sep 12 12:58:35 2021 superseded postgresql-8.6.4 11.7.0 Install complete
2 Sun Sep 12 13:17:37 2021 deployed postgresql-8.6.4 11.7.0 Upgrade complete
$ helm rollback postgresql-v1 1 --namespace db
Rollback was a success! Happy Helming!
3.4. Release 삭제하기
릴리스를 삭제하기 위해서는 helm uninstall 명령어를 사용해줍니다. uninstall 실행시 릴리스는 바로 삭제되기 때문에 리소스 롤백은 불가능하다는 것을 주의하여 사용해야 합니다.
$ helm uninstall postgresql-v1 --namespace db
release "postgresql-v1" uninstalled
이상으로 Helm 설치와 사용 방법에 대해 알아봤습니다.
※ Reference
- gruuuuu.github.io, Helm 3 설치 & 기본 사용방법, https://gruuuuu.github.io/cloud/l-helm-basic/
- velog.io/@makeitcloud, [Kubernetes] Helm 사용하기, https://velog.io/@makeitcloud/Kubernetes-Helm-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
- lifeplan-b.tistory.com, Helm 개념과 구조 기술조사, https://lifeplan-b.tistory.com/m/35?category=828034