AmberAx

ArgoCD를 사용하지 않는 이유 - FluxCD는 어떨까요?

· 8 min read
ArgoCD를 사용하지 않는 이유 - FluxCD는 어떨까요?

Kubernetes 환경에서 애플리케이션을 배포하고 관리하기 위한 GitOps 도구로 ArgoCD와 FluxCD는 가장 널리 사용됩니다.

ArgoCD는 강력한 웹 UI와 업계 전반의 높은 인지도를 바탕으로 확고한 입지를 가지고 있지만, 개인적으로 FluxCD가 가진 철학과 설계는 더욱 매력적이라 생각합니다. Flux는 단순히 마이너한 대안이 아니라, GitOps의 본질을 충실히 구현하며 실용적인 장점으로 주목받을 가치가 있습니다.


GitOps의 태생과 Flux의 철학 #

GitOps의 개념은 Flux를 개발한 Weaveworks에서 처음 소개되었습니다. Git 저장소를 단일 진실의 원천(single source of truth)으로 삼아 Kubernetes 클러스터의 상태를 정의하고 관리하는 방식은 Flux의 설계 철학에 깊이 녹아 있습니다. Flux는 Kubernetes 네이티브 리소스를 활용하며, CLI 중심으로 작동해 불필요한 인터페이스와 과정을 배제합니다.

반면 ArgoCD는 사용자 친화적인 웹 UI를 통해 관리 용이성을 제공하지만, 웹 기반 접근은 터미널 중심 작업 환경을 선호하는 사용자들에게는 다소 불편하게 느껴질 수 있습니다.


Flux가 더 뛰어난 이유 #

1. 명시적이고 간결한 설정

Flux는 애플리케이션 배포를 Kubernetes 리소스 정의만으로 관리할 수 있어 매우 직관적입니다. KustomizationHelmRelease 같은 리소스를 활용하면, 애플리케이션의 배포 순서와 의존성을 명확하게 설정할 수 있습니다.

  • Kustomization: YAML 파일로 애플리케이션의 여러 환경(개발, 스테이징, 프로덕션 등)을 쉽게 관리할 수 있습니다.
  • HelmRelease: Helm 차트를 통해 복잡한 배포를 간단하게 관리할 수 있으며, GitOps와 자연스럽게 통합됩니다.

반면 ArgoCD는 애플리케이션 간의 의존성을 설정하려면 ApplicationSets 또는 복잡한 오버레이 설정이 필요하며, 이는 설정 파일의 복잡도를 높이고 관리 포인트를 늘릴 수 있습니다.

2. CLI 중심의 워크플로우

Flux는 GitOps를 기본 철학으로 CLI를 통해 모든 작업을 처리할 수 있습니다. 설치 후 바로 CLI에서 리소스를 생성하고, 배포 상태를 확인하며, 애플리케이션 업데이트를 관리할 수 있습니다.

  • Flux CLI는 flux bootstrap, flux install, flux reconcile 같은 명령어로 설정부터 배포까지 모든 과정을 간소화합니다.
  • 추가적인 UI 리소스를 필요로 하지 않으므로, 초기 설정과 운영 중에 소모되는 리소스가 적습니다.

반면, ArgoCD는 웹 UI를 통해 설정 작업을 수행해야 하며, 이는 다음과 같은 문제를 야기할 수 있습니다:

  • 추가 리소스 소모: 웹 UI 및 ArgoCD 서버의 메모리/CPU 사용량 증가.
  • 운영 부담 증가: CLI에 익숙한 개발자들에게 불필요한 학습 곡선을 요구.

3. 유연한 배포 순서 관리

Flux는 애플리케이션 간의 의존성을 명시적으로 정의할 수 있어 복잡한 배포 시나리오를 쉽게 구현할 수 있습니다. 예를 들어, 다음과 같은 방식으로 배포 순서를 유연하게 관리할 수 있습니다:

  • 의존성 기반 배포: Flux의 dependsOn 필드를 활용하면 한 애플리케이션이 다른 애플리케이션의 배포 완료를 기다린 후 배포를 시작하도록 설정할 수 있습니다.
  • 점진적 배포: Flux는 Canary 또는 Blue-Green 배포와 같은 전략적 배포를 지원하여 안정성과 배포 속도를 동시에 보장합니다.

