본문 바로가기
공부/Kubernetes

[k8s/helm] 자체 helm chart 만들고 Artifact HUB 에 올려보기

by haejang 2024. 4. 21.
728x90
728x90

 

 

결과물 >> https://artifacthub.io/packages/helm/suminhong/ingress-nginx-external-lb

 

ingress-nginx-external-lb 1.0.0 · suminhong/suminhong

Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer with External AWS LB

artifacthub.io

 

위 차트는 ingress-nginx에 별도 LB를 매핑시키고 싶은 경우 사용 가능하다. 아래 글에 히스토리가 적혀있다.

https://honglab.tistory.com/304

 

 

helm chart를 만드는것은 많이 해봤지만 Artifact HUB에 올리는건 처음 해봤는데,

생각보다 깔끔하게 정리된 글을 못찾았어서 살짝 헤맸다. (내가 못찾은걸지도)

 

일단 해보자!

 

# helm-chart 용 repository 만들고 github page 배포하기

먼저 난 특정 차트만을 위한게 아닌, 내 커스텀 차트들을 모조리 관리할 레포지토리를 만들었다.

https://github.com/suminhong/helm-chart

 

GitHub - suminhong/helm-chart: custom helm chart

custom helm chart. Contribute to suminhong/helm-chart development by creating an account on GitHub.

github.com

 

레포지토리 설정(Settings) > Pages 를 간 후, 브랜치를 main (또는 master나 release 등 원하는 브랜치) 로 설정하고 저장해주면 알아서 github page가 배포된다. (첫 배포까지는 시간이 조금 걸림)

 

github page는 https://<OWNER>.github.io/<REPO> 로 배포된다. >> https://suminhong.github.io/helm-chart/

 

# helm chart 만들기

위에서도 말했지만, 난 여러 자체 차트를 이 레포에서 다 관리할 계획을 가지고 있다.

따라서 별도 charts/ 란 폴더를 만들고, 그 안에 ingress-nginx-external-lb/ 폴더를 만들어 차트를 구성해 주었다.

 

여기서 차트를 어떻게 만드느냐에 대해서는 본 글에 주제와 어긋나니 패스하지만,

Artifact HUB에 올리기 위해 Chart.yaml만 같이 훑어보자.

예시) https://github.com/suminhong/helm-chart/blob/main/charts/ingress-nginx-external-lb/Chart.yaml

apiVersion: v2
appVersion: # 애플리케이션의 버전
description: # 차트 설명
home: # Artifact hub에 hompage로 표시될 url
icon: # Artifact hub에 표시될 차트 icon url
keywords: # Artifact hub에 표시될 키워드들 (리스트)
name: # 차트 이름
sources: # Artifact hub에 Source (Gtihub) 로 표시될 url
version: # 차트 버전

 

필요한것만 후딱 작성하자.

 

# helm chart package & create index

이제 진짜 artifact hub에 올리기 위한 준비를 한다.

먼저 위에서 만들어둔 차트를 패키징해줘야 한다.

helm package <차트 경로>
helm package charts/ingress-nginx-external-lb

 

그럼 현재 경로에 차트를 패키징한 tgz 파일이 생성된다.

난 이 tgz 파일들은 모두 pkg/ 폴더 밑으로 모아두겠다. (일반적인건 아니고, 그냥 내가 그렇게 하고 싶은 것)

-> 이렇게 되면 이 tgz 파일들은 https://<OWNER>.github.io/<REPO>/pkg/ 경로에서 다운받을 수 있게 된다.

 

이제 만들어진 tgz 파일들을 artifact hub에서 찾을 수 있게 index file을 만들어줘야 한다.

여기서 index file은 helm repo의 역할이라고 생각하면 되며, 한 인덱스 파일에 여러 차트들이 모두 등록 가능하다.

index file은 tgz 파일들이 있는 pkg/ 폴더를 참조해야 하며, 다운받을 수 있는 경로를 지정해주어야 한다.

helm repo index <tgz 파일들이 있는 경로> --url <tgz 파일들을 다운받을 수 있는 경로>
helm repo index pkg/ --url https://suminhong.github.io/helm-chart/pkg

 

이렇게 하면 pkg/ 경로 아래에 index.yaml 이 생성된다.

만약 이대로 둔다면 helm repo add 시에

helm repo add https://suminhong.github.io/helm-chart/pkg

 

로 해야되는데... 그러기 싫으므로 index.yaml 파일은 루트 경로로 옮겨두겠다.

mv pkg/index.yaml .

 

그리고 이 내용들을 모두 git에 올리고, github page가 배포될때까지 조금만 기다려주자.

이제 차트를 등록하기 위한 준비가 모두 끝났다.

 

# Artifact HUB에 등록

먼저 Artifact HUB에 로그인을 해줘야 한다. 계정이 없으면 Github 계정으로 쉽게 가입이 가능하다.

 

로그인 후, 내 프로필(?) 같은 아이콘을 누르고, Control Panel 로 진입한다.

 

repository add 클릭

 

레포지토리 이름을 원하는대로 작성 후, Url에 <index.yaml 파일이 존재하는 github page url> 을 작성해준다.

 

해당 경로에 index.yaml 파일이 없으면 등록되지 않는다.

무사히 등록이 완료되면, 조금 기다려야 할 수도 있지만, 

index.yaml에 등록되어 있는 차트를 artifact hub에서 검색할 수 있게 된다.

우왕!

 

helm repository 뱃지도 원한다면 바로 발급 가능하다.

 

 

끝!

 

 

# Ref

 

 

728x90
728x90

댓글