TECH

ArgoCD와 GitOps로 구축하는 쿠버네티스 무중단 배포 파이프라인

ArgoCD 기반 GitOps로 쿠버네티스 배포를 선언적으로 관리하는 방법을 정리한다. 프로그레시브 딜리버리, 롤백, 시크릿 관리, 멀티클러스터 운영까지 실무 관점으로 다룬다.

ArgoCD와 GitOps로 구축하는 쿠버네티스 무중단 배포 파이프라인

ArgoCD와 GitOps로 구축하는 쿠버네티스 무중단 배포 파이프라인

쿠버네티스 운영이 성숙해지면서 배포 방식의 무게 중심이 명령형에서 선언형으로 이동했다. GitOps는 클러스터의 원하는 상태를 Git 저장소에 선언하고, 컨트롤러가 실제 상태를 이 선언에 지속적으로 일치시키는 방식이다. 2026년 현재 ArgoCD는 이 패러다임을 구현하는 대표적 도구로, 배포의 재현성과 감사 가능성을 근본적으로 개선한다. 이 글은 ArgoCD 기반 GitOps 파이프라인을 실전 수준으로 구축하는 방법을 다룬다.

GitOps의 원리와 ArgoCD 동작 방식

GitOps의 핵심 원칙은 Git이 유일한 진실의 원천이라는 것이다. 모든 배포 변경은 클러스터에 직접 명령을 내리는 대신, Git 저장소에 매니페스트를 커밋하는 방식으로 이뤄진다. ArgoCD는 대상 저장소를 지속적으로 감시하다가, 선언된 상태와 클러스터의 실제 상태 사이에 차이가 생기면 이를 감지하고 동기화한다. 이 풀 기반 모델은 클러스터 자격 증명을 외부 CI에 노출하지 않아 보안 측면에서도 유리하다.

모든 변경이 Git 커밋으로 남기 때문에, 누가 언제 무엇을 바꿨는지 완전한 감사 추적이 자동으로 확보된다. 문제가 생기면 이전 커밋으로 되돌리는 것만으로 롤백이 완료된다. ArgoCD의 웹 대시보드는 각 애플리케이션의 동기화 상태와 리소스 상태를 시각적으로 보여주므로, 클러스터 상태를 직관적으로 파악할 수 있다. 애플리케이션을 코드로 정의하는 앱 오브 앱스 패턴을 쓰면, 여러 애플리케이션을 계층적으로 관리하며 전체 플랫폼을 선언적으로 부트스트랩할 수 있다.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: web-service
spec:
  source:
    repoURL: https://github.com/org/manifests
    path: apps/web
    targetRevision: main
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

프로그레시브 딜리버리와 무중단 배포

단순한 롤링 업데이트를 넘어, 위험을 최소화하는 점진적 배포 전략이 프로덕션의 표준이 되고 있다. Argo Rollouts는 카나리와 블루그린 배포를 선언적으로 정의하게 해준다. 카나리 배포는 새 버전을 소수의 트래픽에만 먼저 노출하고, 메트릭이 정상이면 점진적으로 비중을 늘린다. 오류율이나 지연이 임계치를 넘으면 자동으로 롤백되므로, 문제 있는 배포의 영향 범위가 최소화된다.

이 자동 판단의 근거는 관측성 데이터다. 프로메테우스에서 수집한 오류율, 지연, 처리량을 분석 템플릿으로 정의해두면, Argo Rollouts가 각 단계에서 이를 평가해 진행 여부를 결정한다. 서비스 메시와 결합하면 트래픽 분할을 세밀하게 제어할 수 있어, 헤더 기반 라우팅으로 특정 사용자군에만 새 버전을 노출하는 정교한 실험도 가능하다. 이런 자동화된 검증 게이트가 있으면 배포 빈도를 높이면서도 안정성을 유지할 수 있다.

시크릿 관리와 멀티클러스터 운영

GitOps의 딜레마 중 하나는 민감 정보다. 매니페스트를 Git에 두어야 하는데 비밀번호나 토큰을 평문으로 커밋할 수는 없다. 이 문제는 암호화된 시크릿을 저장하고 클러스터 내에서만 복호화하는 방식이나, 외부 시크릿 관리 시스템과 연동해 런타임에 주입하는 방식으로 해결한다. 어느 쪽이든 민감 정보 자체는 Git에 남지 않고, 참조나 암호문만 버전 관리된다는 원칙을 지킨다.

조직이 성장하면 개발, 스테이징, 프로덕션을 넘어 지역별로 다수의 클러스터를 운영하게 된다. ArgoCD는 하나의 컨트롤 플레인에서 여러 클러스터를 관리할 수 있고, ApplicationSet을 활용하면 클러스터 목록을 순회하며 동일한 애플리케이션을 자동으로 배포한다. 환경별 차이는 Kustomize 오버레이나 Helm 값 파일로 표현해, 공통 베이스는 재사용하면서 환경 특화 설정만 분리한다. 이러한 구조는 클러스터 수가 늘어도 운영 복잡도가 선형적으로만 증가하도록 억제한다. 결국 GitOps의 진짜 가치는 인프라 전체를 코드로 다루며 사람의 수작업과 그로 인한 실수를 체계적으로 제거하는 데 있다.

드리프트 탐지와 자가 치유

GitOps가 강력한 이유 중 하나는 구성 드리프트를 자동으로 감지하고 교정한다는 점이다. 드리프트란 누군가 클러스터에 직접 손을 대 실제 상태가 Git에 선언된 상태와 어긋나는 상황을 말한다. 전통적인 배포에서는 이런 수동 변경이 문서화되지 않은 채 쌓여 시스템의 실제 상태를 아무도 정확히 모르게 되는 문제를 낳았다. ArgoCD는 선언된 상태와 실제 상태를 지속적으로 비교해, 차이가 발생하면 대시보드에 즉시 표시한다. 자가 치유 옵션을 켜면 수동 변경을 자동으로 되돌려 Git을 항상 진실의 원천으로 유지한다.

이 강력함은 신중하게 다뤄야 한다. 자가 치유가 무분별하게 동작하면 긴급 상황에서 운영자가 수행한 임시 조치까지 되돌려 버릴 수 있다. 따라서 자동 동기화와 프룬 정책은 애플리케이션의 중요도에 따라 차등 적용하는 것이 현명하다. 또한 특정 리소스나 필드는 동기화 대상에서 제외하는 예외 설정으로, 오토스케일러가 조정하는 레플리카 수처럼 클러스터가 정당하게 변경하는 값이 불필요하게 되돌려지지 않도록 관리해야 한다.

배포 순서 제어도 실전에서 중요한 요소다. 데이터베이스 마이그레이션이 애플리케이션 배포보다 먼저 실행되어야 하거나, 특정 리소스가 준비된 뒤에야 다음 단계가 진행되어야 하는 경우가 많다. ArgoCD의 동기화 훅과 웨이브 기능을 쓰면 이런 순서 의존성을 선언적으로 표현할 수 있다. 배포 알림을 협업 도구와 연동해 팀이 각 배포의 성공과 실패를 실시간으로 파악하게 하고, 실패 시 자동 롤백 정책을 정의해두면, 사람의 개입 없이도 시스템이 건강한 상태로 수렴하는 견고한 운영 체계가 완성된다.