반면 ArgoCD는 기본적으로 애플리케이션을 병렬로 동시 배포하는 방식에 의존합니다. 배포 순서를 제어하려면 별도의 스크립트나 ApplicationSets와 같은 추가 도구를 사용해야 하며, 이는 관리 복잡도를 증가시킵니다.

4. 경량화된 설계

Flux는 Kubernetes 네이티브로 설계되어, 외부 도구나 별도의 UI 구성 요소에 의존하지 않습니다. 이는 다음과 같은 장점을 제공합니다:

  • 작은 설치 크기: Flux는 ArgoCD에 비해 훨씬 가벼운 컴포넌트를 사용하여 리소스 소비를 최소화합니다.
  • 확장성: Flux는 대규모 클러스터에서도 안정적으로 작동하며, 리소스 사용량이 적어 대규모 배포에 적합합니다.
  • 보안: Flux는 Kubernetes의 네이티브 접근 방식을 사용하므로 외부 서버나 API 의존성을 최소화하여 보안 취약점을 줄입니다.

반면, ArgoCD는 UI 서버 및 API 서버를 포함한 여러 구성 요소로 이루어져 있으며, 이는 추가적인 설치 및 유지 관리 작업을 요구합니다. 이러한 점에서 Flux는 간단하면서도 강력한 GitOps 도구로 평가받습니다.

5. GitOps에 최적화된 아키텍처

Flux는 GitOps에 특화된 아키텍처를 기반으로 설계되었습니다. 이는 다음과 같은 강점을 제공합니다:

  • 자동화된 Git 연동: Flux는 Git 리포지토리를 실시간으로 감시하여, 변경 사항이 발생하면 자동으로 Kubernetes 클러스터에 적용합니다.
  • 다중 리포지토리 지원: Flux는 여러 Git 리포지토리를 동시 관리할 수 있어, 마이크로서비스 환경에서도 유연하게 사용할 수 있습니다.
  • 분리된 구성 관리: Flux는 배포 구성(Kustomization, HelmRelease 등)과 클러스터 상태를 분리하여, 배포 환경의 혼란을 최소화합니다.

ArgoCD 역시 GitOps를 지원하지만, 실시간 변경 감지 대신 주기적인 폴링 방식에 의존하며, Flux와 같은 네이티브 GitOps 경험을 제공하지 못할 수 있습니다.


ArgoCD와 FluxCD 비교 #

비교 항목 ArgoCD FluxCD
GitHub Star 18,000 6,600
도입 기업 Google, NVIDIA, Tesla 등 대기업 소규모 및 중간 규모 팀, Kubernetes 중심 환경
사용 환경 웹 UI 중심, 사용자 친화적 CLI 중심, Kubernetes 네이티브 설계
배포 순서 관리 제한적 (ApplicationSets 추가 설정 필요) 유연하고 간단 (Kustomization, HelmRelease 사용)
설치 편의성 웹 UI를 통한 초기 설정 필요 CLI 기반 부트스트랩으로 간단한 초기화 가능
실시간 Git 연동 주기적인 폴링 방식 변경 사항을 즉시 감지하여 Kubernetes 클러스터에 적용
다중 리포지토리 지원 제한적 (추가 설정 필요) 기본적으로 지원 (여러 Git 리포지토리 관리 가능)
확장성 대규모 팀과 복잡한 애플리케이션 구조에 적합 소규모 환경부터 대규모 환경까지, 자원 사용량이 적고 확장성이 우수
CNCF 상태 Graduated (졸업 프로젝트, 2022년) Graduated (졸업 프로젝트, 2022년)
주요 강점 강력한 웹 UI, 높은 인지도 GitOps 철학에 충실, 경량화된 설계, 터미널 중심
주요 약점 복잡한 설정 및 웹 기반 의존도 웹 UI 미제공, 세분화된 RBAC 부족

추가 비교: Flux가 제공하는 유리한 점 #

1. GitOps 철학에 충실한 설계

