Helm Chart 배포 전략
8️⃣ Helm Chart 배포 전략
Helm은 Kubernetes 애플리케이션 배포의 자동화와 관리의 편리함을 제공합니다. 이번 섹션에서는 Helm을 활용한 다양한 배포 전략을 소개합니다.
1 Helm과 GitOps (ArgoCD, FluxCD 연동)
GitOps는 Git을 단일 소스로 사용하여 애플리케이션을 관리하는 방법론입니다. Helm은 GitOps 툴인 ArgoCD나 FluxCD와 함께 사용되어 자동화된 배포와 버전 관리를 가능하게 합니다.
📌 ArgoCD와 Helm 연동 예시
-
ArgoCD에 Helm 차트를 연결하여 자동화된 배포를 설정합니다.
-
ArgoCD 애플리케이션 설정에서 Helm 차트 URL을 지정하고, 원하는 값을 Git 저장소에 저장합니다.
-
Git 저장소에 변경 사항을 푸시하면 ArgoCD가 이를 감지하고 자동으로 배포를 실행합니다.
# ArgoCD Application 예시
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: 'https://github.com/my-org/helm-charts.git'
chart: my-app-chart
targetRevision: HEAD
2 Helm Rollback (버전 롤백)
Helm은 배포된 차트를 쉽게 롤백할 수 있는 기능을 제공합니다. Helm Rollback을 사용하면 실수로 잘못된 버전을 배포했을 때 빠르게 이전 버전으로 되돌릴 수 있습니다.
📌 Helm Rollback 예시
- 설치된 차트 목록을 확인하여 Release 이름과 버전 번호를 찾습니다.
helm list
- 롤백할 차트의 버전으로 돌아갑니다.
helm rollback <release-name> <revision-number>
예를 들어, my-release
라는 차트의 버전 1로 롤백하려면 아래와 같이 입력합니다.
helm rollback my-release 1
이 명령어는 배포된 차트를 버전 1로 롤백합니다.
3 Helm Hooks 활용 (배포 전후 스크립트 실행)
Helm Hooks는 배포 과정에서 특정 시점에 스크립트를 실행할 수 있도록 해줍니다. 예를 들어, 차트 배포 전후에 데이터베이스 마이그레이션 또는 환경 설정을 자동으로 수행할 수 있습니다.
📌 Helm Hook 예시
Helm에서 Hooks를 사용하려면, templates/
디렉토리 내에서 hook
을 설정할 수 있습니다.
# hooks/deployment-hook.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
annotations:
"helm.sh/hook": pre-install # 설치 전 후크
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-image
위 예시에서는 pre-install
훅을 사용하여 Helm 차트를 설치하기 전에 특정 작업을 실행합니다.
📌 자주 사용되는 Helm Hooks 유형
- pre-install: 차트 설치 전
- post-install: 차트 설치 후
- pre-upgrade: 차트 업그레이드 전
- post-upgrade: 차트 업그레이드 후
- pre-delete: 차트 삭제 전
- post-delete: 차트 삭제 후
4 Helm과 CI/CD 파이프라인 통합 (GitHub Actions, Jenkins, GitLab CI)
Helm은 CI/CD 파이프라인에서 매우 유용하게 활용됩니다. GitHub Actions, Jenkins, GitLab CI와 같은 툴과 통합하여 자동화된 배포와 버전 관리를 구현할 수 있습니다.
📌 GitHub Actions와 Helm 연동 예시
.github/workflows/helm-deploy.yml
파일을 생성합니다.
name: Helm Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Helm
uses: azure/setup-helm@v1
- name: Helm install
run: |
helm repo add my-repo https://my-repo-url
helm repo update
helm upgrade --install my-release my-repo/my-chart
이 예시는 GitHub Actions에서 main
브랜치에 푸시될 때마다 Helm 차트를 자동으로 배포하는 CI/CD 파이프라인을 설정한 것입니다.
📌 Jenkins와 Helm 연동 예시
- Jenkins의 파이프라인 설정에서 Helm 명령어를 사용하여 배포합니다.
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/my-org/helm-charts.git'
}
}
stage('Helm Install') {
steps {
sh 'helm repo add my-repo https://my-repo-url'
sh 'helm repo update'
sh 'helm upgrade --install my-release my-repo/my-chart'
}
}
}
}
이 예시는 Jenkins에서 Helm 차트를 자동으로 설치하고 업그레이드하는 파이프라인을 설정한 것입니다.