Helm이란?
지금까지 쿠버네티스의 대략적인 내용들에 대해서 살펴보았습니다. 하지만 쿠버네티스를 사용하다 보면 결국 수많은 템플릿을 관리하게 됩니다. 이러한 템플릿 파일들을 한 번에 관리하기 위해 사용하는 것이 쿠버네티스 패키지 매니저 헬름(helm)입니다. (docker container가 많아져서 쿠버네티스를 쿠버네티스 템플릿이 많아져서 결국 헬름까지...^^) 헬름을 이용하면 npm이나 도커 허브처럼 쿠버네티스 패키지 배포를 손쉽게 할 수 있습니다.
헬름은 차트와 차트 압축 팔일(tgz)를 만들 수 있고, 차트들이 저장되는 차트 저장소와 연결해 쿠버네티스 클러스터에 차트를 설치하거나 삭제할 수 있습니다. 여기서 용어에 대해 잠시 짚고 넘어가도록 하겠습니다.
- chat : k8s에서 실행할 애플리케이션을 만드는 데 필요한 정보의 묶음입니다.
- config : 패키지한 차트에 넣어서 배포 가능한 오브젝트를 만들 때 사용할 수 있는 설정입니다..
- release : 특정 config를 이용해서 실행 중인 차트의 인스턴스입니다.
Helm Install / 사용해보기
헬름은 command line interface(이하 cli)인 헬름 클라이언트와 쿠버네티스 클러스터 안에서 클라이언트의 명령을 받아 k8s api와 통신하는 틸터 서버로 구성되어 있습니다. (헬름 클라이언트는 go lang으로 개발되었으며 틸러 서버와는 gRPC를 이용해 통신합니다.)
그럼 헬름 클라이언트를 설치해보도록 하겠습니다.
# mac os
brew install kubernetes-helm
# ubuntu
sudo snap install helm --classic
# window
choco install kubernetes-helm
헬름 클라이언트를 설치했으면 이제 쿠버네티스 클러스터에 틸러 서버를 설치해야 합니다. kubeconfig 설정이 로컬에 이미 되어있다면 보통은 이미 설정되어 있을 테지만, 만약 설정되어 있지 않다면 helm init 명령어를 입력해줍니다.
틸러 서버가 설치되었다면 kubectl get pods -n kube-system 명령어로 kube-system 네임스페이스에 tiller-deploy-*이 설치되었는지 확인해 봅니다.
틸러 서버가 정상적으로 설치되었습니다. 헬름 차트 저장소에 잘 정리된 차트를 이용하여 손 쉽게 애플리케이션을 설치할 수 있습니다. helm search hub mysql 명령어로 mysql과 관련된 차트를 검색 해보겠습니다.
그런 다음 마음에 드는 차트를 찾았다면 다음과 같은 명령어로 차트를 실행시킬 수 있습니다. helm install stable/mysql --name=my-sql-chart 만약 --name 옵션을 주지 않는다면 임의의 이름이 부여됩니다. 명령어를 입력하면 mysql에 필요한 다양한 config 정보들을 입력한 뒤 pod가 뜨게 됩니다.
helm chart 구조
헬름에서 사용하는 차트는 디렉토리 하나에 들어가 있는 파일들의 집합입니다. 디렉토리 이름을 차트 이름으로 지정하게 되고 그 안에 필요한 파일들을 넣게 됩니다. helm create <차트 이름> 명령어로 차트를 생성한 이후 tree <차트 이름> 명령어를 통해 디렉토리 구조를 확인할 수 있습니다. 디렉토리 구조는 아래와 같습니다.
SampleApp/
|__Chart.yaml # 차트에 대한 정보를 가지고 있음.
|__LICENSE # 옵션 : 차트 라이센스에 대한 정보를 가지고 있음.
|__README.md # 옵션 : 차트에 대한 설명 파일
|__requirements.yaml # 옵션 : 차트의 의존성을 명시한 파일
|__values.yaml # 이 차트에서 사용하는 기본 설정 값
|__charts/ # 이 차트에 관련되어 있는 차트들
|__templates/ # 쿠버네티스 매니페스트 파일들로 변환될 YAML템플릿 파일들
|__templates/NOTES.txt # 옵션 : 짧은 사용법 설명
가장 상단에 있는 Chart.yaml는 헬름 차트의 기본적인 정보와 이름, 버전 등을 기록하고 있습니다. 그리고 쿠버네티스 리소스들은 template 하위에서 관리하게 되고, 따로 필요한 파라미터들은 values.yaml에서 분리하여 주입하게 됩니다. 일반적으로는 차트 저장소에 올라와 있는 그대로 받아와 사용하지만, 만약 수정이 필요한 경우에 아래와 같은 명령어를 사용해서 수정할 수 있습니다.
# 차트 다운로드
helm fetch <차트 이름>
# 차트 압축해제
tar zxvf <차트 이름>
# 수정 한 차트를 실행
helm install <수정한 차트가 있는 경로>
# 실행된 후 차트가 수정됐는지 확인
helm ls
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] CRD(Custom Resource Definition)와 Custom Controller 사용하기 (0) | 2021.04.08 |
---|---|
[DevOps] Istio: Circuit Breaker를 지원하는 Service Mesh의 구현체 (0) | 2020.11.16 |
[Kubernetes] ConfigMap / Secret: config 정보를 container 외부에서 가져오기 (0) | 2020.07.22 |
[Kubernetes] Volume: k8s에서 데이터를 Disk에 영구 저장하기 (0) | 2020.07.20 |
[Kubernetes] Rolling Update (Deployment): 무중단 배포 (6) | 2020.07.17 |