Container Orchestration/Kubernetes

Helm Chart 생성 및 패키징 (gh-pages)

Somaz 2024. 12. 20. 13:25
728x90
반응형

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

https://github.com/somaz94/helios-lb

728x90
반응형