차트 (Charts)
차트 (Charts)
Helm에서 배포의 기본 단위는 **차트(chart)**라는 패키지 형식이에요. 차트는 서로 연관된 쿠버네티스 리소스들을 파일 묶음으로 정리해 둔 것이고요, 단순한 Pod 하나부터 HTTP 서버와 데이터베이스, 캐시를 갖춘 웹앱 스택까지 폭넓게 표현할 수 있어요. 같은 구조를 여러 번 반복해서 배포할 때 차트 하나로 정리해 두면 훨씬 편하죠.
출처
Helm uses a packaging format called charts. A chart is a collection of files that describe a related set of Kubernetes resources. 출처: https://helm.sh/docs/topics/charts/
Chart.yaml 에 무엇을 적나요
모든 차트의 중심에는 Chart.yaml 파일이 있어요. 이 파일이 차트의 정체성을 결정하는 메타데이터를 담고 있고요.
apiVersion: 차트 스키마 버전이에요. Helm 3 이후로는v2를 써요.name·version: 차트 이름과 버전이고, 버전은 SemVer 2 규칙을 따라요.appVersion: 이 차트가 배포하는 애플리케이션의 버전을 나타내요.deprecated: 저장소에서 차트를 더 이상 권장하지 않을 때true로 표시해요. 저장소의 최신 버전이 deprecated로 표시되면 차트 전체가 폐기된 것으로 간주돼요.
차트 디렉터리 구조
helm create로 차트를 만들면 다음과 같은 뼈대가 잡혀요.
mychart/
Chart.yaml
values.yaml
charts/
templates/
values.yaml: 사용자가 바꿀 수 있는 기본 설정값이 들어 있어요.templates/: 실제 쿠버네티스 매니페스트를 만드는 템플릿 파일들이 있고요.charts/: 이 차트가 의존하는 하위 차트(subchart)를 보관해요.
차트 의존성 (dependencies)
다른 차트가 필요하면 Chart.yaml의 dependencies 목록에 적어요. 각 항목은 name, version, repository로 구성돼요.
dependencies:
- name: apache
version: 1.2.3
repository: https://example.com/charts
- name: mysql
version: 3.2.1
repository: https://another.example.com/charts
repository는 차트 저장소의 전체 URL을 넣으면 되고요, 로컬에서 helm repo add로 해당 저장소를 추가해 둬야 해요. 의존성을 내려받을 때는 helm dependency update(줄여서 helm dep up)를 실행해요.
$ helm dep up foochart
Hang tight while we grab the latest from your chart repositories...
helm 으로 차트 다루기
helm 명령이 차트 관리를 도와줘요. 새 차트를 만들고, 편집한 뒤 압축하고, 문제가 없는지 검사하는 흐름이에요.
$ helm create mychart
Created mychart/
$ helm package mychart
Archived mychart-0.1.0.tgz
$ helm lint mychart
No issues found
helm create는 차트 뼈대를 만들어 주고,helm package는 차트 디렉터리를 배포용 압축 파일(.tgz)로 묶고,helm lint는 포맷이나 메타데이터의 문제를 찾아줘요.
차트 저장소로 공유하기
차트를 다른 사람과 나누는 권장 방법은 **차트 저장소(chart repository)**예요. 저장소는 YAML과 tar 파일을 GET 요청으로 제공할 수 있는 HTTP 서버면 충분하고요, 그 정체는 index.yaml이라는 목록 파일이 결정해요. 클라이언트 쪽에서는 helm repo 명령으로 저장소를 관리해요. 다만 Helm 자체는 저장소 서버에 차트를 업로드하는 도구는 제공하지 않는다는 점을 알아 두세요.
더 알아보기
- 공식: Charts
- 공식: The Chart Repository Guide
- 공식: SemVer 2