Flux는 GitOps 철학을 중심으로 설계되어, Git 리포지토리를 Kubernetes의 단일 진실 소스(Single Source of Truth)로 사용합니다.

  • 자동화된 Git 연동: Git 리포지토리의 변경 사항을 실시간으로 감지하여 자동으로 Kubernetes 리소스를 업데이트합니다.
  • 분리된 구성 관리: 배포 설정(Kustomization, HelmRelease)과 클러스터 상태를 명확히 분리하여 관리 복잡성을 줄입니다.

ArgoCD는 GitOps 원칙을 따르지만, 변경 사항을 실시간으로 감지하지 않고 주기적인 폴링 방식에 의존하는 경우가 많아 실시간 자동화에서 Flux에 뒤처질 수 있습니다.

2. 경량화된 아키텍처

Flux는 외부 도구에 대한 의존성을 최소화한 경량 설계를 제공합니다. 이는 다음과 같은 장점으로 이어집니다:

  • 자원 최적화: Flux는 메모리 및 CPU 사용량이 적어 소규모 팀이나 리소스가 제한된 환경에서도 안정적으로 동작합니다.
  • 보안성: Kubernetes 네이티브 방식으로 작동하여, 외부 API 서버나 UI를 사용하는 ArgoCD보다 보안 취약점이 적습니다.
  • 간단한 구성 요소: ArgoCD는 여러 구성 요소(UI 서버, API 서버 등)로 이루어진 반면, Flux는 경량화된 단일 모듈 형태로 구성됩니다.

3. 유연한 배포와 관리

Flux는 배포의 유연성을 극대화합니다:

  • 배포 순서 관리: KustomizationdependsOn 필드를 사용하여 애플리케이션 간의 의존성을 명시적으로 정의할 수 있습니다.
  • 점진적 배포: Flux는 Canary 배포와 Blue-Green 배포를 기본 지원하여 안정성과 릴리스 속도를 모두 충족합니다.
  • 다중 리포지토리 지원: 여러 Git 리포지토리를 동시에 관리할 수 있어, 마이크로서비스 환경에서도 유연하게 사용 가능합니다.

ArgoCD는 복잡한 배포 시나리오에서 추가적인 설정(ApplicationSets 등)이 필요하며, 배포 유연성에서 Flux보다 부족할 수 있습니다.

4. CLI 중심의 간소화된 워크플로우

Flux는 CLI 기반으로 설계되어, 다음과 같은 생산성 향상을 제공합니다:

  • 간단한 부트스트랩: flux bootstrap 명령어를 사용하여 빠르게 설정을 완료할 수 있습니다.
  • 모든 관리 작업 가능: CLI 환경에서 배포, 업데이트, 상태 확인 등 모든 작업을 수행할 수 있어, 추가적인 UI 학습이나 설정이 필요 없습니다.

반면, ArgoCD는 웹 UI를 통해 초기 설정과 관리를 요구하며, 이는 추가적인 리소스를 소모하고 효율성을 저하시킬 수 있습니다.


결론: Flux를 고려해야 하는 이유 #

Flux는 단순히 ArgoCD의 대안이 아닌, GitOps의 이상적인 구현체로 평가받고 있습니다. 다음과 같은 이유로 Flux는 특히 Kubernetes 중심의 환경에서 강력한 선택이 될 수 있습니다:

  1. GitOps 철학에 충실: 실시간 Git 연동과 자동화를 지원.
  2. 경량화된 설계: 불필요한 외부 의존성을 배제하여 소규모부터 대규모 환경까지 적합.
  3. 배포 유연성: Kustomization과 HelmRelease를 통해 간단하고 직관적인 배포 관리 가능.
  4. CLI 중심의 워크플로우: 개발자 친화적이고 빠른 설정 및 관리 가능.

ArgoCD는 여전히 훌륭한 GitOps 도구로, 강력한 웹 UI와 높은 인지도를 제공하지만, 웹 기반 설정과 복잡한 관리로 인해 Flux보다 무겁게 느껴질 수 있습니다. Flux는 간결함, 효율성, 확장성을 중시하는 환경에서 더욱 강력한 성능을 발휘할 것입니다.

Flux와 ArgoCD를 모두 경험해보며, 자신의 환경에 적합한 도구를 선택하는 것이 중요합니다.

Did you find this post helpful?
Share it with others!