Kubernetes/Kubernetes Advanced

Kubernetes 리소스 시리즈 #18: Helm (패키지 관리 및 배포 자동화)

ygtoken 2025. 3. 5. 00:52
728x90

Kubernetes에서는 다양한 애플리케이션을 배포할 때 Deployment, Service, ConfigMap, Secret 등의 리소스를 개별적으로 생성해야 합니다.
이 과정이 복잡해질수록 배포 자동화 및 버전 관리를 위한 도구가 필요하게 됩니다.
이를 위해 Kubernetes에서는 Helm을 사용하여 패키지를 관리할 수 있습니다.

이번 글에서는 Helm의 개념, 주요 기능, 그리고 실전 활용법을 정리하겠습니다.


🔹 Helm이란?

HelmKubernetes 애플리케이션을 패키지화하여 쉽게 배포하고 관리할 수 있도록 하는 패키지 매니저입니다.
✔️ YAML 파일을 템플릿화하여 쉽게 재사용 가능
✔️ 애플리케이션 배포, 업데이트, 롤백을 자동화
✔️ Helm Chart를 이용하여 애플리케이션을 일관된 방식으로 관리

💡 Helm을 사용하면 Kubernetes 애플리케이션을 더 쉽고 체계적으로 배포할 수 있습니다.


🔹 Helm 주요 개념

개념 설명

Chart Kubernetes 애플리케이션을 정의하는 Helm 패키지
Release Helm Chart를 배포한 인스턴스
Repository Helm Chart를 저장하고 공유하는 저장소
Values Helm Chart에서 사용할 설정 값 (사용자가 변경 가능)

💡 Helm Chart는 values.yaml을 사용하여 설정을 유동적으로 변경할 수 있습니다.


🔹 Helm 설치

Helm은 패키지 매니저이므로 먼저 설치해야 합니다.

MacOS (Homebrew)

brew install helm

Linux (스크립트 설치)

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Windows (Chocolatey)

choco install kubernetes-helm

💡 설치가 완료되면 다음 명령어로 Helm 버전을 확인합니다.

helm version

🔹 Helm 기본 사용법

1️⃣ Helm Repository 추가

Helm Chart를 다운로드하려면 저장소(Repository)를 추가해야 합니다.

helm repo add stable https://charts.helm.sh/stable
helm repo update

💡 이제 stable 저장소에서 Helm Chart를 검색할 수 있습니다.


2️⃣ Helm Chart 검색

사용 가능한 Helm Chart를 검색하려면 다음 명령어를 사용합니다.

helm search repo nginx

출력 예시:

NAME                    CHART VERSION   APP VERSION     DESCRIPTION
stable/nginx            1.2.3           1.21.0          A high performance web server

💡 Helm Chart의 이름과 버전을 확인할 수 있습니다.


3️⃣ Helm Chart 설치

예를 들어, Nginx를 배포하려면 다음과 같이 실행합니다.

helm install my-nginx stable/nginx

출력 예시:

NAME: my-nginx
LAST DEPLOYED: Tue Mar 5 12:00:00 2025
NAMESPACE: default
STATUS: deployed

💡 이제 my-nginx라는 이름으로 Nginx가 배포되었습니다.


4️⃣ 배포된 Helm Release 확인

helm list

출력 예시:

NAME       NAMESPACE   REVISION  STATUS     CHART         APP VERSION
my-nginx   default     1         deployed   nginx-1.2.3   1.21.0

💡 배포된 Helm Chart의 상태를 확인할 수 있습니다.


5️⃣ Helm Chart 삭제

배포된 Helm Release를 삭제하려면 다음 명령어를 사용합니다.

helm uninstall my-nginx

출력 예시:

release "my-nginx" uninstalled

💡 Helm을 사용하면 Kubernetes 리소스를 쉽게 설치하고 제거할 수 있습니다.


🔹 Helm Chart 구조

Helm Chart는 여러 개의 YAML 파일로 구성됩니다.

my-chart/
│── Chart.yaml        # Chart의 메타데이터 (이름, 버전, 설명 등)
│── values.yaml       # 사용자가 변경할 수 있는 기본 설정 값
│── templates/        # Kubernetes 매니페스트 템플릿
│   ├── deployment.yaml
│   ├── service.yaml
│   └── ingress.yaml

💡 Helm은 values.yaml을 기반으로 템플릿을 생성하여 Kubernetes에 배포합니다.


🔹 Helm Chart 만들기

새로운 Helm Chart를 생성하려면 다음 명령어를 사용합니다.

helm create my-chart

이제 my-chart/templates/deployment.yaml을 수정하여 커스텀 애플리케이션을 배포할 수 있습니다.


1️⃣ Deployment 템플릿 (templates/deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-app
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}-app
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-app
    spec:
      containers:
        - name: app
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: 80

💡 values.yaml의 값을 기반으로 동적으로 설정됩니다.


2️⃣ values.yaml

replicaCount: 2

image:
  repository: nginx
  tag: latest

💡 replicaCount 값을 변경하면 Deployment의 Pod 개수가 조정됩니다.


3️⃣ Helm Chart 설치

새로운 Helm Chart를 배포하려면 다음 명령어를 실행합니다.

helm install my-app ./my-chart

💡 이제 커스텀 애플리케이션이 Kubernetes에 배포됩니다.


🔹 Helm Chart 업그레이드 및 롤백

Helm을 사용하면 배포된 애플리케이션을 손쉽게 업그레이드하거나 롤백할 수 있습니다.

1️⃣ 배포된 Helm Chart 업그레이드

helm upgrade my-app ./my-chart

💡 새로운 설정으로 애플리케이션이 업데이트됩니다.


2️⃣ 배포된 Helm Chart 롤백

helm rollback my-app 1

💡 이전 버전으로 애플리케이션을 되돌릴 수 있습니다.


🔹 Helm vs Kubernetes 매니페스트 직접 배포

기능 Helm kubectl apply

배포 자동화 ✅ 지원 ❌ 직접 YAML 관리
템플릿화 ✅ 가능 (values.yaml 사용) ❌ 수동 설정 필요
버전 관리 ✅ Helm Release로 관리 ❌ 직접 롤백해야 함
애플리케이션 공유 ✅ Helm Chart Repository ❌ 직접 YAML 공유

💡 Helm을 사용하면 배포 및 버전 관리를 더욱 쉽게 할 수 있습니다.


🚀 마무리

✔️ Helm은 Kubernetes 애플리케이션을 쉽게 배포하고 관리할 수 있도록 하는 패키지 매니저
✔️ Helm Chart를 사용하면 YAML 파일을 템플릿화하여 재사용 가능
✔️ 설정값을 values.yaml에서 쉽게 조정 가능
✔️ Helm을 사용하면 배포, 업그레이드, 롤백을 자동화할 수 있음

 

728x90