Kubernetes/Kubernetes Basics

📌 Kubernetes Helm 활용: 효율적인 애플리케이션 배포 전략

ygtoken 2025. 3. 4. 12:01
728x90

 

1️⃣ Kubernetes에서 Helm이 필요한 이유?

 

Kubernetes에서 애플리케이션을 배포할 때, 보통 Deployment, Service, Ingress, ConfigMap 등 여러 개의 YAML 파일을 사용합니다.

이러한 설정을 직접 관리하면 다음과 같은 문제가 발생할 수 있습니다.

 

여러 개의 YAML 파일을 수동으로 관리해야 하는 불편함

애플리케이션 버전 관리가 어렵고 배포가 비효율적임

배포 환경(dev, staging, prod)별로 설정을 따로 관리해야 함

 

Helm을 사용하면 다음과 같은 이점이 있습니다.

YAML 파일을 패키지화하여 관리 가능 (Helm Chart)

설정값(Values.yaml)만 변경하여 다양한 환경에서 손쉽게 배포 가능

배포 자동화 및 버전 관리 기능 제공

 

Helm은 Kubernetes의 패키지 매니저로서, YAML 파일을 보다 효율적으로 관리할 수 있도록 도와줍니다.

 


 

2️⃣ Helm의 기본 개념과 구조

 

📌 Helm은 애플리케이션을 패키지로 관리하는 시스템으로, 다음과 같은 구조를 가집니다.

용어설명

Helm Chart Kubernetes 애플리케이션을 정의하는 패키지
Release 특정 Helm Chart의 실행 인스턴스
Values.yaml 배포 시 사용될 설정값을 정의하는 파일
Templates/ Kubernetes 리소스를 정의하는 템플릿 파일

📌 Helm Chart 기본 구조

my-app-chart/
 ├── charts/                # 종속 Chart 저장
 ├── templates/             # Kubernetes 리소스 템플릿
 │   ├── deployment.yaml    # Deployment 템플릿
 │   ├── service.yaml       # Service 템플릿
 │   ├── ingress.yaml       # Ingress 템플릿 (옵션)
 │   └── _helpers.tpl       # 템플릿 변수 정의
 ├── values.yaml            # 기본 설정 값
 ├── Chart.yaml             # Chart 메타데이터
 └── README.md              # 설명 파일

Helm Chart를 사용하면 배포 과정을 단순화하고 환경별 설정을 쉽게 관리할 수 있습니다.

 


 

3️⃣ Helm 설치 및 기본 사용법

 

📌 Helm을 설치하면 Kubernetes 애플리케이션을 쉽게 배포할 수 있습니다.

 


 

✅ Step 1: Helm 설치

 

📌 Helm 설치 (Mac & Linux)

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

📌 Helm 설치 확인

helm version

Helm이 정상적으로 설치되었는지 확인!

 


 

✅ Step 2: Helm Chart 생성 및 배포

 

📌 새로운 Helm Chart 생성

helm create my-app

📌 Helm Chart 디렉토리 확인

ls my-app

기본적인 Helm Chart 구조가 생성됨!

 

📌 Helm Chart 배포

helm install my-release my-app/

📌 배포된 Helm Release 확인

helm list

Helm을 사용하면 단일 명령어로 애플리케이션을 배포 가능!

 


 

4️⃣ Helm을 활용한 애플리케이션 배포 전략

 

📌 Helm을 활용하면 다음과 같은 방식으로 Kubernetes 애플리케이션을 효과적으로 배포할 수 있습니다.

 


 

✅ 1. 환경별 배포 설정 (dev, staging, prod)

 

📌 Values 파일을 활용하면 동일한 Helm Chart를 여러 환경에서 쉽게 배포 가능

 

📌 개발 환경 설정 (values-dev.yaml)

replicaCount: 1
image:
  repository: myrepo/myapp
  tag: dev
  pullPolicy: IfNotPresent
service:
  type: ClusterIP
  port: 80

 

📌 운영 환경 설정 (values-prod.yaml)

replicaCount: 3
image:
  repository: myrepo/myapp
  tag: latest
  pullPolicy: Always
service:
  type: LoadBalancer
  port: 80

 

📌 환경별로 Helm 배포 실행

helm install my-dev-app my-app/ -f values-dev.yaml
helm install my-prod-app my-app/ -f values-prod.yaml

같은 Helm Chart를 사용하되 환경별 설정을 다르게 배포 가능!

 


 

✅ 2. Helm Chart 업그레이드 및 롤백

 

📌 Helm을 사용하면 애플리케이션 버전을 손쉽게 업그레이드 & 롤백 가능

 

📌 Helm Chart 업그레이드

helm upgrade my-release my-app/

📌 배포된 버전 기록 확인

helm history my-release

📌 이전 버전으로 롤백

helm rollback my-release 1

문제가 발생하면 빠르게 이전 버전으로 복구 가능!

 


 

✅ 3. Helm Chart를 저장소(Repository)에 업로드하여 배포 자동화

 

📌 Helm Chart를 저장소(Repository)에 업로드하면 CI/CD에서 활용 가능

 

📌 Helm Repository 추가

helm repo add myrepo https://myrepo.github.io/helm-charts
helm repo update

📌 Helm Chart 패키징

helm package my-app/

📌 Helm Repository에 업로드

helm push my-app-0.1.0.tgz myrepo

Helm Repository를 활용하면 배포를 자동화하고 쉽게 관리 가능!

 


 

5️⃣ Helm을 활용한 CI/CD 최적화

 

📌 GitHub Actions + Helm을 활용하면 Kubernetes 배포를 자동화할 수 있습니다.

 

📌 GitHub Actions CI/CD 예제 (.github/workflows/deploy.yaml)

name: Deploy to Kubernetes

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2

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

    - name: Deploy with Helm
      run: helm upgrade --install my-app ./helm/my-app -f ./helm/values-prod.yaml

GitHub Actions를 활용하면 Git Push 시 자동으로 Helm을 사용하여 배포 가능! 🚀

 


 

📌 결론: Helm을 활용하면 Kubernetes 배포가 더욱 쉬워진다!

 

YAML 파일을 Helm Chart로 패키지화하여 손쉽게 관리 가능

환경별 설정(Values.yaml)만 변경하여 다양한 환경에서 쉽게 배포 가능

Helm Rollback 기능을 통해 배포 실패 시 빠르게 복구 가능

Helm Repository를 활용하면 CI/CD 파이프라인과 연동하여 자동화 가능

 

🔥 Helm을 활용하면 Kubernetes에서 효율적인 애플리케이션 배포 전략을 구축할 수 있습니다! 🚀

 

 

728x90