안녕하세요!
이번에는 Helm을 활용해 Kubernetes 애플리케이션을 패키징·배포·관리하는 과정을 단계별로 살펴보겠습니다.
차트 기본 구조 이해부터, helm install · helm upgrade · helm rollback 실습까지 모두 다룹니다.
⸻
📋 목차
1. Helm 차트란?
2. 프로젝트 초기 설정
3. Chart.yaml·values.yaml 구성
4. 차트 템플릿(Templates) 작성
5. 배포 및 릴리즈 관리 (install, upgrade)
6. 롤링 업데이트 전략
7. 롤백(Rollback)·버전 관리
8. 실전 팁 & 주의사항
9. 마무리
⸻
1️⃣ Helm 차트란?
• 정의: Kubernetes 리소스를 템플릿화하고, 값(values.yaml)을 분리해 재사용 가능한 패키지로 묶은 것
• 장점
• 버전 관리(Versions) → Chart.yaml에 명시
• 환경별 설정 분리 → values-{env}.yaml
• 템플릿 언어(Golang 템플릿) 지원 → 동적 리소스 생성
⸻
2️⃣ 프로젝트 초기 설정
# Helm 설치 확인
helm version
# 새 차트 생성
helm create myapp-chart
cd myapp-chart
# 디렉터리 구조
# myapp-chart/
# ├─ Chart.yaml
# ├─ values.yaml
# ├─ charts/
# └─ templates/
# ├─ deployment.yaml
# ├─ service.yaml
# └─ _helpers.tpl
• helm create 명령으로 기본 차트 구조 자동 생성
• templates/ 폴더에 Kubernetes 리소스 템플릿 배치
⸻
3️⃣ Chart.yaml·values.yaml 구성
# Chart.yaml
apiVersion: v2
name: myapp-chart
description: "MyApp Kubernetes 차트"
version: 0.1.0
appVersion: "1.0.0"
# values.yaml (기본값)
replicaCount: 2
image:
repository: myrepo/myapp
tag: "1.0.0"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi
• Chart.yaml에 차트 메타정보·버전 설정
• values.yaml에 환경별 변경 가능한 파라미터 정의
⸻
4️⃣ 차트 템플릿(Templates) 작성
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "myapp-chart.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include "myapp-chart.name" . }}
template:
metadata:
labels:
app: {{ include "myapp-chart.name" . }}
spec:
containers:
- name: myapp
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
# templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ include "myapp-chart.fullname" . }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
selector:
app: {{ include "myapp-chart.name" . }}
• {{ .Values.xxx }} 로 values.yaml 값 참조
• toYaml · nindent 함수로 복잡한 블록 삽입
⸻
5️⃣ 배포 및 릴리즈 관리 (install, upgrade)
# 1) 네임스페이스 생성
kubectl create namespace myapp-ns
# 2) 초기 설치 (install)
helm install myapp-release ./myapp-chart \
--namespace myapp-ns \
--values values.yaml
# 3) 상태 확인
kubectl get all -n myapp-ns
# 4) 설정 변경 후 업그레이드 (upgrade)
helm upgrade myapp-release ./myapp-chart \
--namespace myapp-ns \
--set image.tag=1.1.0
• helm install 시 동시에 릴리즈 이름(myapp-release) 부여
• helm upgrade 로 값 변경·템플릿 수정 반영
⸻
6️⃣ 롤링 업데이트 전략
• 기본 전략: Kubernetes Deployment spec.strategy.type: RollingUpdate
• 튜닝 예시 (templates/deployment.yaml):
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
• maxSurge: 새 파드 초과 생성 수량
• maxUnavailable: 일시 비가용 파드 수량
• 무중단 배포를 위한 파라미터 조정
⸻
7️⃣ 롤백(Rollback)·버전 관리
# 릴리즈 히스토리 조회
helm history myapp-release --namespace myapp-ns
# 특정 리비전으로 롤백
helm rollback myapp-release <REVISION> --namespace myapp-ns
• helm history 로 버전별 변경 이력 확인
• helm rollback 으로 이전 상태로 되돌리기
⸻
8️⃣ 실전 팁 & 주의사항
• Environment별 values 파일:
• values-dev.yaml, values-prod.yaml로 분리 → -f 플래그로 지정
• 헬퍼 함수 활용:
• templates/_helpers.tpl에 반복 로직·네임 생성 함수 정의
• 차트 테스트:
• helm lint → 문법·구조 검사
• helm template → 렌더링 결과 확인
• 시크릿 관리:
• 암호·API 키는 helm secrets 플러그인·External Secrets 사용
⸻
9️⃣ 마무리
Helm 차트를 제대로 작성하면
• 표준화된 배포
• 버전별 관리
• 빠른 롤백
를 손쉽게 수행할 수 있습니다.
위 예제와 팁을 참고해 여러분의 Kubernetes 워크플로우를
더욱 안정적이고 효율적으로 만들어 보세요!
'IT & Tech 정보' 카테고리의 다른 글
🚀 GitHub Actions로 CI/CD 파이프라인 구성 (0) | 2025.05.25 |
---|---|
🚀 AWS Lambda + API Gateway 서버리스 애플리케이션 구현 (0) | 2025.05.25 |
🚀 Dockerfile 멀티스테이지 빌드 최적화 (0) | 2025.05.25 |
🚀 Redis 캐시 레이어 도입: Node.js + ioredis (0) | 2025.05.25 |
🚀 GraphQL 서버 설계 및 구현: Apollo Server + TypeScript (0) | 2025.05.25 |