gitops-demo

ArgoCD 개요

GitOps를 위한 선언적 Kubernetes CD(Continuous Delivery) 도구인 ArgoCD에 대해 알아봅니다.

📖 ArgoCD란?

ArgoCD는 Kubernetes를 위한 선언적 GitOps CD 도구입니다. Git Repository를 단일 진실 원천(Single Source of Truth)으로 사용하여 애플리케이션을 Kubernetes 클러스터에 배포하고 관리합니다.

핵심 개념

GitOps = Git + Operations

Git Repository의 선언적 설정을 기반으로 인프라와 애플리케이션을 자동으로 관리하는 운영 방식

🎯 주요 특징

1. 선언적 배포

2. Git을 Single Source of Truth로 사용

3. 자동 동기화

4. 멀티 클러스터 / 멀티 테넌트

🏗️ ArgoCD 아키텍처

┌─────────────────────────────────────────────────────────┐
│                      Git Repository                      │
│  ┌────────────┐  ┌────────────┐  ┌────────────────┐   │
│  │ Helm Chart │  │ Kustomize  │  │  Plain YAML    │   │
│  └────────────┘  └────────────┘  └────────────────┘   │
└──────────────────────┬──────────────────────────────────┘
                       │
                       │ Poll / Webhook
                       ▼
┌─────────────────────────────────────────────────────────┐
│                    ArgoCD Server                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  API Server / Web UI / gRPC                     │   │
│  └─────────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────────┐   │
│  │  Application Controller                         │   │
│  │  - Monitor Git Repository                       │   │
│  │  - Compare desired vs actual state              │   │
│  │  - Sync if needed                               │   │
│  └─────────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────────┐   │
│  │  Repo Server                                    │   │
│  │  - Fetch manifests from Git                     │   │
│  │  - Render templates (Helm/Kustomize)            │   │
│  └─────────────────────────────────────────────────┘   │
└──────────────────────┬──────────────────────────────────┘
                       │
                       │ Apply / Watch
                       ▼
┌─────────────────────────────────────────────────────────┐
│              Kubernetes Cluster(s)                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐     │
│  │   Pod    │  │ Service  │  │  Deployment      │     │
│  └──────────┘  └──────────┘  └──────────────────┘     │
└─────────────────────────────────────────────────────────┘

구성 요소

API Server

Application Controller

Repo Server

Redis

Dex (선택사항)

🔄 GitOps 루프

ArgoCD는 다음과 같은 GitOps 루프를 구현합니다:

1. Deploy
   └─> Git Repository의 매니페스트를 읽어 배포

2. Monitor
   └─> Git Repository와 Kubernetes 클러스터 지속 감시

3. Detect Drift
   └─> 선언적 상태(Git)와 실제 상태(Cluster) 불일치 감지

4. Take Action
   └─> 자동 또는 수동으로 동기화하여 복구

✨ 주요 기능

Auto-Sync (자동 동기화)

Sync Strategies

Health Assessment

Rollback

Sync Waves & Hooks

🆚 ArgoCD vs 전통적 CD 도구

특징 전통적 CD (Push 방식) ArgoCD (Pull 방식)
배포 방식 CI 도구가 직접 Push ArgoCD가 Git에서 Pull
클러스터 접근 CI에서 클러스터 접근 필요 클러스터 내부에서 동작
보안 외부에 credential 노출 Credential 외부 노출 없음
Drift 감지 어려움 자동 감지 및 복구
멀티 클러스터 복잡 쉬움
상태 가시성 제한적 실시간 UI 제공

🔧 사용 사례

1. 마이크로서비스 배포

2. 멀티 환경 관리

3. 인프라 as Code

4. Disaster Recovery

📈 장점

투명성: 모든 변경사항이 Git 커밋으로 기록
안정성: Drift 자동 감지 및 복구
확장성: 멀티 클러스터 쉽게 관리
보안: Kubernetes credential을 외부 노출 불필요
협업: Git 워크플로우 활용 (PR, Review)
감사: 배포 이력 완벽 추적

⚠️ 고려사항

🚀 다음 단계

ArgoCD 개요를 이해했다면:

  1. Kind에 ArgoCD 설치
  2. 첫 번째 Application 배포
  3. Auto-Sync 및 Self-Healing 실습
  4. Keycloak SSO 연동

📖 참고 자료