Helm + ArgoCD 연동 실전 가이드

— Kubernetes 운영 자동화의 완성

“Helm은 선언을, ArgoCD는 실행을 책임진다.”
— GitOps 실전 전략


📌 1. Helm과 ArgoCD, 왜 함께 써야 하나?

✅ Helm이란?

  • Kubernetes 리소스를 템플릿(YAML)으로 작성하고, 파라미터화하여 배포/관리할 수 있게 해주는 패키지 매니저
  • helm install, helm upgrade, helm rollback 등의 명령 지원

✅ ArgoCD란?

  • GitOps 방식으로 Kubernetes에 선언된 리소스를 자동 배포/동기화/복구하는 컨트롤러
  • Git 저장소를 감시하고, 실제 클러스터 상태와 비교하여 유지

💡 둘을 연동하면?

HelmArgoCD
복잡한 설정을 변수화 및 모듈화Git 저장소를 기준으로 배포 자동화
애플리케이션 단위 관리실시간 감시와 자동 복구
배포 이력과 구성 분리 가능시각화된 관리 대시보드 제공

🧱 2. 아키텍처 개요

[Git Repository (Helm Charts)] ───────┐
                                     ▼
                               [ArgoCD Controller]
                                     ▼
                            [Kubernetes Cluster]
  • Git에는 Helm Chart(템플릿) 정의
  • ArgoCD가 해당 Git 저장소를 감시하며 배포 수행

⚙️ 3. 실전 구축 단계

1️⃣ Helm Chart 구조 준비

helm create my-service
my-service/
├── Chart.yaml
├── values.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── ingress.yaml
  • values.yaml에 환경별 변수 정리
  • Git 저장소에 이 Chart를 커밋

2️⃣ ArgoCD 설치 (Kubernetes 클러스터에)

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
  • 기본 설치 후 대시보드 접속 가능
  • 기본 사용자: admin / 비밀번호: 초기 pod 로그 확인
kubectl get pods -n argocd
kubectl port-forward svc/argocd-server -n argocd 8080:443

접속: https://localhost:8080


3️⃣ ArgoCD App 생성 – Helm 연동

방법 A. CLI (argocd 명령어 사용)

argocd app create my-service \
  --repo https://github.com/myorg/mycharts.git \
  --path my-service \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default \
  --helm-set image.tag=1.0.2 \
  --sync-policy automated

방법 B. YAML로 정의 (선호되는 방식)

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-service
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/myorg/mycharts.git
    targetRevision: main
    path: my-service
    helm:
      valueFiles:
        - values.yaml
      parameters:
        - name: image.tag
          value: "1.0.2"
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
kubectl apply -f app-my-service.yaml

4️⃣ 결과 확인 (대시보드)

  • 접속 후 Application 목록에서 배포 상태, Diff, Sync 상태 확인
  • 자동 동기화(auto sync) 설정 시 Git 변경 → 자동 배포

🔧 4. 운영 전략 팁

항목전략
환경 분리dev, staging, prod 디렉토리 또는 브랜치로 구분
버전 롤백ArgoCD UI에서 이전 Chart 버전으로 쉽게 Rollback
CI 연동GitHub Actions → Helm Chart 업데이트 + Git Push
비밀 관리Sealed Secrets, External Secrets 연동
정책 적용OPA Gatekeeper로 리소스 정책 사전 검증 가능

🧪 5. GitOps 워크플로우 예시

개발자 → Git에 Helm Chart 변경 (PR)
     ↓
  CI: Lint + 테스트
     ↓
  PR 승인 및 Merge
     ↓
  Git → ArgoCD 자동 Sync
     ↓
  Kubernetes 클러스터 반영

Git 저장소가 **단일 진실 소스(Single Source of Truth)**로 작동
운영 이력은 모두 Git에서 추적 가능


✅ 마무리 요약

핵심 요소요약
Helm템플릿화된 Kubernetes 리소스 관리
ArgoCDGit 기반 자동 배포 및 상태 동기화
연동 효과자동화 + 가시성 + Rollback + 정책 통제
베스트 프랙티스환경별 디렉토리 구조, Sync 정책, PR 기반 릴리즈

Helm은 유연한 구성,
ArgoCD는 일관된 배포를 만들어 줍니다.
둘의 조합은 MSA 운영의 강력한 표준입니다.