반응형
ArgoCD 백업 및 복구 개요
백업/복구 도구 종류:
| 도구 | 설명 |
| kubectl | Application, AppProject 단위 백업 및 복원 |
| ArgoCD CLI | ArgoCD 전체 설정 백업 및 복원 |
백업 도구 비교:
| 항목 | kubectl | ArgoCD CLI |
| Application | o | o |
| AppProjects | o | o |
| Repositories / Clusters | x | o |
| ArgoCD 설정 (ConfigMap, RBAC) | x | o |
| uid / resourceVersion 제거 | x | o |
| 타 클러스터 복원 | 불안정 | 안정적 지원 |
| 주요 용도 | 단순 백업 / 복원 | 마이그레이션, 재해복구 시나리오 |
유즈케이스별 권장 도구:
| 유즈케이스 | 권장 도구 |
| 실수로 삭제한 특정 App/Project 복원 | kubectl |
| 동일 클러스터 내 전체 복원 | kubectl |
| ArgoCD 버전 업그레이드를 위한 백업/복원 | ArgoCD CLI |
| 다른 클러스터로 마이그레이션 | ArgoCD CLI |
| ArgoCD 완전 삭제 후 재설치 (재해복구) | ArgoCD CLI |
| Repoisitory / Cluster 접속 정보까지 전체 복원이 필요한 경우 | ArgoCD CLI |
백업 방법
kubectl:
# Application 백업
kubectl get applications.argoproj.io -A -o yaml > argocd-applications-backup.yaml
# Project 백업
kubectl get appprojects.argoproj.io -A -o yaml > argocd-appprojects-backup.yaml
ArgoCD CLI:
# ArgoCD 전체 설정 백업 (App, Project, Repo, Cluster, ConfigMap 포함)
argocd admin export --namespace argocd > argocd-full-backup.yaml
정기 백업 설정
백업 정책 기준(샘플):
- 백업 주기: 1일 1회 (매일 02:00AM)
- 보관 주기: 30일
- 보관 장소: NAS
- 백업 방식: Crond / CronJob 이용 백업 스크립트 수행
백업 스크립트:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR_APP="/mnt/netapp/argo_backup/app"
BACKUP_DIR_PROJ="/mnt/netapp/argo_backup/proj"
BACKUP_DIR_FULL="/mnt/netapp/argo_backup/full"
LOG="/mnt/netapp/argo_backup/backup.log"
# NAS 마운트 확인
if ! mountpoint -q /mnt/netapp; then
echo "[$DATE] ERROR: NAS not mounted" >> /var/log/argocd_backup.log
exit 1
fi
# 1. App/Project 단위 백업
kubectl get applications.argoproj.io -A -o yaml > "$BACKUP_DIR_APP/argocd-applications-backup_$DATE.yaml"
kubectl get appprojects.argoproj.io -A -o yaml > "$BACKUP_DIR_PROJ/argocd-appprojects-backup_$DATE.yaml"
# 2. 전체 설정 백업 (Repo/Cluster/ConfigMap 포함)
argocd admin export --namespace argocd > "$BACKUP_DIR_FULL/argocd-full-backup_$DATE.yaml"
# 3. 백업 파일 용량 0 체크
for f in "$BACKUP_DIR_APP/argocd-applications-backup_$DATE.yaml" \
"$BACKUP_DIR_PROJ/argocd-appprojects-backup_$DATE.yaml" \
"$BACKUP_DIR_FULL/argocd-full-backup_$DATE.yaml"; do
if [ ! -s "$f" ]; then
echo "[$DATE] ERROR: $f is empty" >> "$LOG"
exit 1
fi
done
# 30일 초과 파일 삭제
find "$BACKUP_DIR_APP" -type f -mtime +30 -delete
find "$BACKUP_DIR_PROJ" -type f -mtime +30 -delete
find "$BACKUP_DIR_FULL" -type f -mtime +30 -delete
echo "[$DATE] SUCCESS" >> "$LOG"
Crontab 등록:
# crontab -e
0 2 * * * /root/argo_backup/backup_argocd.sh
복구 방법
Case1. Application 복원 시
# NOTE:: 복구 파일: Application 파일
# NOTE:: 사전 작업: 복구할 대상 Application만 YAML 파일에서 추출 후 수행
kubectl apply -f argocd-applications-backup.yaml
# NOTE:: 복구 후 대상 Application 상태 확인
kubectl get applications.argoproj.io -n <namespace> <app-name>
kubectl get applications.argoproj.io -A
Case2. Project 복원 시
# NOTE:: 복구 파일: Application / AppProject 파일
# NOTE:: 프로젝트 파일 먼저 복구 후 애플리케이션 복구
kubectl apply -f argocd-appprojects-backup.yaml
kubectl apply -f argocd-applications-backup.yaml
# NOTE:: 복구 후 대상 Project / Application 상태 확인
kubectl get appprojects.argoproj.io -A
kubectl get applications.argoproj.io -A
Casse3. ArgoCD 설정 정보까지 전체 복원 시
# NOTE:: 복구 파일: ArgoCD 설치 파일 및 전체 설정 백업 파일
# NOTE:: ArgoCD 재설치 후 설정 백업 파일 이용 복구
kubectl apply -f argocd-install.yaml
argocd admin import --namespace argocd < argocd-full-backup.yaml
# NOTE:: ArgoCD 전체 복구 후 상태 확인
# 1. ArgoCD Pod 상태 확인
kubectl get pods -n argocd
# 2. Project / App 개수 확인
kubectl get appprojects.argoproj.io -A
kubectl get applications.argoproj.io -A
# 3. Repo 접속 정보 복원 확인
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=repository
# 4. Cluster 등록 정보 복원 확인
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
# 5. App Sync 상태 확인 (전체가 Synced/Healthy인지)
kubectl get applications.argoproj.io -A \
-o custom-columns="NAME:.metadata.name,SYNC:.status.sync.status,HEALTH:.status.health.status"반응형
'GitOps > ArgoCD' 카테고리의 다른 글
| [ArgoCD] ArgoCD Upgrade (0) | 2026.04.25 |
|---|---|
| [ArgoCD] Air-Gap 환경에서 ArgoCD 설치 (0) | 2026.04.25 |
| [ArgoCD] Server Side Apply 옵션 (0) | 2025.12.01 |
| [ArgoCD] ApplyOutofSyncOnly 옵션 (0) | 2025.11.16 |
| [ArgoCD] Prune 옵션 (0) | 2025.11.14 |