IT개발

GitOps 완전정복: Flux vs ArgoCD 실전 비교 및 설치·운영 사례

우리모두 개발자되기 2025. 4. 27. 22:00

 

GitOps 완전정복: Flux vs ArgoCD 실전 비교 및 설치·운영 사례


1. GitOps란 무엇인가?

GitOps는 Kubernetes 환경에서 인프라 및 애플리케이션 배포를 코드로 관리하는 방식입니다.
Git 리포지토리를 "싱글 소스 오브 트루스(Single Source of Truth)"로 삼아, 클러스터 상태를 선언적으로 정의하고, Git의 변경사항을 트리거로 삼아 클러스터를 자동으로 업데이트합니다.

GitOps는 다음과 같은 장점을 제공합니다.

  • 버전 관리: 모든 변경 이력 기록
  • 감사 추적(Audit): 누가 무엇을 수정했는지 명확히 파악 가능
  • 자동화: 수동 개입 없이 시스템이 스스로 상태를 동기화
  • 복구 용이성: Git 기록을 기반으로 빠른 복구 가능

2. 대표적인 GitOps 도구: Flux와 ArgoCD

2.1 Flux란?

Flux는 CNCF(Cloud Native Computing Foundation) 프로젝트로, Kubernetes 클러스터와 Git 리포지토리의 상태를 지속적으로 비교하여 차이가 생기면 클러스터를 업데이트하는 GitOps 도구입니다.
Flux는 다음 특징을 갖습니다.

  • Pull 모델: Flux가 주기적으로 Git을 조회하고 클러스터 상태를 동기화
  • 모듈형 아키텍처: Source Controller, Kustomize Controller 등 컴포넌트별 분리
  • Multi-tenancy 지원: 여러 팀/애플리케이션에 대해 분리된 관리 가능
  • Secret 관리 기능 내장: Sealed Secrets, Mozilla SOPS 등과 통합 가능

2.2 ArgoCD란?

ArgoCD는 역시 CNCF 산하의 인기 있는 GitOps 툴로, Kubernetes에 최적화된 지속적 배포(Continuous Delivery) 플랫폼입니다.
ArgoCD는 다음 특징을 갖습니다.

  • GUI 제공: 웹 기반 UI를 통해 배포 상태 시각화
  • 자동 및 수동 동기화 모두 지원: 필요 시 수동 승인 프로세스 삽입 가능
  • Application 단위 관리: 논리적 단위로 애플리케이션 관리
  • Helm, Kustomize, Ksonnet 등 다양한 템플릿 엔진 지원

3. Flux vs ArgoCD 심층 비교

항목 Flux  ArgoCD
배포 모델 Pull Only Pull 기본, Push(웹훅) 일부 지원
설치 복잡도 중간 약간 복잡
UI 제공 CLI/VSCode Extension 주력, WebUI는 부가 기능 풍부한 Web UI 제공
멀티 클러스터 지원 네이티브 지원 별도 구성 필요
템플릿 지원 Kustomize, Helm Kustomize, Helm, Jsonnet, Plain YAML 등
싱크 전략 선언적(Git 원본 기준) 선언적, 수동 승인 혼합 가능
RBAC/멀티테넌시 네이티브 강화 ApplicationSet 및 Project 단위 관리

4. Flux 설치 및 운영 사례

4.1 Flux 설치

Flux 설치는 매우 간단하며, 공식 CLI를 사용하여 빠르게 구성할 수 있습니다.

Flux CLI 설치

brew install fluxcd/tap/flux

Flux 설치

flux install

이 명령은 다음 컴포넌트들을 설치합니다.

  • Source Controller: Git, Helm repository 감시
  • Kustomize Controller: Kustomization 동기화
  • Helm Controller: HelmRelease 동기화
  • Notification Controller: 알림 시스템

4.2 Git 리포지토리 연결

flux create source git my-app \
  --url=https://github.com/example/my-app-config \
  --branch=main \
  --interval=1m

Kustomization 생성

flux create kustomization my-app \
  --target-namespace=default \
  --source=my-app \
  --path="./deploy" \
  --prune=true \
  --interval=5m

4.3 운영 시 고려사항

  • Git Repository 구조를 명확히 정리해야 함(팀별, 서비스별)
  • Secret은 별도 관리해야 안전함(SOPS, Sealed Secrets 사용 권장)
  • Drift Detection을 주기적으로 모니터링하여 Git과 실환경이 일치하는지 확인

5. ArgoCD 설치 및 운영 사례

5.1 ArgoCD 설치

ArgoCD는 Helm Chart 또는 YAML 매니페스트로 설치할 수 있습니다.

Helm 설치 예시

helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd -n argocd --create-namespace

YAML 설치 예시

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

5.2 초기 관리자 비밀번호 조회

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

5.3 애플리케이션 등록

CLI 등록

argocd app create my-app \
  --repo https://github.com/example/my-app-config \
  --path deploy \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

Web UI 등록

  • Web 브라우저에서 ArgoCD UI 접속 후 애플리케이션 등록 가능

5.4 운영 시 고려사항

  • ApplicationSet을 활용하여 대규모 애플리케이션 자동 관리 가능
  • Rollback 및 History 기능이 강력하여 장애 복구에 유리
  • RBAC(Role Based Access Control)으로 사용자별 권한 제한 필요
  • Sync Policy를 적절히 조정하여 실시간 배포 vs 승인 후 배포 선택 가능

6. Flux와 ArgoCD 선택 가이드

조건 추천 도구
단일 클러스터, Kustomize 중심 배포 Flux
대규모 멀티 애플리케이션 관리, UI 필요 ArgoCD
Secret 관리 강력히 요구 Flux(SOPS 통합 추천)
비개발자도 배포 관리에 참여 ArgoCD(UI 친화적)
멀티 클러스터 환경 자동화 Flux
복잡한 배포 승인 프로세스 ArgoCD(Sync Waves, Hooks)

7. 실전 운영에서 배우는 팁

  • Git 리포지토리는 반드시 상태 지향(State-oriented) 으로 구성할 것
  • Git 브랜치 전략을 운영/스테이징으로 구분해 안정성 확보
  • Helm Charts 사용 시 버전 관리 명시 필수
  • Rollback 대비 Git Commit 간격은 작게 가져갈 것
  • Drift Detection 알림을 Slack/Teams 등과 통합하여 빠른 대응 가능하게 구성
  • Audit Log를 외부 저장소로 백업해 규정 준수 지원

8. 결론

Flux와 ArgoCD는 모두 훌륭한 GitOps 솔루션이며, 조직의 요구사항에 따라 최적의 선택이 달라질 수 있습니다.
Flux는 모듈형 경량 구조로 유연성을 제공하고, ArgoCD는 풍부한 시각화와 관리 기능으로 복잡한 대규모 환경에 적합합니다.
GitOps의 핵심은 'Git이 곧 진실'이라는 원칙을 지키는 것에 있습니다.
올바른 도구를 선택하고 Git 리포지토리 구조를 잘 설계하면, 자동화된 배포와 운영 안정성을 극대화할 수 있습니다.

Flux 또는 ArgoCD로 GitOps 여정을 시작해보시길 추천드립니다!