ArgoCD와 함께하는 Kubernetes에서의 Zero‑Downtime 롤백 – 실용적인 GitOps 구세주

발행: (2025년 12월 3일 오후 06:39 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

ArgoCD 롤백이란?

ArgoCD 롤백은 이전에 성공적으로 적용된 Git 커밋으로 Kubernetes 리소스를 복원하는 것을 의미합니다.

ArgoCD가 제공하는 것:

  • 전체 배포 히스토리
  • 모든 동기화 이벤트의 시각적 타임라인
  • 클러스터 상태를 과거 어느 시점으로든 복원할 수 있는 기능

핵심 특성

  • 빠름
  • 안전함
  • Git‑기반
  • 완전 추적 가능
  • 올바르게 수행하면 다운타임 제로
  • kubectl 불필요, 오래된 YAML 파일을 찾을 필요 없음, 추측 작업 없음

왜 롤백이 필요할까?

최고의 팀이라도 잘못된 버전을 배포합니다 – 이는 정상적인 일입니다. 일반적인 프로덕션 장애 사례는 다음과 같습니다:

  • 잘못된 컨테이너 이미지
  • 잘못 설정된 환경 변수
  • 오류가 있는 Helm 값
  • CrashLoopBackOff 상태의 파드
  • API 연동 실패
  • 잘못된 데이터베이스 연결 문자열
  • 포트, 레플리카 수, readiness probe 오류

이러한 상황이 발생하면 시간 = 비용 입니다. ArgoCD는 즉시 마지막 정상 상태로 복구할 수 있는 “패닉 버튼”을 제공합니다.

ArgoCD 롤백은 어디에 쓰나요?

롤백은 다음과 같은 경우에 필수적입니다:

  • 프로덕션 Kubernetes 클러스터 – 트래픽이 급증하는 시점에 새 버전이 실패하면 즉시 롤백합니다.
  • 스테이징 / UAT – QA 팀이 빠르게 테스트하고 자주 문제를 일으키므로, 롤백으로 다운타임을 방지합니다.
  • Canary / Blue‑Green 배포 – 카나리 버전이 실패하면 즉시 롤백합니다.
  • 마이크로서비스 환경 – 20~200개의 서비스가 독립적으로 배포되는 경우.
  • GitOps를 실천하는 팀 – 롤백은 GitOps 문화에서 일등 시민입니다.

잘못된 배포 처리 방법 (롤백 전략)

아래는 권장되는 GitOps‑안전 롤백 흐름입니다:

Step 1 – 실패 감지

일반적인 실패 신호:

  • CrashLoopBackOff
  • ImagePullBackOff
  • Pending
  • readiness probe 실패
  • 높은 오류율 (Grafana 통해)

Step 2 – Auto‑Sync 일시 중지 (선택)

Auto‑sync가 활성화돼 있다면, 추가적인 잘못된 배포를 방지하기 위해 일시적으로 비활성화합니다.

Step 3 – ArgoCD UI → Application → History 탭 열기

다음과 같은 항목이 표시됩니다:

Revision: 7eav2c (HEAD)
Revision: bf32ac (Stable Release)

Step 4 – 안정적인 리비전 선택

실패한 커밋 바로 이전의 커밋을 선택합니다.

Step 5 – ROLLBACK 클릭

ArgoCD가 수행하는 작업:

  • Deployment YAML 되돌리기
  • 변경된 Service/Ingress 되돌리기
  • 잘못된 파드 삭제
  • 이전 안정 버전 적용

Step 6 – 클러스터 상태 검증

다음 명령 실행:

kubectl get pods

Step 7 – 코드 수정 후 새 버전 푸시

준비가 되면 ArgoCD가 새 버전을 안전하게 배포합니다.

전체 프로젝트 구현 (엔드‑투‑엔드 예시)

Step 1 – Kubernetes 매니페스트가 있는 Git 레포 만들기

디렉터리 구조:

myapp/
  └─ deployment.yaml

예시 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myregistry/myapp:v1   # 안정 버전 (v1)

이 파일을 안정 버전(v1)으로 커밋합니다.

Step 2 – ArgoCD 설치

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

ArgoCD UI에 로그인합니다.

Step 3 – ArgoCD Application 생성

argocd app create myapp \
  --repo https://github.com/srinivasa/myapp.git \
  --path . \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

Step 4 – 버전 v2 배포

Git에서 이미지 태그를 업데이트:

image: myregistry/myapp:v2

커밋 → 푸시. ArgoCD가 자동으로 동기화합니다.

Step 5 – 배포 실패

전형적인 증상:

  • CrashLoopBackOff
  • 파드가 반복적으로 재시작
  • 트래픽 감소
  • 알림 발생

Step 6 – 롤백 수행

  1. ArgoCD UI 열기
  2. myappHistory 선택
  3. 안정 커밋(v1) 선택
  4. ROLLBACK 클릭

ArgoCD가 즉시 v1을 복원하고 파드가 안정화됩니다.

Step 7 – 결함 수정 후 v3 푸시

문제를 해결하고 새 커밋(v3)을 푸시하면 ArgoCD가 이를 감지해 다시 배포합니다.

사용 도구

ToolPurpose (목적)
ArgoCDGitOps 엔진 – 동기화, 롤백, 자동 복구 수행
Docker버전 관리된 컨테이너 이미지 빌드
Prometheus + Grafana모니터링 및 알림 – 장애 감지

ArgoCD 롤백의 중요성

  • Zero‑Downtime 복구 – 롤백이 몇 초 안에 완료되어, 몇 분이 걸리지 않음.
  • 완전 감사 가능 – 모든 롤백이 Git 커밋과 연결돼 있어 컴플라이언스에 최적.
  • 예측 가능한 시스템 상태 – 클러스터가 항상 마지막 정상 구성으로 복귀.
  • 수동 kubectl 실수 제거kubectl apply -f old-file.yaml 같은 명령이 필요 없음.
  • 개발자 신뢰도 향상 – 롤백이 즉시 가능하므로 팀이 더 빠르게 배포.
  • 완벽한 GitOps 구현 – Git = 진실의 원천, ArgoCD = 시행자, 클러스터 = 결과물.
Back to Blog

관련 글

더 보기 »