Helm 사용하기

공개된 Chart를 사용하여 애플리케이션 배포

앞에서 설명하였듯이, Helm에서는 Chart라고 하는 설정 파일에 기반으로 어플리케이션의 배포를 실행한다. Chart는 helm 명령를 실행하는 로컬 머신상에 준비된 것 뿐만이 아니라, 리포지토리로 공개되고 있는 Chart를 직접 다운로드하여 이용하는 것도 가능하다. 우선은 Helm에 의한 어플리케이션의 배포 예로서 리포지토리에서 공개되고 있는 Chart를 이용하는 방법에 대해 보도록 하겠다.

앞에서 이미 언급했듯이 공개된 Chart는 Arfifact Hub라는 사이트에서 검색할 수 있다. Arfifact Hub에서는 <리포지토리명>/<Chart명>/이라는 형식으로 Chart가 표시되어 있으며, 그 중에 리포지토리 명이 “stable“이나 “incubator“로 되어 있는 것이 Helm의 공식 리포지토리에서 제공되고 있는 Chart로 리포지토리명이 그 이외의 것이 되고 있는 것은 타사가 제공하고 있는 Chart이다. 같은 이름의 Chart가 다른 리포지토리에 공개되어 있는 경우도 있지만, 이것들은 소스가 다르다는 점에 주의해야 한다.

그럼 리포지토리를 통해서 Chart를 설치하려면, 먼저 Chart를 제공하는 리포지토리를 로컬 컴퓨터에 등록해야 한다. Helm의 설치 직후에는 어느 리포지토리도 등록되어 있지 않은 상태가 되어 있을 것이므로, 공식 리포지토리로 제공되고 있는 Chart를 이용하는 경우에서도 리포지토리의 추가 작업이 필요하게 된다.

리포지토리의 추가는 helm repo add <리포지토리 이름> <URL>명령으로 수행 할 수 있다. 예를 들어 공식 “bitnami” 리포지토리를 추가하는 경우 다음과 같이 실행한다.

% helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

덧붙여 Linux 환경에서는 사용하는 리포지토리의 설정은 홈 디렉터리에서 .config/helm이라는 디렉터리에 있고, 리포지토리로 공개되고 있는 Chart 목록의 캐시는 홈 디렉터리에서 .cache/helm/repository 디렉터리에 저장된다. 이러한 정보는 helm -h 명령으로 표시할 수 있는 helm 명령의 도움말에 기재되어 있으므로, 필요에 따라서 확인해 둔다.

% helm -h
The Kubernetes package manager

... 중간 생략 ...

| Operating System | Cache Path                | Configuration Path             | Data Path               |
|------------------|---------------------------|--------------------------------|-------------------------|
| Linux            | $HOME/.cache/helm         | $HOME/.config/helm             | $HOME/.local/share/helm |
| macOS            | $HOME/Library/Caches/helm | $HOME/Library/Preferences/helm | $HOME/Library/helm      |
| Windows          | %TEMP%\helm               | %APPDATA%\helm                 | %APPDATA%\helm          |

... 이하 생략 ...

리포지토리의 등록 후에는 helm search 명령으로 리포지토리에 등록되어 있는 Chart를 검색할 수 있다.

helm search repo [<검색 키워드>]

키워드를 생략하게 되면 등록되어 있는 리포지토리에서 제공되고 있는 모든 Chart가 출력된다.

% helm search repo
NAME                                        	CHART VERSION	APP VERSION  	DESCRIPTION
bitnami/airflow                             	13.1.5       	2.3.4        	Apache Airflow is a tool to express and execute...
bitnami/apache                              	9.2.3        	2.4.54       	Apache HTTP Server is an open-source HTTP serve...
bitnami/argo-cd                             	4.1.3        	2.4.11       	Argo CD is a continuous delivery tool for Kuber...

... 이하 생략 ...

등록된 리포지토리의 정보는 로컬에 캐시되므로 시간이 지남에 따라 오래되었을 수 있다. helm repo update 명령을 실행하면 리포지토리 캐시를 최신 캐시로 업데이트할 수 있다.

% helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

Helm에서는, Chart를 사용해 어플리케이션을 배포하는 것을 “install(인스톨)” 이라고 하고, 인스톨 된 어플리케이션의 인스턴스는 “Release(릴리스)“라고 한다. 또한 각 인스턴스에는 고유한 이름(Release명)이 있다. Release명이 중복하지 되지 않고, 동일한 Chart로부터 여러 Release를 작성하는 것도 가능하다.

그럼 리포지토리에 공개된 Chart를 사용하여 응용 프로그램을 설치(배포)하려면 helm install <Release 이름> <Chart 이름> 명령을 실행한다.

다음의 예는 “stable/wordpress"라고 하는 Chart를 “wordpress"라는 Release명으로 배포한 것이다. 배포에 성공하면 그 어플리케이션에 관한 메모등을 포함한 “NOTES"가 표시된다.

% helm install wordpress bitnami/wordpress
NAME: wordpress
LAST DEPLOYED: Thu Sep 15 00:33:19 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: wordpress
CHART VERSION: 15.2.2
APP VERSION: 6.0.2

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

Your WordPress site can be accessed through the following DNS name from within your cluster:

    wordpress.default.svc.cluster.local (port 80)

To access your WordPress site from outside the cluster follow the steps below:

1. Get the WordPress URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace default -w wordpress'

   export SERVICE_IP=$(kubectl get svc --namespace default wordpress --include "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
   echo "WordPress URL: http://$SERVICE_IP/"
   echo "WordPress Admin URL: http://$SERVICE_IP/admin"

2. Open a browser and access WordPress using the obtained URL.

3. Login with the following credentials below to see your blog:

  echo Username: user
  echo Password: $(kubectl get secret --namespace default wordpress -o jsonpath="{.data.wordpress-password}" | base64 -d)

배포는 현재 Kubernetes의 컨텍스트에 대해 수행되므로, 특정 네임스페이스를 사용하고 싶은 경우은 사전에 kubectl config 명령 등으로 컨텍스트를 설정해 둔다.

그리고, 이 bitnami/wordpress Chart에서는 영속화 스토리지를 이용하기 때문에, 클러스터내에서 디폴트의 Storage Class가 설정되어 있어야 있다. Storage Class의 설정 방법은 사용하고 있는 Kubernetes 클러스터에 따라서 다르지만, Kubernetes용 Storage Class 생성에 대해서 따로 알아보길 바란다.

배포된 Release 목록은 “helm list” 명령으로 확인할 수 있다.

% helm list
NAME     	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART           	APP VERSION
wordpress	default  	1       	2022-09-15 00:33:19.166716 +0900 KST	deployed	wordpress-15.2.2	6.0.2

여기에서 작성된 Pod를 kubectl get pods 명령으로 확인해 보면, 다음과 같이 “wordpress-d5c8dffb7-bws4d"과 “wordpress-mariadb-0"의 2개의 Pod가 작성되고 있는 것을 알 수 있다(환경에 따라 “d5c8dffb7-bws4d"의 부분은 바뀐다).

% kubectl get pods
NAME                        READY   STATUS             RESTARTS        AGE
wordpress-d5c8dffb7-bws4d   0/1     CrashLoopBackOff   5 (2m21s ago)   7m33s
wordpress-mariadb-0         1/1     Running            0               7m33s

… 작성중(Pod에 에라가 발생하여 작성 중지;;;) …




최종 수정 : 2022-09-14