Skip to content

KR_CS_GitOps

somaz edited this page Mar 30, 2026 · 1 revision

Q7: GitOps 개념과 ArgoCD 활용

질문: GitOps의 핵심 원칙과 동작 방식을 설명하고, ArgoCD를 사용한 Kubernetes 배포 자동화 과정을 설명하세요. Declarative 방식과 Reconciliation Loop의 역할을 중심으로 설명하세요.


주요 용어

용어 설명
GitOps Git을 단일 진실 공급원으로 사용하는 운영 방식
Declarative 시스템의 원하는 상태를 선언하는 방식 (What)
Imperative 시스템에 수행할 명령을 지시하는 방식 (How)
Reconciliation 선언된 상태와 실제 상태를 일치시키는 프로세스
ArgoCD Kubernetes용 GitOps CD 도구
Flux CNCF Graduated GitOps 도구
Sync Git 상태와 클러스터 상태를 동기화하는 작업
Self-heal 수동 변경을 감지하여 Git 상태로 자동 복구

GitOps 4가지 핵심 원칙

원칙 설명
Declarative 시스템의 원하는 상태를 선언적으로 정의
Versioned & Immutable Git을 통한 모든 변경 이력 추적 및 롤백 가능
Pulled Automatically Git 저장소를 지속적으로 모니터링하여 변경 감지 시 자동 배포
Continuously Reconciled 실제 상태와 선언 상태 비교 후 자동 수정

전통적 CI/CD vs GitOps

전통적 CI/CD:
Git Commit → CI Build → kubectl apply → Kubernetes
문제: kubectl 권한 필요, 실제 상태와 Git 불일치 가능

GitOps (ArgoCD):
Git Commit → CI Build → Container Registry
     ↓
Git Manifest 저장소 ← ArgoCD 폴링 → Kubernetes 자동 Sync
장점: Git 권한만 필요, 항상 Git = 실제 상태

Reconciliation Loop 동작 원리

1. Observe  → Git에서 Desired State 확인 (replicas: 3)
     ↓
2. Diff     → Kubernetes에서 Actual State 확인 (Running: 2)
             Desired ≠ Actual → Out of Sync
     ↓
3. Act      → kubectl apply 실행, Pod 1개 추가
     ↓
4. Verify   → 상태 재확인 (Running: 3) → Synced
     ↓
     다시 1번으로 반복 (기본 3분마다)

ArgoCD Application 정의

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://github.com/example/my-app.git
    targetRevision: main
    path: k8s/overlays/production
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true       # Git에서 삭제된 리소스 자동 제거
      selfHeal: true    # 수동 변경 자동 복구
    syncOptions:
    - CreateNamespace=true
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

배포 시나리오 (이미지 업데이트)

# 1. Git에 이미지 태그 변경 커밋
git commit -m "Update app to v2.0.0"
git push origin main

# 2. ArgoCD가 변경 감지 (폴링 또는 Webhook)
# 3. Diff 확인
argocd app diff my-app

# 4. Auto Sync 또는 수동 Sync
argocd app sync my-app

# 5. 롤백 (필요 시 Git revert → ArgoCD 자동 복구)
git revert HEAD && git push origin main

환경별 관리 (Kustomize)

my-app/
├── base/
│   ├── deployment.yaml
│   └── service.yaml
└── overlays/
    ├── dev/        # replicas: 1
    ├── staging/    # replicas: 2
    └── production/ # replicas: 5 + HPA

각 환경마다 별도 ArgoCD Application으로 관리.


ArgoCD vs Flux 비교

특징 ArgoCD Flux
UI 강력한 Web UI 제공 CLI 중심
Sync 방식 Pull (기본 3분) Push + Pull
Helm 지원 Native 지원 Helm Controller
Image 자동 업데이트 Image Updater (별도) 내장 (Image Automation)
CNCF 상태 Incubating Graduated

GitOps 장점 요약

항목 내용
보안 Kubernetes 직접 접근 불필요, Git 권한으로만 통제
신뢰성 선언적 상태 일관성 보장, Self-healing, 쉬운 롤백
가시성 Web UI 전체 상태 확인, Diff 미리보기, Health 모니터링
협업 Git 기반 코드 리뷰, PR로 배포 승인, 변경 이력 자동 추적

참고

Clone this wiki locally