차트 저장소 가이드
이 섹션에서는 Helm 차트 저장소를 만들고 작업하는 방법을 설명한다. 고수준에서 차트 저장소는 패키지형 차트를 저장하고 공유할 수 있는 장소다.
분산 커뮤니티 Helm 차트 저장소는 Artifact Hub에 있으며 참여를 환영한다. 하지만 Helm도 자신만의 차트 저장소를 만들고 운영할 수 있게 해준다. 이 가이드에서는 그렇게 하는 방법을 설명한다. 차트 저장소를 만들려고 한다면 대신 OCI 레지스트리 사용을 고려해 볼 수도 있다.
전제 조건
차트 저장소 생성
차트 저장소 는 index.yaml 파일과 선택적으로 일부
패키지화된 차트를 저장하는 HTTP 서버다. 차트를 공유할 준비가 되면
차트 저장소에 업로드하는 것이 가장 선호되는 방법이다.
Helm 2.2.0부터 저장소에 대한 클라이언트 측 SSL 인증이 지원된다. 다른 인증 프로토콜은 플러그인으로 사용할 수 있다.
차트 저장소는 YAML과 tar 파일을 서비스할 수 있고 GET 요청에 응답할 수 있는 모든 HTTP 서버가 될 수 있기 때문에, 자신만의 차트 저장소를 호스팅하는 것에 관한 한 수많은 옵션이 있다. 예를 들어 Google Cloud Storage(GCS) 버킷, Amazon S3 버킷, GitHub Pages를 사용하거나 직접 웹 서버를 만들 수도 있다.
차트 저장소 구조
차트 저장소는 패키지형 차트와 저장소에 있는 모든 차트의 인덱스를 가진 index.yaml 이라는
특수 파일로 구성된다. 종종 index.yaml 에 기술된 차트도
출처 파일처럼 동일한 서버에서
호스팅된다.
예를 들어, 저장소 https://example.com/charts 의 레이아웃은
다음과 같을 수 있다:
charts/
|
|- index.yaml
|
|- alpine-0.1.2.tgz
|
|- alpine-0.1.2.tgz.prov
이 경우에는 인덱스 파일에 하나의 차트, 즉 Alpine 차트에 대한 정보가 포함되며,
해당 차트에 대한 다운로드 URL
https://example.com/charts/alpine-0.1.2.tgz 을 제공한다.
차트 패키지가 index.yaml 파일과 동일한 서버에 위치할 필요는 없다.
하지만 그렇게 하는 것이 종종 가장 쉽다.
인덱스 파일
인덱스 파일은 index.yaml 이라는 yaml 파일이다. 차트의
Chart.yaml 파일의 내용을 포함하여 패키지에 대한 메타데이터가
포함되어 있다. 적합한 차트 저장소는 인덱스 파일이 있어야 한다.
인덱스 파일에는 차트 저장소의 각 차트에 대한 정보가 들어 있다.
helm repo index 명령은 패키지형 차트를 포함하는 지정된
로컬 디렉토리를 기반으로 인덱스 파일을 생성한다.
인덱스 파일의 예:
apiVersion: v1
entries:
alpine:
- created: 2016-10-06T16:23:20.499814565-06:00
description: Deploy a basic Alpine Linux pod
digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
home: https://helm.sh/helm
name: alpine
sources:
- https://github.com/helm/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.2.0.tgz
version: 0.2.0
- created: 2016-10-06T16:23:20.499543808-06:00
description: Deploy a basic Alpine Linux pod
digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727
home: https://helm.sh/helm
name: alpine
sources:
- https://github.com/helm/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.1.0.tgz
version: 0.1.0
nginx:
- created: 2016-10-06T16:23:20.499543808-06:00
description: Create a basic nginx HTTP server
digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff
home: https://helm.sh/helm
name: nginx
sources:
- https://github.com/helm/charts
urls:
- https://technosophos.github.io/tscharts/nginx-1.1.0.tgz
version: 1.1.0
generated: 2016-10-06T16:23:20.499029981-06:00
차트 저장소 호스팅
이 절은 차트 저장소를 서비스하는 몇 가지 방법을 보여준다.
Google Cloud Storage
첫 번째 단계는 GCS 버킷 만들기다. fantastic-charts 라고 부를 것이다.

