Helm 개념과 구조 기술조사
Helm Version 3.0
Helm 이란?
- Kubernetes 의 패키지 관리 도구
- Linux의 Yum, Apt와 비슷한 형태로 Kubernetes 패키지 배포를 가능하게 해주는 Tool
- 어플리케이션을 패키징하여 Kubernetes Cluster에 배포할 수 있도록 도와줌
Helm을 사용하는 이유?
어플리케이션 배포 + 필요한 Kubernetes 리소스까지 모두 배포해주는 역할을 한다.
일반적으로 하나의 소프트웨어 or 어플리케이션을 배포하는데, 하나의 컨테이너만으로 해결되는 경우는 적다.
Ingress, Service, Pod, 디스크 볼륨, 기타 정책까지 추가적으로 배포해야 한다.
따라서, 하나의 어플리케이션을 위해서 많은 구성 및 설정이 필요해서 복잡해지는데,
이러한 하나의 소프트웨어를 배포하기 위해 필요한 모든 설정, 리소스의 배포를 패키지 형태로 지원한다.
담당자가 변경되었을때 or 새로운 매니페스트를 적용해야 할때 or 다른 쿠버네티스 클러스터로 이동될때
개별 매니페스트를 모두 개별 조정해줄것이 아니라. Helm의 표준 형식에 조정이 필요한 설정 과 변수만 조정하여 사용자가 쉽게 어플리케이션 설치를 할 수 있다.
Helm 3 Architecture
Helm 3 부터는 더 이상 Tiller가 없다.
Helm Client가 직접 Kubernetes API와 상호 통신해서 helm chart를 배포한다.
Helm (Chart) Repository
- Chart 들이 저장되어 있는 장소
Helm Chart 란?
- Kubernetes 리소스 패키지
- Helm 을 통해서 인스톨하는 패키지를 chart 라고 한다.
- 복잡한 Kubernetes 어플리케이션도 편리하게 정의하여 설치 or 업그레이드 할 수 있음.
헬름으로 차트를 관리하는 목적은?
- 매니페스트 파일을 관리하기 쉽게 하기 위한 것.
Helm Chart 기본 구조
Demo │ └── . . . ┣── Charts │ └── postgresql-1.0.1.tgz └── requirement.yaml |
각 파일의 역할
- Chart.yaml : 차트의 이름과 버전을 지정
- Values.yaml : 사용자가 릴리즈 하려는 인스턴스에 대해 수정 가능한 설정을 포함한다.
- Templates 폴더 : values.yaml 파일에 선언된 변수를 이용해서 kubernetes 매니패스트 파일을 생성하는 템플릿 파일이 존재한다.
- Chart 폴더 : 의존성 있는 차트 패키지들 설치, requirement.yaml 파일에 의존성이 있는 차트를 명시할 경우, charts 폴더에 차트파일이 저장된다.
[개별 파일 예시]
Chart.yaml 파일
Name : demo |
※ Chart 이름과 Version을 필수적으로 명시한다.
Values.yaml 파일
Environment : development |
Values.yaml 파일은 자유형식의 YAML파일이며, 사전에 정의된 스키마가 없다.
Values.yaml에 정의되어 있는 모든 변수들은 Chart내의 어디서든 참조 될 수 있을 뿐이다.
다시말해, 차트는 여기에 선언된 변수들을 이용해 chart를 릴리즈한다는 의미이다.
Templates 폴더( ex. Example.yaml)
apiVersion : v1 |
해당 문서에서 위의 요소들이 무엇을 의미하는지는 하나하나 언급하지 않는다.
다만, templates에 선언된 kubernetes 매니패스트 파일에서 위의 values.yaml에 정의된 변수들에 어떻게 접근하는지 보일것이다.
중괄호 안에 .values라는 변수를 넣고 "."을 이용해서 접근하는것을 볼 수 있다.
위의 template에 Value의 변수를 적용하면 다음과 같다.
apiVersion : v1 |
[소식]
Helm 2는 더 이상 지원하지 않는다(Nov 13, 2020)
(https://helm.sh/blog/helm-2-become-unsupported/)
참조 : https://helm.sh/ko/