정지용
기술스택 목록
DevOps

Argo CD

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

Git 저장소를 원본 삼아 쿠버네티스 애플리케이션 배포 상태를 자동 동기화하는 GitOps 컨트롤러

Argo CD는 쿠버네티스 클러스터를 위한 선언적 GitOps 지속 배포 도구로, Git 저장소에 커밋된 매니페스트(YAML, Helm, Kustomize 등)를 원하는 상태로 삼아 실제 클러스터 상태와 지속적으로 비교하고 동기화한다. 배포 파이프라인에서 kubectl apply를 수동으로 실행하거나 CI 도구가 클러스터 접근 권한을 직접 갖는 방식 대신, Git을 단일 진실 공급원(Single Source of Truth)으로 삼아 배포 이력을 추적하고 변경 사항을 코드 리뷰처럼 관리할 수 있게 해준다. 클러스터 내부에서 실행되는 컨트롤러 형태이며, 상태 불일치를 감지하면 이를 시각적으로 보여주고 필요 시 자동 또는 수동으로 원래 상태로 되돌린다.

이럴 때 사용합니다

  • 쿠버네티스 배포를 Git 커밋 이력만으로 추적하고 감사(audit)하고 싶을 때
  • CI 파이프라인에 클러스터 자격 증명을 직접 노출하지 않고 배포를 분리하고 싶을 때
  • 여러 클러스터나 환경의 배포 상태를 한 곳에서 시각적으로 비교하고 관리하고 싶을 때
  • 수동 kubectl apply로 인한 설정 드리프트와 배포 불일치를 줄이고 싶을 때

핵심 개념

Application
Argo CD가 관리하는 배포 단위로, 어떤 Git 저장소의 어떤 경로를 어떤 클러스터의 어떤 네임스페이스에 배포할지를 정의하는 커스텀 리소스이다.
Sync
Git에 정의된 원하는 상태와 클러스터의 실제 상태를 비교하여 차이를 클러스터에 반영하는 동작이다.
Reconciliation Loop
컨트롤러가 주기적으로 Git 상태와 클러스터 상태를 비교하며 드리프트(drift)를 감지하는 지속적인 감시 과정이다.
App of Apps
여러 Application 리소스를 하나의 상위 Application으로 묶어 관리함으로써 다수의 애플리케이션 배포를 계층적으로 부트스트랩하는 패턴이다.
Sync Policy
변경 감지 시 자동으로 동기화할지, 수동 승인 후 동기화할지를 결정하는 설정이다.

Argo CD Application 정의

지정한 Git 저장소 경로의 매니페스트를 sample-app 네임스페이스에 자동으로 동기화하고, 클러스터에서 발생한 임의 변경도 원래 상태로 되돌리도록(selfHeal) 설정한 예시이다.

YAML
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: sample-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/sample-app-manifests.git
    targetRevision: main
    path: k8s
  destination:
    server: https://kubernetes.default.svc
    namespace: sample-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

처음 쓸 때 흔한 함정

  • 자동 동기화(selfHeal)를 켜면 클러스터에서 수동으로 수정한 값이 즉시 원복될 수 있다.
  • Git 저장소 접근 권한과 클러스터 배포 권한을 분리하지 않으면 GitOps의 보안 이점이 약해진다.
  • 삭제된 리소스를 자동으로 정리(prune)하지 않으면 Git에서 지운 리소스가 클러스터에 남아 있을 수 있다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.