Argo CD는 GitOps 툴로서 공개 이후부터 꾸준히 안정적인 성과를 보여주고 있습니다. 2025년에 실시된 Argo 프로젝트 공식 설문에 따르면, 응답자의 60%가 Argo CD를 최소 2년 넘게 프로덕션으로 운영 중이라고 하네요.
(출처: https://blog.argoproj.io/argo-cd-2025-user-survey-results-ab045f7d5d9a)
Argo CD가 무엇인지 아직 모르시거나 헷갈리시는 분들을 위해 설명드리자면, Argo CD는 GitOps 방법론을 실현할 수 있는 조정 엔진(Reconciliation Engine)입니다. 사용자 친화적인 웹 UI를 제공하여 진입 장벽이 높지 않다는 점도 특징입니다.
GitOps와 조정 엔진이란
시스템이 되어야 할 최종 상태를 명시적으로 정의한 파일을 Git에 저장하고, 저장된 상태 파일을 참조해 시스템을 계속해서 최종 상태로 업데이트하는 방식을 GitOps 방법론이라고 합니다. 그리고 이때 시스템을 계속 최종 상태로 업데이트하는 툴을 조정 엔진이라고 합니다. GitOps 방법론에 대해서 궁금하시다면 관련해서 자세히 다룬 지난 아티클을 확인해보세요.
특히 Argo CD는 Kubernetes를 위한 조정 엔진이기 때문에 Kubernetes 클러스터의 최종 상태를 선언적으로 관리하면서 시스템의 변경사항을 기록하고 추적 가능합니다. 이미 널리 쓰이고 있는 Kubernetes 클러스터를 체계적으로 운영하게끔 도와주는 툴이니, Argo CD의 인기도 이해가 됩니다.
(Argo CD의 웹 UI. 출처: https://argo-cd.readthedocs.io/en/stable)
이런 Argo CD가 사실 Argo 프로젝트의 여러 툴 중 하나라는 사실 알고 계셨나요? 물론 Argo CD가 대표적인 Argo 프로젝트 툴이지만, 그 외로도 Kubernetes를 더욱 효과적으로 운영할 수 있도록 도와주는 툴이 3가지 더 있습니다.
그래서 이번 아티클에선 Argo CD 만큼이나 유용하고 알아두면 도움되는 Argo 프로젝트 툴 3가지를 살펴보겠습니다.
Kubernetes 네이티브한 자동화 파이프라인 구축 - Argo Workflows
(Argo Workflows의 웹 UI. 출처: https://argo-workflows.readthedocs.io/en/latest)
가장 먼저 소개할 Argo 프로젝트 툴은 Argo Workflows입니다. 병렬 작업을 실행/관리하는 오픈소스 클라우드 네이티브 툴인데요. 우리에게 이미 익숙한 Jenkins와 비슷한 역할을 수행한다고 보시면 됩니다.
그리고 Argo Workflows는 Kubernetes CRD로 구현되어 있기 때문에, Kubernetes 네이티브한 작업 관리 툴이라고 할 수 있습니다. 각 작업은 컨테이너로 실행되는 것도 큰 특징이죠.
아까 잠깐 언급한 Jenkins는 Kubernetes 환경에서 구동되기 위해 별도의 플러그인이 필요하지만, Argo Workflow는 Kubernetes 환경 안에서 리소스로 배포되어 구동되기 때문에 성능과 안정성, 확장성 측면에서 유리하다는 점도 기억해두시면 좋습니다.
Argo Workflows는 작업의 흐름을 여러 스텝으로 구성된 하나의 순서로 정의하거나, 여러 작업을 병렬 실행되도록 정의할 수 있는데요.
이뿐만 아니라, 작업마다 종속성을 설정해서 순서와 상관없이 특정 작업이 끝나야 작업이 시작하도록 정의할 수도 있습니다. (이 방식을 방향성 비순환 그래프(Directed Acyclic Graph) 또는 DAG 방식이라고 합니다.)
즉, 복잡한 작업흐름도 명확하게 정의할 수 있어 유지보수에 유리합니다.
그렇다면 Argo Workflows는 어떨 때 사용하면 좋을까요? 크게 두 가지 경우가 있을 겁니다.
- Kubernetes 환경에서 안정적으로 동작하는 CI/CD 파이프라인 구축이 필요한 경우
- Kubernetes 환경에서 복잡한 구성의 워크플로우를 구축하고 싶은 경우
Kubernetes 환경을 운영하면서 Jenkins처럼 자동화 파이프라인을 구축하고 싶다면 Argo Workflows를 고려해봐도 좋겠습니다.
애플리케이션 배포를 더욱 전문적으로 - Argo Rollouts
(Argo Rollouts의 웹 UI. 출처: https://argo-rollouts.readthedocs.io/en/stable/dashboard)
Argo Rollouts는 Kubernetes 클러스터에 애플리케이션을 다양한 전략으로 배포할 수 있도록 도와주는 툴입니다. 아마 많이 들어보셨을 Blue/Green과 Canary 방식으로 애플리케이션을 배포하는 역할을 수행하는데요. 이 툴 역시 Kubernetes CRD로 구동됩니다.
Argo Rollouts의 다양한 고급 배포 기능을 사용하려면 Rollout이라는 이름의 리소스를 사용해야 합니다.
Rollout 리소스는 Kubernetes Deployment 리소스처럼 Replica 수와 컨테이너 명세를 정의할 수 있지만, spec.strategy
필드에서 고급 배포 전략과 세부 설정을 정의할 수 있는 것이 Deployment와 다른점입니다.
Argo Rollouts는 Rollout 리소스에 대해서만 기능합니다. 즉, 일반적인 Kubernetes Deployment 리소스의 업데이트에 대해서는 반응하지 않는다는 뜻인데요.
그렇기 때문에 Argo Rollouts의 배포 관련 기능을 사용하려면 Kubernetes Deployment 리소스를 Rollout 리소스로 전환하거나, 새로운 Rollout 리소스를 생성 후 기존 Deployment 리소스와 연동하는 설정을 정의해야 합니다.
Ingress 컨트롤러나 서비스 메시와 연동되어 다양한 고급 기능을 지원하기도 하는데요. 배포 중 트래픽 양 조절이나 앱 업데이트 도중 롤백 등의 기능도 제공합니다.
사실 Kubernetes의 Deployment 리소스도 .spec.strategy
필드를 통해 기본적인 배포 정책을 정의할 수 있습니다.
하지만 Argo Rollouts의 Rollout 리소스의 .spec.strategy
필드에서는 아래와 같은 세부 설정이 가능합니다.
- 배포 시 트래픽 전환 속도 조절
- 새로운 배포 버전으로 접근하는 트래픽 비중 조정
- 앱 배포 상태에 대한 메트릭을 외부로 전송
- 배포 중 장애 발생 시 자동으로 롤백
그래서 규모가 크거나 트래픽이 많이 들어오는 앱을 업데이트할 땐 Argo Rollouts로 안정성을 높일 수 있습니다. 특히 아래와 같은 경우 Argo Rollouts 활용을 고려해볼 수 있겠습니다.
- Kubernetes 환경에서 안정적인 운영이 중요한 서비스를 배포하는 경우
- Kubernetes 환경에서 세밀하게 설정 가능한 점진적 배포 전략이 필요한 경우
외부에서 오는 이벤트 감지 및 트리거 담당 - Argo Events
(출처: https://argoproj.github.io/argo-events)
Argo Events는 Kubernetes 환경 내/외부에서 발생하는 이벤트를 감지해서 사전 정의된 트리거를 수행하는 Event-driven 자동화 프레임워크입니다. 풀어서 설명하자면, 외부로부터 들어오는 특정 신호를 감지하면 그에 맞게 설정된 작업을 실행하는 역할을 수행하는 것이죠.
Argo Events가 감지할 수 있는 이벤트로는 웹훅, AWS S3, AWS SNS 등이 있습니다. 주기적으로 트리거를 수행하는 스케줄링 역시 가능하답니다.
그리고 Argo Events가 트리거할 수 있는 대상으로는 Kubernetes 리소스, Argo Workflows, Argo Rollouts, AWS Lambda 등이 있습니다.
트리거 대상이 Kubernetes 리소스?
Argo Events는 기본 Kubernetes 리소스를 생성/변경/삭제하는 트리거를 지원합니다. 즉, 특정 이벤트를 수신하면 Pod, Deployment, Job과 같은 Kubernetes 리소스를 생성하거나 변경, 삭제하는 기능을 제공한다는 의미입니다.
Argo Events는 외부로부터 신호를 받고 트리거를 수행하는 역할을 안정적으로 수행하기 위해 크게 3가지 Kubernetes CRD로 구성됩니다. 바로 EventSource와 EventBus, Sensor인데요.
(출처: https://argoproj.github.io/argo-events)
EventSource 리소스는 k8s 클러스터 내/외부로부터 사전 정의된 이벤트를 감지하는 역할을 수행합니다. 감지한 이벤트는 cloudevents 표준으로 변환해 EventBus로 보냅니다.
cloudevents 표준이란?
플랫폼이나 서비스가 상호작용하면서 정말 다양한 이벤트들이 오고갑니다. 하지만 이런 이벤트를 정의하는 양식이 제각각 다르면 각 양식을 처리하는 로직이나 플러그인이 별도로 필요하겠죠. 이런 문제를 해결하기 위해 나온 것이 cloudevents 표준으로, 어떤 특정 플랫폼이나 벤더에 종속되지 않는 공통적으로 사용할 수 있는 이벤트 양식입니다.
EventBus 리소스는 EventSource와 Sensor 사이에서 이벤트를 전송하는 역할을 수행합니다. NATS, Jetstream, Kafka와 같은 스트림 처리 기술들로 구현되어 있습니다.
Sensor 리소스에서는 dependencies
필드(Input)와 triggers
필드(Output)가 정의됩니다. EventBus 리소스로부터 dependencies
필드에 정의된 이벤트를 전달받으면, triggers
필드에 정의된 트리거 작업을 수행합니다.
Argo Events는 다음과 같은 경우에 사용을 고려할 수 있습니다.
- Kubernetes 환경에서 외부로부터 이벤트를 받아 특정 작업을 트리거하는 자동화 워크플로우를 구축하고 싶은 경우
- Argo Workflows 또는 Argo Rollouts를 사용 중인데 외부 이벤트로 해당 툴들의 기능을 트리거하고 싶은 경우
마무리
이렇게 Argo CD 말고도 Argo 프로젝트를 구성하는 툴 3가지를 알아봤습니다. Kubernetes라는 플랫폼을 더 유연하게 사용할 수 있도록 도와주는 Argo 프로젝트가 흥미롭죠?
Argo 프로젝트를 구성하는 4가지 툴은 모두 꾸준히 관심을 받으며 발전하고 있습니다. 특히 GitOps의 안정성과 보안성이 주목받으면서 Argo 프로젝트의 인기도 덩달아 증가하고 있는데요. 그 추세는 앞으로도 이어질 것으로 보입니다.
마침 저는 최근에 CNCF의 공인 Argo 프로젝트 자격증 CAPA(Certified Argo Project Associate)를 취득하면서 Argo 공식 문서를 깊이 들여다보고 정리하는 기회가 있었습니다. 그 과정에서 알게 된 각 Argo 툴들의 핵심 정신과 용례가 여러분들께 도움이 될 것이라 생각해 이렇게 공유하는데요.
이번 아티클로 여러분들이 Argo 프로젝트에 더욱 관심을 가지게 되는 계기가 되었으면 하는 마음입니다.
그럼 다음에 더 흥미롭고 유익한 주제로 찾아오겠습니다.
감사합니다.😸
참고 자료
- https://blog.argoproj.io/argo-cd-2025-user-survey-results-ab045f7d5d9a
- https://argo-workflows.readthedocs.io/en/latest/#what-is-argo-workflows
- https://argoproj.github.io/argo-rollouts
- https://argoproj.github.io/argo-events
✨이번 아티클은 어떠셨나요?
이번 글의 주제에 대해 어떻게 생각하는지 알려주세요! 더 나은 아티클을 전달해드리기 위해 아래 폼에서 짧은 피드백을 받고 있어요.
여러분들의 소중한 의견은 Aiden’s Lab에 큰 힘이 됩니다!