Cloud/클라우드 프로그래밍

[클라우드 프로그래밍] 12주차

승주우에요 2026. 6. 22. 19:56

헬름이란?

헬름(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 배포 생애 주기 훅 애너테이션