Post

클라우드프로그래밍 12주차 — Helm 차트 패키징·레지스트리·의존성

직접 만든 Helm 차트를 lint·package해 ChartMuseum에 올리고, 차트 간 의존성까지 관리한 12주차 기록.

클라우드프로그래밍 12주차 — Helm 차트 패키징·레지스트리·의존성

12주차는 직접 작성한 Helm 차트를 검증·패키징하고, 차트 레지스트리(ChartMuseum)에 올려 배포하며, 차트 간 의존성 을 관리한다. 7주차 클러스터에서 진행했다.

핵심 개념

  • 차트 작성: Chart.yaml(메타) + values.yaml(기본값) + templates/(Go 템플릿 매니페스트).
  • lint / package: helm lint(문법 검증) → helm package(.tgz 아카이브 생성).
  • ChartMuseum: 패키징한 차트를 올려 helm repo 로 공유하는 사설 차트 저장소.
  • 의존성(dependency): 부모 차트가 다른 차트를 dependencies 로 포함하고, helm dependency build 로 내려받아 묶어 배포한다.

차트 작성부터 의존성까지

차트 작성 + lint + package

diamol/ch03-web-ping 이미지를 사용하는 web-ping 차트를 작성했다.

1
2
3
4
5
6
7
$ helm lint web-ping
==> Linting web-ping
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed

$ helm package web-ping
Successfully packaged chart and saved it to: .../web-ping-0.1.0.tgz

ChartMuseum(사설 레지스트리)에 업로드

1
2
3
4
5
6
7
$ docker run -d -p 8008:8080 --name chartmuseum -e STORAGE=local -e STORAGE_LOCAL_ROOTDIR=/tmp/charts ghcr.io/helm/chartmuseum:v0.16.2
$ curl --data-binary "@web-ping-0.1.0.tgz" http://localhost:8008/api/charts
{"saved":true}

$ curl -s http://localhost:8008/index.yaml | grep -E "web-ping|version:"
  web-ping:
    version: 0.1.0

레지스트리에서 검색 + 설치 (값 오버라이드)

1
2
3
4
5
6
7
8
9
10
11
12
$ helm repo add local http://localhost:8008
$ helm repo update local
$ helm search repo local/web-ping
NAME             CHART VERSION   APP VERSION   DESCRIPTION
local/web-ping   0.1.0           1.0           Pings a website on a schedule (diamol web-ping)

$ helm install --set targetUrl=kiamol.net wp1 local/web-ping
NAME: wp1   STATUS: deployed   REVISION: 1

$ kubectl logs -l app=wp1-web-ping --tail=2
** web-ping ** Pinging: kiamol.net; method: HEAD; 3000ms intervals
Got response status: 200; duration: 286ms          # 오버라이드한 kiamol.net 으로 동작

차트 의존성 (parent → web-ping)

부모 차트 pingerweb-ping 을 의존성으로 선언한다.

1
2
3
4
5
6
7
8
9
$ helm dependency build pinger
Saving 1 charts
Downloading web-ping from repo http://localhost:8008
$ ls pinger/charts/
web-ping-0.1.0.tgz                                 # 의존성 차트가 내려받아짐

$ helm dependency list pinger
NAME       VERSION   REPOSITORY              STATUS
web-ping   0.1.0     http://localhost:8008   ok

정리

1
$ helm uninstall wp1 && docker rm -f chartmuseum && helm repo remove local

정리

5주차에서 Docker 이미지를 로컬 레지스트리에 push했던 패턴이, 여기서는 Helm 차트를 ChartMuseum에 push하는 형태로 반복된다(“아티팩트 + 레지스트리”의 일반화). helm dependency 로 여러 차트를 한 배포 단위로 묶는 것은 다수의 마이크로서비스를 하나의 릴리스로 관리하는 방식에 해당한다. lint → package → push → install 흐름은 쿠버네티스 위에서 배포를 자동화하는 파이프라인의 기본 구성이다.

This post is licensed under CC BY 4.0 by the author.