클라우드프로그래밍 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)
부모 차트 pinger 가 web-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.