회사 팀 내에서 쿠버네티스를 사용하고 있지만, 많이 뒤쳐지고 있다는 생각이 들었다. helm을 이용하여 쿠버네티스 상에 플랫폼을 배포한다는 것만 알고 있고, helm이 어떤 것이고 왜 쓰는지, 어떻게 쓰는지 간략하게라도 써볼 필요가 있을 것 같다.
chatGTP에 물어본 결과는 다음과 같다.
Helm은 Kubernetes의 패키지 관리자입니다. 패키지 관리자는 소프트웨어를 설치, 업데이트, 구성, 제거하는 프로세스를 단순화합니다. Helm은 Kubernetes 클러스터에 대한 애플리케이션 배포를 관리하기 위한 도구로, 차트라는 패키지 형식을 사용합니다. 차트는 애플리케이션을 구성하는 쿠버네티스 리소스 정의와 관련 메타데이터를 포함합니다. 이를 통해 사용자는 쿠버네티스 애플리케이션 배포를 쉽게 관리할 수 있습니다.
보통은 yaml 파일을 통해 쿠버네티스 컴포넌트를 배포하지만, helm을 이용한다면 쿠버네티스 컴포넌트들을 하나로 패키징해서 조금 더 간편하게 배포할 수 있게끔 한다고 한다. 여기에서 패키지를 차트라고 칭한다.
역시 글을 계속 읽는 것보다 한번 써보는 게 가장 이해하는 데에 좋을 것 같다.
(퀵스타트 가이드=https://helm.sh/ko/docs/intro/quickstart/)
일단, 아래 명령어로 Helm을 설치했다. (MacOS 환경)
brew install helm
아래 명령어로 URL(https://charts.helm.sh/stable)에 해당하는 차트 저장소를 'stable'이름으로 클라이언트(내 로컬 PC)에 가져온다.
helm repo add stable https://charts.helm.sh/stable
helm search repo 명령어로 가져온 'stable' 이름의 차트 저장소를 확인할 수 있다. 그 결과 해당 차트 저장소에 있는 차트들을 확인할 수 있다.
helm search repo stable
(Optional)helm repo update 명령어를 통해 가져온 차트 리스트를 최신의 것으로 업데이트한다.
helm install 명령어를 이용하여, 사전에 연결되어(kubectl과 연동) 있는 쿠버네티스 서비스에 stable/mysql 차트를 'mysql-test' 릴리스(배포) 이름으로 배포한다. '--namespace', '--create-namespace' 플래그를 통해 네임스페이스를 지정할 수 있다.
helm install mysql-test stable/mysql --namespace mysql-test-space --create-namespace
아래처럼 'mysql-test-...' 이름으로 pod가 배포된 것을 확인할 수 있었다.
helm ls 명령어를 통해 배포된 릴리스들을 조회할 수 있다. 모든 네임스페이스를 조회해야하기 때문에 '-A' 플래그를 추가하였다.
helm ls -A
helm uninstall 명령어를 통해 배포한 'mysql-test' 릴리스를 제거한다. '-n' 플래그를 통해 네임스페이스 지정이 필요하다. (제거해도 네임스페이스는 그대로 남아있다. kubectl delete namespace를 통해 네임스페이스도 제거할 필요가 있다.)
helm uninstall mysql-test -n mysql-test-space
도커에 도커 허브 또는 컨테이너 레지스트리가 있다면, 쿠버네티스에는 helm이 그 역할을 해주는 것으로 보인다. 패키지를 항상 그대로 가져다가 쓸 수는 없기에, 패키징 또는 커스터마이징 작업도 익필 필요가 있어보인다.