이번 포스팅에서는 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 | 이 차트의 기본 구성 값 |