Skip to content

Argo CD

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.

Components

ArgoCD를 설치하게 되면 다양한 컴포넌트들이 설치되는데 각각의 역할은 다음과 같다.

  • argocd-application-controller : 애플리케이션의 상태를 주기적으로 확인하고, Git에 정의된 상태와 클러스터 상태가 다르면 자동으로 동기화(Sync)한다.
  • argocd-applicationset-controller : ArgoCD의 ApplicationSet CRD를 관리하는 컨트롤러로, Helm values, Git 디렉터리 구조, Cluster 목록 등 다양한 source를 기반으로 여러 ArgoCD Application 리소스를 동적으로 생성한다.
  • argocd-dex-server : ArgoCD의  SSO를 지원하는 인증 서버 역할로, 다양한 외부 ID Provider와 연동하여 인증을 처리한다.
  • argocd-notifications-controller : ArgoCD 애플리케이션 상태 변경 시 Slack, Webhook, Email 등의 방식으로 알림을 보낸다.
  • argocd-redis : 빠른 성능을 위해 application 상태나 diff 정보를 Redis에 캐싱하는 내부 캐시 및 상태 저장소 역할을 한다.
  • argocd-repo-server : Git 레포지토리를 다운받고, Helm, Kustomize 등을 사용해 매니페스트를 렌더링 한다.
  • argocd-server : 사용자와 ArgoCD 간의 인터페이스 역할을 하는 핵심 컴포넌트로 웹 UI, CLI 명령, API 요청을 처리한다.

단점

실제 운용 환경에 적용을 해보면서 느낀 단점도 있습니다.

가장 체감되었던 점은 클러스터 전체의 상태를 완전히 선언적(declarative)으로 만들기가 어렵다는 것입니다. 이를테면 애플리케이션 간의 디펜던시가 있을 경우 배포 순서를 Argo CD 내에서 지정할 수 없기 때문에, 이로 인해 발생하는 문제들을 직접 해결해야만 합니다. 또한 DB, Ingress Controller 등 외부 기술 스택을 가져다가 사용해야 하는 경우 동일한 문제가 발생할 여지가 큽니다. 기술에 따라 배포에 있어 고유의 방식들이 있고, 이들이 항상 선언적으로 말끔하게 떨어지지는 않습니다. 이 문제는 시간이 지나면 자동으로 해결되는 경우도 있지만, 그 전까지는 명령형(imperative)의 요소를 배포 과정에 포함시켜야 할 수도 있습니다.

또한, Argo CD는 Kubernetes의 기본 구성 요소도 아니고, 상용 솔루션도 아닌 third-party 오픈소스 프로젝트입니다. 이 말은 직접 설치부터 운영까지 모든 것을 책임져야 함을 의미합니다. 문제 발생 시 공식적인 지원을 받기는 어렵고, 커뮤니티 지원에 의존해야 합니다. UI나 사용법도 상용 솔루션에 비해 직관적이지 않을 수 있습니다. 다행히, Argo CD를 기반으로 한 상용 GitOps 솔루션도 시장에 존재하므로, 필요에 따라 선택하여 사용할 수 있습니다.

See also

Favorite site