헬름이란?
헬름(Helm)은 쿠버네티스용 패키지 관리 도구다. 여러 개의 YAML 매니페스트 스크립트를 하나의 차트(Chart) 단위로 묶어 공개 또는 비공개 리포지터리에 공유하고, 명령 한 번으로 설치/업그레이드/삭제를 관리할 수 있게 해준다.
💡 시험 포인트: 헬름 = 쿠버네티스의 패키지 관리자. apt, brew, npm처럼 동작한다고 이해하면 됨.
# 리포지터리 추가
helm repo add kiamol https://kiamol.net
helm repo update
# 차트 검색
helm search repo vweb --versions
# 차트 기본값 확인
helm show values kiamol/vweb --version 1.0.0
# 설치 (기본값 오버라이드)
helm install --set servicePort=8010 --set replicaCount=1 ch10-vweb kiamol/vweb --version 1.0.0
# 설치된 릴리스 목록
helm ls
# 업그레이드
helm upgrade --set servicePort=8010 --set replicaCount=3 ch10-vweb kiamol/vweb --version 1.0.0
# 삭제
helm uninstall ch10-vweb
헬름 차트 구조
헬름 차트의 실체는 쿠버네티스 매니페스트 파일이 담긴 디렉터리 또는 압축 파일이다. 핵심 파일 구조:
파일/디렉터리 역할
| Chart.yaml | 차트 메타데이터 (이름, 버전, 의존성 등) |
| values.yaml | 파라미터 기본값 정의 (사용자가 오버라이드 가능) |
| templates/ | 실제 쿠버네티스 YAML 파일 (템플릿 변수 포함) |
💡 시험 포인트: values.yaml은 차트의 파라미터 기본값을 기록하는 파일이다. helm show values 명령으로 확인 가능.
템플릿 변수 문법: 이중 중괄호 {{ }} 사용
metadata:
name: {{ .Release.Name }} # 릴리스 이름
labels:
kiamol: {{ .Values.kiamolChapter }} # values.yaml의 값
차트 간 의존 관계 모델링
Chart.yaml에서 dependencies 필드로 조건부 의존 관계를 설정할 수 있다.
apiVersion: v2
name: pi
version: 0.1.0
dependencies:
- name: vweb
version: 2.0.0
repository: https://kiamol.net
condition: vweb.enabled # 조건부 설치
- name: proxy
version: 0.1.0
repository: file://../proxy # 로컬 디렉터리 차트
condition: proxy.enabled
# 하위 차트 다운로드 및 빌드
helm dependency build pi
# 드라이런 (실제 배포 없이 검증)
helm install pi1 ./pi --dry-run
# 기본값 오버라이드하여 하위 차트 포함 설치
helm install --set serviceType=ClusterIP --set proxy.enabled=true pi2 ./pi
2차시: 개발 워크플로와 CI/CD
컨텍스트와 네임스페이스
**네임스페이스(Namespace)**는 클러스터 안에서 리소스 그룹을 만드는 메커니즘이다. 모든 쿠버네티스 객체는 어떤 네임스페이스에 속하며, 네임스페이스를 삭제하면 속한 모든 리소스가 함께 삭제된다.
**컨텍스트(Context)**는 kubectl이 사용할 클러스터 정보, 사용자 인증 정보, 기본 네임스페이스를 하나로 묶어 놓은 그룹 객체다.
💡 시험 포인트: 컨텍스트 = 클러스터 접속 정보 + 인증 정보 + 기본 네임스페이스의 묶음.
# 네임스페이스 생성
kubectl create namespace kiamol-ch11-test
# 특정 네임스페이스에 배포
kubectl apply -f sleep.yaml --namespace kiamol-ch11-test
# 모든 네임스페이스 조회
kubectl get deploy -l app=sleep --all-namespaces
# 컨텍스트 목록 확인
kubectl config get-contexts
# 현재 컨텍스트의 기본 네임스페이스 변경
kubectl config set-context --current --namespace=kiamol-ch11-test
# 설정 확인
kubectl config view
지속적 제공 vs 지속적 배포
구분 지속적 제공 (Continuous Delivery) 지속적 배포 (Continuous Deployment)
| 최종 배포 | 수동 승인 필요 | 자동으로 운영 환경까지 배포 |
| 특징 | 배포 준비 단계까지 자동화 | 사람 개입 없이 100% 자동화 |
⚠️ 자주 나오는 함정: 지속적 제공(Delivery) ≠ 지속적 배포(Deployment). Delivery는 수동 승인, Deployment는 전자동.
3차시: 자기수복형 애플리케이션 활용하기
레디니스 프로브 (Readiness Probe)
컨테이너가 트래픽을 받을 준비가 되었는지 주기적으로 확인하는 프로브다.
실패 시 조치: 파드를 서비스 엔드포인트 목록에서 제외 (삭제하지 않음).
spec:
containers:
- image: kiamol/ch03-numbers-api
readinessProbe:
httpGet:
path: /healthz
port: 80
periodSeconds: 5 # 5초마다 상태 체크
💡 시험 포인트: 레디니스 프로브 실패 → 파드 제거 X, 서비스 엔드포인트에서 제외 O.
리브니스 프로브 (Liveness Probe)
컨테이너가 정상적으로 동작 중인지 주기적으로 확인하는 프로브다.
실패 시 조치: 파드(컨테이너) 재시작 (파드 자체는 같은 노드에 유지).
livenessProbe:
httpGet:
path: /healthz
port: 80
periodSeconds: 10
initialDelaySeconds: 10 # 첫 체크 전 대기 시간
failureThreshold: 2 # 2번 실패까지 허용
⚠️ 자주 나오는 함정: 리브니스 프로브 실패 → 파드 삭제 후 새 파드 X. 컨테이너만 재시작되며 파드는 원래 노드에 유지.
레디니스 vs 리브니스 비교
구분 레디니스 프로브 리브니스 프로브
| 목적 | 트래픽 수신 준비 여부 | 컨테이너 정상 동작 여부 |
| 실패 시 조치 | 서비스 엔드포인트에서 제외 | 컨테이너 재시작 |
| 파드 상태 | 파드 유지 (Ready=false) | 파드 유지, 컨테이너만 재시작 |
# TCP 소켓 방식 (데이터베이스 포트 확인)
readinessProbe:
tcpSocket:
port: 5432
periodSeconds: 5
# 명령 실행 방식
livenessProbe:
exec:
command: ["pg_isready", "-h", "localhost"]
periodSeconds: 10
initialDelaySeconds: 10
CrashLoopBackOff
리브니스 프로브로 고장 난 컨테이너를 재시작하는 과정이 반복될 때, 클러스터 자원 낭비를 막기 위해 쿠버네티스가 재시작 간격을 점점 늘려가는 상태를 CrashLoopBackOff라고 한다.
헬름 원자적 업그레이드 (--atomic)
--atomic 옵션 사용 시 배포 실패(프로브 타임아웃 등)가 발생하면 자동으로 이전 버전으로 롤백된다.
helm install --atomic todo-list todo-list/helm/v1/todo-list/
helm upgrade --atomic --timeout 30s todo-list todo-list/helm/v2/todo-list/
# 헬름 테스트 실행
helm test todo-list
헬름 훅(Hook): 배포 생애 주기의 특정 시점에 작업을 수행.
annotations:
"helm.sh/hook": test # 테스트 시 실행
"helm.sh/hook": pre-upgrade # 업그레이드 전 실행
"helm.sh/hook-weight": "10" # 실행 순서 가중치
📝 학습정리
- 헬름 = 쿠버네티스 패키지 관리자, 차트 단위로 배포
- values.yaml = 파라미터 기본값 파일
- 컨텍스트 = 클러스터 + 인증 + 기본 네임스페이스 묶음
- 지속적 제공(Delivery) = 수동 승인, 지속적 배포(Deployment) = 전자동
- 레디니스 프로브 실패 → 엔드포인트 제외 (재시작 X)
- 리브니스 프로브 실패 → 컨테이너 재시작 (파드 노드 유지)
- CrashLoopBackOff = 반복 재시작으로 간격이 점점 늘어나는 상태
- --atomic 옵션 = 실패 시 자동 롤백
🔑 핵심 키워드 정리
키워드 설명
| 헬름(Helm) | 쿠버네티스 패키지 관리 도구 |
| 차트(Chart) | 여러 YAML을 묶은 헬름 패키지 단위 |
| values.yaml | 차트 파라미터 기본값 파일 |
| {{ .Release.Name }} | 헬름 템플릿 변수 문법 |
| 컨텍스트(Context) | 클러스터+인증+네임스페이스 묶음 |
| 자기수복형 애플리케이션 | 사람 개입 없이 일시적 문제를 스스로 해결하는 앱 |
| 레디니스 프로브 | 트래픽 수신 준비 확인 → 실패 시 엔드포인트 제외 |
| 리브니스 프로브 | 정상 동작 확인 → 실패 시 컨테이너 재시작 |
| CrashLoopBackOff | 반복 재시작 시 간격 증가 상태 |
| --atomic | 헬름 배포 실패 시 자동 롤백 옵션 |
| helm.sh/hook | 배포 생애 주기 훅 애너테이션 |
'Cloud > 클라우드 프로그래밍' 카테고리의 다른 글
| [클라우드 프로그래밍] 14주차 (0) | 2026.06.22 |
|---|---|
| [클라우드 프로그래밍] 13주차 (0) | 2026.06.22 |
| [클라우드 프로그래밍] 11주차 (0) | 2026.06.22 |
| [클라우드 프로그래밍] 10주차 (0) | 2026.06.16 |
| [클라우드 프로그래밍] 9주차 (0) | 2026.06.16 |