다음으로, 버킷 권한을 수정하여 버킷을 공개하자.

버킷을 공개하기 위해 다음 줄을 넣자:

축하한다, 이제 차트를 서비스할 빈 GCS 버킷이 준비되었다!
Google Cloud Storage 명령줄 도구 또는 GCS 웹 UI를 사용하여 차트
저장소를 업로드할 수 있다. 공용 GCS 버킷은 https://bucket-name.storage.googleapis.com/
주소로 간단한 HTTPS를 통해 접근할 수 있다.
Cloudsmith
Cloudsmith를 사용하여 차트 저장소를 설정할 수도 있다. Cloudsmith가 있는 차트 저장소에 대한 자세한 내용은 여기를 참조하자.
JFrog Artifactory
JFrog Artifactory를 사용하여 차트 저장소를 만들 수도 있다. JFrog Artifactory가 있는 차트 저장소에 대한 자세한 내용은 여기를 참조하자.
GitHub Pages 예제
비슷한 방법으로 GitHub Pages를 사용하여 차트 저장소를 만들 수 있다.
GitHub은 두 가지 방법으로 정적 웹 페이지를 서비스할 수 있도록 한다:
docs/디렉토리의 내용을 서비스하도록 프로젝트를 설정- 특정 브랜치를 서비스하도록 프로젝트를 설정
두 번째 방법을 택할 것이지만, 첫 번째 방법도 똑같이 쉽다.
첫 번째 단계는 gh-pages 브랜치를 만드는 것이다. 로컬에서 만들 수 있다:
$ git checkout -b gh-pages
GitHub 저장소의 Branch 버튼을 눌러 웹 브라우저를 통해 만들 수도 있다:

그런 다음 gh-pages 브랜치가 GitHub Pages로 설정되어 있는지 확인하고, 저장소의 Settings를 클릭한 다음 GitHub Pages 섹션으로 스크롤하여 아래와 같이 설정하자:

