이번 포스팅에서는 GitLab의 Helm 패키지 레지스트리에 대해서 설명하고자 합니다. Kubernetes는 리눅스재단 산하의 CNCF에서 제공하고 있는 오픈소스 기반의 컨테이너 오케스트레이션 도구로써, 현재 다양한 오케스트레이션 도구 중 가장 높은 점유율과 인기를 자랑하고 있습니다. 그에 따라 GitLab에서는 애플리케이션 배포 플랫폼으로 Kubernetes를 연동하여 지원하고 있습니다. Kubernetes의 패키지 매니저 역할을 하는 Helm과 GitLab이 Helm 차트 리포지토리를 지원하는 방법에 대해 알아보겠습니다.
Kubernetes란?
Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. 여러 클러스터의 호스트 간에 애플리케이션 컨테이너의 배치, 스케일링, 운영을 자동화하기 위한 기능을 제공하며, Docker를 포함하여 일련의 컨테이너 도구들과 함께 동작합니다.
쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했습니다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기입니다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했으며, 현재는 현재 리눅 스 재단(Linux Foundation)에 의해 관리되고 있습니다.
Helm이란?
Helm은 Kubernetes용 패키지 매니저입니다. Helm을 사용하면 버전 관리, 공유 및 공동 작업이 가능한 차트에 애플리케이션 정의를 저장하여 복잡한 애플리케이션을 관리할 수 있습니다.
Kubernetes에 애플리케이션을 배포하려면, 쿠버네티스의 오브젝트를 생성하기 위한 메타 정보를 YAML이나 JSON으로 기술한 매니페스트(manifest) 파일을 작성해야 합니다. 이러한 매니페스트 파일에는 DB 정보와 같이 배포 환경에 따라 달라지는 정보가 포함되어 있습니다. 그렇다면 모든 환경마다 매니페스트를 작성해야 할까요?
Helm은 매니페스트 파일들을 생성하는 템플릿과 변경되는 값을 정의하는 Helm 차트로 YAML 파일 컬렉션을 패키징하고 Helm 리포지토리로 배포할 수 있는 편리한 기능을 제공합니다.
Helm Charts
Helm 차트는 kubernetes 클러스터 내에서 애플리케이션을 실행하는 데 필요한 Kubernetes 리소스 정의가 포함된 Helm 패키지입니다. 차트는 특정한 디렉터리 구조를 가진 파일들로 생성됩니다. 이 파일들은 배포할 버전이 지정된 아카이브로 패키지화 될 수 있습니다.
Helm CLI가 설치되어 있으면, helm create
명령을 실행하여 새로운 차트를 생성할 수 있습니다.
helm create hello-helm
다음은 Helm Chart의 기본 구조입니다.
$ tree ./hello-helm
./hello-helm
├── Chart.yaml
├── charts
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
3 directories, 10 files
디렉토리/파일 | 설명 |
---|---|
.helmignore | 헬름 차트에 포함시키고 싶지 않은 파일들을 지정 |
Chart.yaml | 차트에 대한 정보를 포함하는 YAML 파일 |
charts | 이 차트가 의존하는 차트를 포함하는 디렉토리 |
templates | 값과 결합하여 유효한 Kubernetes manifest 파일을 생성하기 위한 템플릿 디렉토리 |
templates/NOTES.txt | 차트의 "도움말". helm install 을 실행할 때 사용자에게 표시 |
templates/_helpers.tpl | 차트 전체에서 다시 사용할 수 있는 템플릿 헬퍼를 지정하는 공간 |
values.yaml | 이 차트의 기본 구성 값 |
Helm chart 리포지토리
Helm은 Helm 차트를 저장하고 공유하는 데 사용할 수 있는 차트 리포지토리를 지원합니다.
분산형 커뮤니티 Helm 차트 저장소는 Artifact Hub에 있습니다. Artifact Hub는 공개적으로 사용 가능한 분산형 Helm 차트를 포함하여 CNCF(Cloud Native Computing Foundation) 프로젝트에 대한 패키지 및 구성을 찾고, 설치하고, 게시할 수 있는 웹 기반 응용 프로그램입니다.
Helm을 사용하면 자체의 차트 저장소를 만들고 실행할 수도 있습니다.
Helm 차트를 생성한 다음 다른 사람들이 쉽게 재사용할 수 있도록 공유할 수 있습니다. 공유는 차트를 Helm 리포지토리에 저장하여 수행됩니다. 이 리포지토리를 다른 사람들과 공유하면 차트를 사용하여 애플리케이션을 배포할 수 있습니다.
Helm 워크플로우
다음은 Helm Chart를 이용한 kubernetes 배포에 대한 간략한 구성도입니다.

- 개발자는 다른 사람과 공유하기 위해 Helm 차트를 만들어야 합니다. 차트는 애플리케이션에 필요한 리소스 집합에 대한 템플릿이 포함된 패키지입니다. 템플릿은 매니페스트가 생성될 때
values.yaml
파일에 정의된 변수를 사용하여 리소스를 구성하는 방법을 설명합니다. - Helm 차트는 서버에서 다운로드하거나 액세스할 수 있는 리포지토리 내에서 호스팅됩니다. 이 차트에는 다른 개발자가 애플리케이션을 실행하는 데 필요한 모든 리소스 정의가 포함됩니다.
- 클러스터에 액세스할 수 있으므로 애플리케이션에 새로운 기능이나 버그 수정을 추가하고 Helm 차트를 업데이트할 수 있습니다. Helm은 릴리스를 관리하는 데 유용한 도구를 제공합니다. 차트를 업그레이드하고 새 배포를 만들 수 있습니다. Helm에서 배포된 애플리케이션 인스턴스를 릴리스라고 합니다.
- 이제 패키지된 애플리케이션을 kubernetes 클러스터에 배포할 수 있습니다.