← 아티클 목록

GitOps와 ArgoCD 기초 — 깃 저장소로 배포하기

2028-09-11#kubernetes#gitops#argocd

쿠버네티스에 배포할 때 kubectl apply를 직접 치다 보면 "지금 클러스터에 실제로 뭐가 떠 있지?"라는 질문에 답하기 어려워집니다. 누가 손으로 바꿨는지, 무엇이 최신인지 추적이 안 됩니다. GitOps는 이 문제를 깃 저장소를 단일 진실 공급원(single source of truth)으로 삼아 해결하고, ArgoCD는 그 방식을 쿠버네티스에서 구현해 주는 도구입니다.

GitOps의 핵심 원리

GitOps는 "원하는 상태를 깃에 선언하고, 도구가 클러스터를 그 상태로 맞춘다"는 발상입니다. 사람이 클러스터를 직접 건드리는 대신, 깃에 커밋(PR 병합)하면 그 변경이 자동으로 반영됩니다. 배포 이력이 곧 깃 히스토리이므로 롤백은 이전 커밋으로 되돌리는 일과 같아집니다.

항목전통적 배포GitOps
변경 출발점kubectl·CI 스크립트깃 커밋/PR
진실 공급원클러스터 현재 상태깃 저장소
롤백수동 재배포이전 커밋으로 revert
감사 추적흩어짐깃 히스토리에 일원화
드리프트 감지어려움도구가 자동 비교

ArgoCD가 하는 일

ArgoCD는 클러스터 안에서 돌면서 지정한 깃 저장소를 주기적으로 들여다봅니다. 저장소의 매니페스트(원하는 상태)와 클러스터의 실제 상태를 비교해, 둘이 다르면 OutOfSync로 표시하고 동기화(sync) 시 그 차이를 클러스터에 적용합니다.

배포 대상은 Application이라는 리소스로 정의합니다.

YAML
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: shop-frontend
  namespace: argocd
spec:
  source:
    repoURL: https://github.com/myorg/shop-manifests
    path: frontend
    targetRevision: main
  destination:
    server: https://kubernetes.default.svc
    namespace: shop
  syncPolicy:
    automated:
      prune: true      # 깃에서 지워진 리소스는 클러스터에서도 제거
      selfHeal: true   # 누가 손으로 바꿔도 깃 상태로 되돌림

selfHeal: true가 핵심입니다. 누군가 클러스터를 손으로 수정해도 ArgoCD가 깃 상태로 다시 되돌리므로, 클러스터가 항상 깃과 일치합니다.

동기화 상태 확인하기

CLI로 애플리케이션 상태와 차이를 직접 볼 수 있습니다.

로컬 터미널
argocd app list
argocd app get shop-frontend
argocd app diff shop-frontend
argocd app sync shop-frontend

diff는 깃과 클러스터의 차이를, sync는 그 차이를 적용하는 명령입니다. 자동 동기화를 켜 두면 커밋만으로 배포가 끝납니다.

요점 정리

  • GitOps는 깃 저장소를 진실 공급원으로 삼아 클러스터 상태를 선언적으로 관리한다.
  • 배포는 kubectl이 아니라 깃 커밋/PR에서 출발하고, 롤백은 이전 커밋으로 되돌리는 것이다.
  • ArgoCD는 Application 리소스로 대상을 정의하고, 깃과 클러스터를 비교·동기화한다.
  • pruneselfHeal로 클러스터가 항상 깃과 일치하도록 유지한다.

ArgoCD를 직접 띄우고 Application을 만들어 동기화 흐름을 눈으로 확인하는 실습은 쿠버네티스 트랙에서 할 수 있습니다 — 회원가입 없이 무료로.