차트 (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 자체는 저장소 서버에 차트를 업로드하는 도구는 제공하지 않는다는 점을 알아 두세요.

더 알아보기