간단한 Helm Chart를 만들고 업로드하는 전체 과정
# 새로운 chart 생성
helm create simple-web-app
# 생성된 디렉토리 구조 확인
tree simple-web-app/
simple-web-app/
├── Chart.yaml
├── values.yaml
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ └── _helpers.tpl
└── charts/
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
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
# 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
# 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
# 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
# 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: $?"
# Push plugin이 설치된 경우
helm push simple-web-app-1.0.0.tgz nexus-helm
# 또는 디렉토리에서 직접 push
helm push ./simple-web-app/ nexus-helm
# 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
# Repository에서 chart 설치
helm install my-simple-app nexus-helm/simple-web-app
# 설치 상태 확인
helm list
# 실제 Kubernetes 리소스 확인
kubectl get deployments
kubectl get services
kubectl get pods
# 새 버전 업로드 후 업그레이드
helm upgrade my-simple-app nexus-helm/simple-web-app --version 1.0.1
# 롤백 테스트
helm rollback my-simple-app 1
#!/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
# 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 할당 여부