[분석지능개발팀 임창대]
Helm 은 Kubernetes 클러스터에 앱 및 서비스를 배포할 수 있게 단일 패키지 형태로 구성하고 관리할 수 있도록 도와주는 패키지 매니저입니다.
사용자는 Kubernetes 배포 환경의 정의, 설치 및 업그레이드를 단순화한 Helm chart 를 통해 앱을 관리할 수 있습니다.
Helm은 Ubuntu apt 나 Python pip 같은 기존의 패키지 매니저가 제공하는 기능을 제공합니다.
- Install software.
- Automatically install software dependencies.
- Upgrade software.
- Configure software deployments.
- Fetch software packages from repositories.
https://artifacthub.io/
이에 더해 Helm 은 chart 라는 템플릿 구조를 이용하여 Kubernetes 에 배포할 앱과 관련한 YAML 파일과 Kubernetes 매니페스트 파일들을 관리합니다. Helm chart 의 기본적인 구조는 아래와 같습니다.
- package-name/
- charts/ : 의존성이 있는 차트 패키지들이 포함되어 있습니다.
- templates/ : Kubernetes 매니페스트 템플릿 파일들이 포함되어 있습니다. values.yaml 파일에 정의된 설정들에 의해 렌더링이 수행됩니다.
- Chart.yaml : Chart 에 대한 메타데이터가 포함되어 있습니다.
- values.yaml : Kubernetes 배포할 앱의 매니페스트 파일들에 대한 세부 설정들을 할 수 있습니다.
이 중에서 주의 깊게 볼만한 부분은 단연 templates 폴더 내의 매니페스트 파일들과 values.yaml 파일입니다.
기본적으로 templates 폴더 내에 Kubernetes 에 앱을 배포하기 위한 deployment, service, ingress 과 같은 매니페스트 파일들이 있습니다.
해당 내용은 values.yaml 과 chart 의 metadata 들을 참조하는 내용으로 이루어져 있습니다.
따라서 templates 내의 매니페스트 파일들에 작성되어야 할 정보들을 values.yaml 파일에 작성하는 식으로 패키지를 생성할 수 있습니다.
Helm 은 helm chart 로 배포한 패키지를 관리하기 위한 CLI 또한 가지고 있습니다.
Helm CLI 를 통해 helm chart 저장소에서 사용할 앱 패키지를 다운로드 받을 수 있을 뿐만 아니라, 현재 Kubernetes cluster 내에 Helm 을 이용하여 배포한 앱 상황을 빠르게 이해하고 관련한 resource 들을 쉽게 관리할 수 있습니다.
요즘에는 템플릿 구조를 활용한 Helm 이외에도 상속(다형성) 구조를 활용한 kustomize 등 다양한 패키지 관리 도구들이 있으니 비교해보고 적절한 방식을 사용하여 보다 쉽게 Kubernetes 환경을 다뤄 보는 것도 좋을 것 같습니다.
References
– https://www.cncf.io/projects/helm/
– https://www.digitalocean.com/community/tutorials/an-introduction-to-helm-the-package-manager-for-kubernetes
– https://cloud.redhat.com/blog/helm-and-operators-on-openshift-part-1