간단한 helm chart 생성 및 push 예시

진웅·2025년 7월 15일

K8S Basics

목록 보기
20/41

간단한 Helm Chart를 만들고 업로드하는 전체 과정

1. 간단한 Chart 생성

Chart 생성

# 새로운 chart 생성
helm create simple-web-app

# 생성된 디렉토리 구조 확인
tree simple-web-app/

Chart 구조 확인

simple-web-app/
├── Chart.yaml
├── values.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── _helpers.tpl
└── charts/

2. Chart 정보 수정

Chart.yaml 수정

vi simple-web-app/Chart.yaml
apiVersion: v2
name: simple-web-app
description: A simple web application Helm chart
type: application
version: 1.0.0
appVersion: "1.0"
keywords:
  - web
  - nginx
maintainers:
  - name: datalake_adm
    email: admin@example.com

values.yaml 간단히 수정

vi simple-web-app/values.yaml
replicaCount: 1

image:
  repository: nginx
  tag: "1.21"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

3. Chart 검증

문법 검증

# Chart 문법 검증
helm lint simple-web-app/

# 성공 시 출력 예시:
# ==> Linting simple-web-app/
# [INFO] Chart.yaml: icon is recommended
# 1 chart(s) linted, 0 failure(s)

템플릿 렌더링 테스트

# 템플릿 렌더링 확인
helm template simple-web-app ./simple-web-app/

# 특정 값으로 테스트
helm template simple-web-app ./simple-web-app/ --set replicaCount=2

드라이런 테스트

# 실제 설치 없이 테스트
helm install test-release ./simple-web-app/ --dry-run --debug

4. Chart 패키징

Chart 패키징

# Chart를 tgz 파일로 패키징
helm package simple-web-app/

# 패키지 파일 확인
ls -la simple-web-app-1.0.0.tgz

특정 버전으로 패키징

# 버전을 지정하여 패키징
helm package simple-web-app/ --version 1.0.1

# 의존성 포함하여 패키징 (의존성이 있는 경우)
helm package simple-web-app/ --dependency-update

5. Repository 설정 및 업로드

Repository 추가

# Repository 추가 (패스워드는 실제 값으로 변경)
helm repo add nexus-helm http://10.40.20.21:8081/repository/helm-hosted \
  --username datalake_adm \
  --password your_password

# Repository 목록 확인
helm repo list

방법 1: REST API를 통한 업로드

# cURL을 사용한 업로드
curl -u datalake_adm:your_password \
  --upload-file simple-web-app-1.0.0.tgz \
  http://10.40.20.21:8081/repository/helm-hosted/

# 업로드 성공 확인 (200 OK 응답)
echo "Upload status: $?"

방법 2: Helm Push Plugin 사용

# Push plugin이 설치된 경우
helm push simple-web-app-1.0.0.tgz nexus-helm

# 또는 디렉토리에서 직접 push
helm push ./simple-web-app/ nexus-helm

6. 업로드 확인

Repository 업데이트 및 검색

# Repository 인덱스 업데이트
helm repo update

# 업로드된 chart 검색
helm search repo nexus-helm

# 특정 chart 정보 확인
helm search repo nexus-helm/simple-web-app

# Chart 세부 정보 확인
helm show chart nexus-helm/simple-web-app
helm show values nexus-helm/simple-web-app

7. 업로드된 Chart 사용 테스트

Chart 설치 테스트

# Repository에서 chart 설치
helm install my-simple-app nexus-helm/simple-web-app

# 설치 상태 확인
helm list

# 실제 Kubernetes 리소스 확인
kubectl get deployments
kubectl get services
kubectl get pods

Chart 업그레이드 테스트

# 새 버전 업로드 후 업그레이드
helm upgrade my-simple-app nexus-helm/simple-web-app --version 1.0.1

# 롤백 테스트
helm rollback my-simple-app 1

8. 전체 과정 자동화 스크립트

#!/bin/bash
# upload-chart.sh

CHART_NAME="simple-web-app"
CHART_VERSION="1.0.0"
NEXUS_URL="http://10.40.20.21:8081/repository/helm-hosted"
USERNAME="datalake_adm"
PASSWORD="your_password"

echo "1. Chart 생성 및 검증..."
helm create $CHART_NAME
helm lint $CHART_NAME/

echo "2. Chart 패키징..."
helm package $CHART_NAME/

echo "3. Repository 추가..."
helm repo add nexus-helm $NEXUS_URL --username $USERNAME --password $PASSWORD

echo "4. Chart 업로드..."
curl -u $USERNAME:$PASSWORD --upload-file $CHART_NAME-$CHART_VERSION.tgz $NEXUS_URL/

echo "5. Repository 업데이트..."
helm repo update

echo "6. 업로드 확인..."
helm search repo nexus-helm/$CHART_NAME

echo "Chart 업로드 완료!"

스크립트 실행

chmod +x upload-chart.sh
./upload-chart.sh

9. 문제 해결

업로드 실패 시

# Nexus 로그 확인 (Nexus 서버에서)
tail -f /opt/sonatype/nexus/log/nexus.log

# 네트워크 연결 재확인
curl -v -u datalake_adm:your_password http://10.40.20.21:8081/repository/helm-hosted/

# Chart 파일 무결성 확인
helm verify simple-web-app-1.0.0.tgz

권한 문제 시

# Nexus 웹 UI에서 확인할 사항:
# 1. datalake_adm 계정 활성화 여부
# 2. helm-hosted repository에 대한 read/write 권한
# 3. 적절한 role 할당 여부
profile
bytebliss

0개의 댓글