Overview
이번 글에서는 직접 개발한 Kubernetes Operator(예: helios-lb)를 Helm Chart로 패키징하고, GitHub Pages 기능을 활용해 Helm Chart Repository를 구축 및 배포하는 전 과정을 다룬다.
helm create 명령어를 통해 Helm Chart의 기본 구조를 생성하고, CRD, 컨트롤러, RBAC, 서비스 등 필요한 리소스를 templates/에 정의한다. 이후 Helm의 `package, repo index` 명령을 통해 `.tgz` 패키지와 `index.yaml` 을 생성한 후, GitHub의 `gh-pages` 브랜치에 업로드함으로써 Helm Chart를 외부에 서비스할 수 있는 레포지토리를 구축한다.
이 과정을 통해 Helm Chart를 중앙 저장소처럼 관리하고, 외부 사용자나 CI/CD 파이프라인에서 `helm repo add, helm install` 명령만으로 손쉽게 배포할 수 있도록 만든다.
GitOps 기반 환경에서는 ArgoCD 등과 연계해 실시간 배포까지 연동할 수 있어, Helm Chart의 패키징과 공개는 매우 실용적인 배포 전략 중 하나다.
https://github.com/somaz94/helios-lb

📅 관련 글
2022.09.06 - [Container Orchestration/Kubernetes] - Helm 이란? (Kubernetes Package manager)
2023.05.16 - [Container Orchestration/Kubernetes] - Helm Chart 작성방법
2024.11.15 - [Container Orchestration/Kubernetes] - Helm Chart Template 문법
2025.01.06 - [Container Orchestration/Kubernetes] - Helm Base App Chart 생성(With ArgoCD)
Helm Chart 생성 및 패키징
Helm chart 생성
helm을 먼저 설치한다.
# mac
brew install helm
# linux
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm init
# 확인
helm version
helm create 를 사용해서 chart를 생성할 수 있다.
helm create <chart name>
helios-lb 기준으로 설명하도록 하겠다. 각 파일에 용도는 다음과 같다.
helios-lb [main|✔]
13:16 $ tree helm
helm/
├── README.md # 차트 사용 방법, 설정 파라미터 문서
└── helios-lb/ # 메인 차트 디렉토리
├── Chart.yaml # 차트 메타데이터 (버전, 의존성 등)
├── crds/ # CRD 정의 파일
│ └── heliosconfig.yaml # HeliosConfig CRD 스펙
├── templates/ # 쿠버네티스 리소스 템플릿
│ ├── NOTES.txt # 설치 후 표시될 사용 안내
│ ├── _helpers.tpl # 공통으로 사용되는 템플릿 함수
│ ├── crd-clenaup-hook.yaml # CRD 삭제를 위한 Helm hook
│ ├── customresource/ # CR 템플릿
│ ├── deployment.yaml # 컨트롤러 deployment
│ ├── namespace.yaml # 네임스페이스 정의
│ ├── rbac.yaml # 권한 설정 (Role, RoleBinding)
│ ├── service.yaml # 서비스 정의
│ └── serviceaccount.yaml # 서비스어카운트 정의
├── values/ # 사용 사례별 values 파일
│ ├── basic-values.yaml # 기본 설정
│ ├── port-values.yaml # 포트 기반 설정
│ └── weight-values.yaml # 가중치 기반 설정
└── values.yaml # 기본 values 파일
- Chart 생성이 끝났다면 패키징을 해보도록 한다.
Helm 패키징
패키징을 하여 웹 호스팅을 위해 Github Pages를 사용할 수 있다.
GitHub Pages는 GitHub의 특별한 기능으로, gh-pages 브랜치를 자동으로 웹 호스팅해주는 시스템이다. 작동 원리는 다음과 같다.
1. Github Pages 활성화 과정
# 새로운 gh-pages 브랜치 생성
git checkout --orphan gh-pages
# helm repo 생성
helm package ./helm/helios-lb
helm repo index . --url https://somaz94.github.io/helios-lb/helm-repo
# 필요한 파일만 남기고 커밋
git add index.yaml helios-lb-*.tgz
git commit -m "Add helm chart repository"
git push origin gh-pages
2. 자동화 과정
GitHub가 gh-pages 브랜치 감지
- GitHub가 gh-pages 브랜치 감지
- 자동으로 https://[username].github.io/[repository-name] 주소 할당
- 브랜치의 내용을 정적 웹사이트로 제공
3. Helm Repository 구조
gh-pages branch
├── index.yaml # 차트 메타데이터 및 버전 정보
└── helios-lb-0.1.0.tgz # 패키지된 helm 차트
4. 사용방법
# 레포지토리 추가
helm repo add helios-lb https://somaz94.github.io/helios-lb/helm-repo
# 차트 설치
helm install helios-lb helios-lb/helios-lb
5. 주의할점
gh-pages 브랜치에는 Repo 파일 말고 어떠한 파일도 있어서는 안된다.
따라서 아래와 같은 방법으로 chart 생성해주면 된다.
# main 브랜치에서 생성
mkdir helm-repo
cd helm-repo
helm package ../helm/helios-lb
# index.yaml
helm repo index . --url https://somaz94.github.io/helios-lb/helm-repo
cd ../
mv helm-repo ../
# gh-pages 브랜치 재생성
git checkout --orphan gh-pages # 완전히 새로운 브랜치 생성
git rm -rf . # 모든 파일 제거
mv ../helm-repo .
git add .
git commit -m "Add Helm chart repository"
git push origin gh-pages
마무리
Helm Chart는 Kubernetes 리소스를 템플릿으로 관리할 수 있는 강력한 도구이며, GitHub Pages를 이용하면 별도 서버 없이도 Helm Chart 저장소를 손쉽게 운영할 수 있다.
이번 글에서 설명한 것처럼
- Helm Chart 생성
- Helm 패키징
- GitHub Pages로 배포
- Helm Repo 등록 및 설치
의 단계를 거치면 누구나 자신만의 Helm Chart 저장소를 운영할 수 있다.
특히, GitHub를 기반으로 Chart 버전 관리를 자동화하거나 CI/CD에 통합하면 훨씬 더 효율적인 배포 전략이 가능하다.
직접 만든 Operator 또는 애플리케이션을 Helm Chart로 패키징해보고, 이를 웹에 공개해보자. 실무와 오픈소스 프로젝트 모두에 큰 도움이 될 것이다.
Reference
'Container Orchestration > Kubernetes' 카테고리의 다른 글
| Kubernetes IPVS vs iptables (0) | 2025.02.03 |
|---|---|
| Helm Base App Chart 생성(With ArgoCD) (0) | 2025.01.06 |
| Kubernetes Operator(CRD, CR) 생성(With kubebuilder) (0) | 2024.12.17 |
| Kubernetes Operator 및 Custom Resource Definitions(CRDs) 이해하기 (0) | 2024.12.12 |
| Kubernetes Headless Service란? (0) | 2024.12.03 |