Skip to main content

Helm & Package Management

K8s의 apt/yum — 복잡한 매니페스트를 패키지로 관리


1. Helm이란

1.1 왜 Helm인가

K8s 앱 배포에는 Deployment, Service, ConfigMap, Ingress, PVC 등 여러 YAML 파일이 필요함. Helm은 이를 **하나의 패키지(Chart)**로 묶어 설치/업그레이드/롤백을 관리함.

1.2 핵심 개념

개념설명비유
ChartK8s 매니페스트의 템플릿 묶음apt 패키지 (.deb)
ReleaseChart를 설치한 인스턴스apt install 한 결과
RepositoryChart를 저장/배포하는 서버apt 저장소
values.yamlChart의 설정 오버라이드apt의 설정 파일

2. Helm 기본 사용

# 저장소 추가
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Chart 검색
helm search repo nginx

# 설치
helm install my-nginx bitnami/nginx -n web --create-namespace

# values 오버라이드
helm install my-nginx bitnami/nginx -f custom-values.yaml

# 업그레이드
helm upgrade my-nginx bitnami/nginx -f custom-values.yaml

# 롤백
helm rollout history my-nginx
helm rollback my-nginx 1

# 삭제
helm uninstall my-nginx -n web

# 설치된 Release 목록
helm list -A

3. values.yaml

Chart의 기본값을 오버라이드하는 설정 파일.

# custom-values.yaml
replicaCount: 3
image:
repository: nginx
tag: "1.25"
service:
type: LoadBalancer
port: 80
ingress:
enabled: true
hostname: web.example.com
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi

환경별 values:

values/
├── values-dev.yaml
├── values-staging.yaml
└── values-prod.yaml

helm upgrade my-app ./my-chart -f values/values-prod.yaml

4. 커스텀 Chart 작성

# Chart 스캐폴딩
helm create my-app
my-app/
├── Chart.yaml # 메타데이터 (이름, 버전)
├── values.yaml # 기본 설정값
├── templates/ # K8s 매니페스트 템플릿
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl # 공통 템플릿 함수
│ └── NOTES.txt # 설치 후 메시지
└── charts/ # 의존 Chart

템플릿 문법 (Go template):

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-app.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
{{- toYaml .Values.resources | nindent 10 }}

5. Kustomize

Helm의 대안. 패치 기반으로 매니페스트를 환경별로 커스터마이즈.

kustomize/
├── base/ # 기본 매니페스트
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── dev/
│ ├── kustomization.yaml
│ └── patch-replicas.yaml
└── prod/
├── kustomization.yaml
└── patch-replicas.yaml
# kubectl에 내장
kubectl apply -k overlays/prod/
HelmKustomize
방식템플릿 (Go template)패치 (JSON Merge Patch)
복잡도중간~높음낮음~중간
패키지 공유✅ Repository❌ 디렉토리 기반
의존성 관리
kubectl 내장❌ (별도 설치)
커뮤니티 Chart✅ Artifact Hub

다음 글

→ #12 CI/CD & GitOps