기본적으로 Source는 gh-pages 브랜치로 설정된다. 기본적으로 설정되어 있지 않으면 선택하자.
원한다면 거기서 사용자 지정 도메인(custom domain) 을 사용할 수 있다.
그리고 차트를 서비스할 때 HTTPS가 사용되도록 Enforce HTTPS가 선택되어 있는지 확인하자.
이러한 설정에서 기본 브랜치를 사용하여 차트 코드를 저장하고
gh-pages 브랜치를 차트 저장소로 사용할 수 있다.
예: https://USERNAME.github.io/REPONAME. 데모 TS Charts
저장소는 https://technosophos.github.io/tscharts/ 에서
접근할 수 있다.
GitHub Pages를 사용하여 차트 저장소를 호스팅하기로 결정했다면 Chart Releaser Action을 확인하자. Chart Releaser Action은 helm/chart-releaser CLI 도구를 사용하여 GitHub 프로젝트를 자체 호스팅 Helm 차트 저장소로 전환하는 GitHub Action 워크플로우다.
일반 웹 서버
Helm 차트를 서비스하도록 일반 웹 서버를 설정하려면 다음 작업만 수행하면 된다:
- 서버가 서비스할 수 있는 디렉토리에 인덱스 및 차트 저장
- 인증 요구 사항 없이
index.yaml파일에 접근할 수 있는지 확인 yaml파일이 올바른 내용 유형(text/yaml또는text/x-yaml)과 함께 서비스되는지 확인
예를 들어, $WEBROOT/charts 에서 차트를 서비스하려면
웹 루트에 charts/ 디렉토리가 있는지 확인하고 인덱스 파일과
차트를 해당 폴더 안에 넣자.
ChartMuseum 저장소 서버
ChartMuseum은 Go 언어로 작성된 오픈소스 Helm 차트 저장소 서버로, Google Cloud Storage, Amazon S3, Microsoft Azure Blob Storage, Alibaba Cloud OSS Storage, Openstack Object Storage, Oracle Cloud Infrastructure Object Storage, Baidu Cloud BOS Storage, Tencent Cloud Object Storage, DigitalOcean Spaces, Minio, etcd를 포함한 클라우드 스토리지 백엔드를 지원한다.
ChartMuseum 서버를 사용하여 로컬 파일 시스템에서 차트 저장소를 호스팅할 수도 있다.
GitLab Package Registry
GitLab을 사용하면 프로젝트의 Package Registry에 Helm 차트를 게시할 수 있다. GitLab에서 Helm 패키지 저장소를 설정하는 방법에 대한 자세한 내용은 여기를 참조하자.
차트 저장소 관리
차트 저장소가 생겼으니 이 가이드의 마지막 부분에서는 해당 저장소에서 차트를 유지하는 방법을 설명한다.
차트 저장소에 차트 저장
차트 저장소가 생겼으니 차트와 인덱스 파일을 저장소에
업로드하자. 차트 저장소의 차트는
올바르게 패키징하고(helm package chart-name/) 버전(SemVer 2
가이드라인에 따라)이 제공되어야 한다.
다음 단계는 예제 워크플로우를 구성하지만, 차트 저장소에 차트를 저장하고 갱신하는 데 원하는 워크플로우를 모두 사용해도 좋다.
패키지형 차트가 준비되면 새 디렉토리를 만들고 패키지형 차트를 해당 디렉토리로 이동시키자.
$ helm package docs/examples/alpine/
$ mkdir fantastic-charts
$ mv alpine-0.1.0.tgz fantastic-charts/
$ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com
마지막 명령은 방금 생성한 로컬 디렉토리의 경로와
원격 차트 저장소의 URL을 사용하여 지정된 디렉토리
경로 내에 index.yaml 파일을 구성한다.
이제 동기화 도구를 사용하거나 수동으로 차트 저장소에 차트 및 인덱스 파일을 업로드할 수 있다. Google Cloud Storage를 사용하는 경우 gsutil 클라이언트를 사용하는 이 예제 워크플로우를 확인하자. GitHub의 경우 해당 목적지 브랜치에 차트를 간단히 넣을 수 있다.
기존 저장소에 새로운 차트 추가
저장소에 새로운 차트를 추가할 때마다 인덱스를 재생성해야 한다.
helm repo index 명령은 로컬에서 찾은 차트만 포함하여
index.yaml 파일을 처음부터 완전히 재구성한다.
그러나 --merge 플래그를 사용하여 새 차트를 기존 index.yaml 파일(GCS와 같은
원격 저장소로 작업할 때 유용한 옵션)에 점진적으로 추가할 수 있다. 자세히 알아보려면
helm repo index --help를 실행하자.
수정된 index.yaml 파일과 차트를 모두 업로드하자. 그리고 출처 파일을 생성했다면
그것도 업로드하자.
다른 사람과 차트 공유
차트를 공유할 준비가 되면 다른 사람에게 저장소의 URL을 알려주자.
그들은 저장소를 조회하기 위해 사용하고자 하는
이름과 helm repo add [NAME] [URL] 명령을 통해
저장소를 Helm 클라이언트에 추가할 것이다.
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
$ helm repo list
fantastic-charts https://fantastic-charts.storage.googleapis.com
차트가 HTTP 기본 인증을 지원할 경우 사용자 이름과 암호도 제공할 수 있다:
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com --username my-username --password my-password
$ helm repo list
fantastic-charts https://fantastic-charts.storage.googleapis.com
참고: 저장소에 유효한 index.yaml이 포함되어 있지 않으면 저장소가 추가되지 않는다.
참고: Helm 저장소가 자체 서명된 인증서를 사용하는 경우
CA 검증을 건너뛰기 위해서
helm repo add --insecure-skip-tls-verify ... 를 사용할
수 있다.
그 후에 사용자들은 당신의 차트를 검색할 수 있을 것이다.
저장소를 업데이트한 후에는 사용자들이 helm repo update 명령을
사용하여 최신 차트 정보를 가져올 수 있다.
내부에서 helm repo add 및 helm repo update 명령은
index.yaml 파일을 가져와 $XDG_CACHE_HOME/helm/repository/cache/ 디렉토리에
저장한다. 여기는 helm search 기능이
차트에 대한 정보를 찾는 곳이다.