ArgoCD와 함께하는 Kubernetes에서의 Zero‑Downtime 롤백 – 실용적인 GitOps 구세주
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 – 실패 감지
일반적인 실패 신호:
CrashLoopBackOffImagePullBackOffPending- 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 – 롤백 수행
- ArgoCD UI 열기
- myapp → History 선택
- 안정 커밋(v1) 선택
- ROLLBACK 클릭
ArgoCD가 즉시 v1을 복원하고 파드가 안정화됩니다.
Step 7 – 결함 수정 후 v3 푸시
문제를 해결하고 새 커밋(v3)을 푸시하면 ArgoCD가 이를 감지해 다시 배포합니다.
사용 도구
| Tool | Purpose (목적) |
|---|---|
| ArgoCD | GitOps 엔진 – 동기화, 롤백, 자동 복구 수행 |
| Docker | 버전 관리된 컨테이너 이미지 빌드 |
| Prometheus + Grafana | 모니터링 및 알림 – 장애 감지 |
ArgoCD 롤백의 중요성
- Zero‑Downtime 복구 – 롤백이 몇 초 안에 완료되어, 몇 분이 걸리지 않음.
- 완전 감사 가능 – 모든 롤백이 Git 커밋과 연결돼 있어 컴플라이언스에 최적.
- 예측 가능한 시스템 상태 – 클러스터가 항상 마지막 정상 구성으로 복귀.
- 수동
kubectl실수 제거 –kubectl apply -f old-file.yaml같은 명령이 필요 없음. - 개발자 신뢰도 향상 – 롤백이 즉시 가능하므로 팀이 더 빠르게 배포.
- 완벽한 GitOps 구현 – Git = 진실의 원천, ArgoCD = 시행자, 클러스터 = 결과물.