GitOps란 무엇인가? ArgoCD로 완성하는 쿠버네티스 선언적 배포

1. "kubectl apply"의 배신: 설정 드리프트 문제

전통적인 CI/CD 파이프라인에서 쿠버네티스 배포는 보통 CI 서버(Jenkins, GitHub Actions 등)가 kubectl apply -f <yaml> 명령어를 실행하는 방식으로 이루어집니다(Push 방식). 이 방식은 간단하지만 여러 문제를 야기합니다. 개발자가 테스트를 위해 임시로 클러스터의 설정을 직접 변경했다면? 배포 스크립트에 오류가 있었다면? 시간이 지남에 따라 클러스터의 실제 상태(Live State)와 우리가 의도했던 상태(Desired State) 사이의 차이가 벌어지는 '설정 드리프트(Configuration Drift)'가 발생합니다.

이러한 문제를 해결하고, 쿠버네티스 환경의 애플리케이션과 인프라를 보다 안정적이고 예측 가능하게 관리하기 위해 등장한 패러다임이 바로 GitOps입니다.

2. GitOps: Git을 '단일 진실 공급원(SSoT)'으로 삼다

GitOps는 애플리케이션과 인프라의 '원하는 상태(Desired State)'를 Git 저장소에서 선언적으로 관리하는 것을 핵심 원칙으로 하는 운영 모델입니다. 즉, 쿠버네티스 클러스터의 모든 상태(Deployment, Service, ConfigMap 등)는 오직 Git 저장소의 매니페스트(YAML 파일)에 의해서만 정의되고 변경되어야 합니다. Git이 시스템의 유일한 '단일 진실 공급원(Single Source of Truth)'이 되는 것입니다.

GitOps의 핵심적인 특징은 CI 서버가 클러스터에 직접 명령을 내리는 'Push' 방식이 아니라, 클러스터 내부에 설치된 에이전트가 Git 저장소를 감시하다가 변경 사항이 생기면 스스로 클러스터의 상태를 Git과 동기화하는 'Pull' 방식을 사용한다는 점입니다.

3. GitOps의 구현체: ArgoCD

이러한 GitOps의 Pull 방식을 구현하는 대표적인 오픈소스 도구가 바로 ArgoCD입니다. ArgoCD는 쿠버네티스 클러스터에 설치되어 다음의 역할을 수행하는 'GitOps 컨트롤러'입니다.

  1. 감시(Watch): ArgoCD는 지정된 Git 저장소를 지속적으로 감시합니다.
  2. 비교(Compare): Git 저장소에 정의된 매니페스트(Desired State)와 클러스터의 실제 상태(Live State)를 주기적으로 비교합니다.
  3. 동기화(Sync): 만약 두 상태 간에 차이가 발견되면(OutOfSync 상태), ArgoCD는 클러스터의 상태를 Git에 정의된 상태와 일치하도록 자동으로 업데이트(Sync)합니다.

개발자는 더 이상 kubectl 명령어를 직접 실행할 필요가 없습니다. 애플리케이션의 버전을 올리거나 복제본 수를 변경하고 싶다면, Git 저장소의 YAML 파일을 수정하고 Pull Request를 생성하여 동료의 리뷰를 받은 뒤 머지(Merge)하기만 하면 됩니다. 그러면 ArgoCD가 이 변경 사항을 즉시 감지하여 클러스터에 자동으로 반영해 줍니다.

4. 한눈에 비교: 전통적 CI/CD (Push) vs. GitOps (Pull)

구분 전통적 CI/CD (Push 방식) GitOps (Pull 방식 with ArgoCD)
진실 공급원 명확하지 않음 (CI 스크립트, 개발자 로컬 등) Git 저장소 (SSoT)
배포 방식 CI 서버가 클러스터에 변경 사항을 Push 클러스터 내 에이전트가 Git에서 변경 사항을 Pull
보안 CI 서버에 강력한 클러스터 접근 권한(Credential) 필요 에이전트는 클러스터 내에서만 동작하므로 외부 노출 위험 적음
설정 드리프트 탐지하기 어렵고, 수동으로 해결해야 함 자동으로 탐지하고 지속적으로 동기화(Reconciliation)
롤백 이전 파이프라인을 재실행하거나 수동으로 복구 Git에서 git revert 명령어로 이전 커밋으로 되돌림
감사 및 추적 CI/CD 로그를 통해 파악해야 함 모든 변경 사항이 Git 커밋 히스토리에 명확하게 남음

GitOps는 단순히 새로운 도구를 도입하는 것을 넘어, 개발과 운영의 문화를 바꾸는 강력한 패러다임입니다. 모든 변경 사항을 Git을 통해 투명하게 관리하고, Pull Request 기반의 협업을 통해 안정성을 높이며, 자동화된 동기화를 통해 사람의 실수를 원천적으로 차단합니다. ArgoCD와 같은 도구를 통해 구현된 GitOps는 복잡하고 동적인 쿠버네티스 환경을 가장 안정적이고 효율적으로 운영할 수 있는 현대적인 표준 방식으로 자리 잡고 있습니다.

댓글