Helm
- 헬름은 쿠버네티스용 패키지 매니저 이다. 헬름은 쿠버네티스 환경에서 애플리리케이션을 쉽게 관리하게 해주는 도구로, 수십개의 복잡한 yaml 파일들을 하나의 패키지로 묶어 단순한 하나의 명령어로 관련 리소스 전체를 설치 관리할 수 있다. 설정 값들을 변수처럼 관리하여, 개발/스테이지/운영 환경에 맞게 변경할수 있다.
헬름이 제공하는 기능
쿠버네티스 애플리케이션은 서로 긴밀히 연결된 여러 개의 yaml 파일 스크립트로 모델링 된다. 그리고 실행 시점에서는 여러 개의 레이블로 관리된다. 쿠버네티스는 여러 개의 리소스를 묶어 '애플리케이션'이라는 개념으로 따로 정립하지 않는다. 헬름이 제공하는 기능이 바로 이런 개념이다. 명령행 도구의 형태로 리포지터리 서버와 상호 작용하며, 애플리케이션 패키지를 찾아 내려 받고 쿠버네티스 클러스터에 이를 설치하고 관리하는 기능을 한다.
chart- 헬름의 패키지
release- 차트를 사용하여 클러스터에 실제로 설치된 애플리케이션의 인스턴스
repositody- 차트들을 모아 녾은 저장소
- 리눅스의
apt,yum, 맥OS의brew의 레포지토리 처럼, 헬름 레포지토리 주소를 추가해두면 원격에 있는 다양한 차트들을 내 클러스터에 가져와 설치할 수 있다. Artifact Hub는 전 세계의 공개 헬름 차트를 검색 할 수 있는 중앙 허브 역할을 한다.
헬름으로 애플리케이션 패키징 하기
- 헬름 차트는 쿠버네티스 매니페스트 파일이 담긴 디렉토리 또는 압축 파일이다. 애플리케이션의 매니페스트 파일과 파라미터 값을 선정하고, 정의상의 실제 설정값을 템플릿 변수로 수정하면 직접 헬름 차트를 만들 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }} # 릴리스 이름의 템플릿 변수
labels:
app: {{ .Values.appName }} # appName 값의 템플릿 변수- 템플릿 변수는 두겹 중괄호로 작성되며 여러 출처에서 참조하여 값이 치환된다.
Release객체는 install 또는 upgrade 명령을 실행할 때 관련 정보를 담아 생성된다.Values객체는 차트에 포함된 기본갑에 사용자가 지정한 값을 오버라이드한 정보를 담아 생성된다.
헬름 차트 템플릿 구성
chart.yaml: 차트의 이름이나 버전 등 메타데이터 기록한 파일values.yaml: 파라미터 값의 기본값을 기록한 파일templates 디렉토리: 템플릿 변수가 포함된 쿠버네티스 매니페스트 파일을 담은 디렉토리헬름을 이용해서 얻을 수 있는 가장 큰 이점은 하나의 차트로 동일한 애플리케이션을 여러 벌 시행할 수 있다는 점이다. kubectl로는 리소스 이름이 동일하기 때문에 기존 리소스를 업데이트 할 뿐 여러벌의 애플리케이션은 실행되지 않지만 정의에서 유일값을 갖는 부분을 템플릿 변수로 만들면 헬름을 이용하여 동일한 애플리케이션을 원하는 수만큼 실행 시킬 수 있다.
헬름의 레포지토리 호스팅
ChartMuseum- 과거 helm의 초창기에는 stable repository 라고 하는 공식 헬름 저장소를 운영했지만, 운영과 보안, 성능상의 문제롤 현재는 각 프로젝트가 직접 차트를 관리하고 배포하는 모델로 변경되었다.
- 차트 뮤지엄 자체도 헬름 차트 형태로 설치할 수 있으므로 조직 내에서 비공개 헬름 레포지토리를 마련할 때 편리하다.
차트를 레포지토리에 배포하기 위해선 먼저 패키징을 거쳐야 한다. 먼저 차트를 zip 파일로 압축을 한 후 서버에 압축 파일을 업로드 하고 레포지터리 인덱스에 새로운 차트 정보를 추가해야한다. 인덱스에 차트 정보 추가는 차트 뮤지엄에서 자동으로 진행한다.
차트 간 의존 관계 모델링
차트 간 의존 관계는 유연해야 한다. 상위 차트가 하위 차트를 필요로 하는 관계이며, 하위 차트는 독립된 차트여야 한다. 하위 차트의 정의는 최대한 일반적으로 활용할 수 있도록 템플릿 변수를 사용해야 한다. 또한 특정한 애플리케이션에만 쓸모가 있는 요소라면 해당 요소는 하위 차트가 아니라 애플리케이션 차트에 직접 포함되는 것이 옳다.
의존 차트를 사용하기 위해선 상위 차트의 정의에서 해당 차트를 의존 차트 목록에 추가하여 하위 차트로 삼아야 한다. 그 다음 하위 차트의 설정값을 상위 차트의 정의에서 지정한다. 이 때 하위 차트의 설정값을 참조할 때는 설정값 이름 앞에 차트 이름을 붙인다.