Argo CD Sync 및 배포 전략
1️⃣ 자동 vs 수동 Sync
Argo CD에서 애플리케이션의 상태를 Git 리포지토리와 동기화하는 방식에는 두 가지 주요 방식이 있습니다: 자동 Sync와 수동 Sync.
1. 자동 Sync
자동 Sync는 Argo CD가 Git 리포지토리의 변경사항을 감지하고 이를 Kubernetes 클러스터에 자동으로 적용하는 방식입니다. 이 방식은 개발 및 운영 환경에서 애플리케이션 상태를 항상 최신 상태로 유지하는 데 유용합니다.
- 자동 Sync는 Git 리포지토리의 변경사항을 자동으로 감지하여 즉시 클러스터에 반영합니다.
- 예를 들어,
syncPolicy
설정에서automated
옵션을 활성화하면 자동 Sync가 작동합니다.
예시: 자동 Sync 설정
syncPolicy:
automated:
prune: true # 사용되지 않는 리소스를 자동으로 삭제
selfHeal: true # 변경된 리소스를 자동으로 수정
2. 수동 Sync
수동 Sync는 사용자가 명시적으로 동기화 작업을 트리거할 때만 적용됩니다. 이 방식은 배포 전에 확인 및 검토를 원하는 경우 유용합니다.
- 수동 Sync는 Argo CD UI나 CLI에서 명시적으로 동기화 작업을 트리거해야 합니다.
- 실수로 배포되는 것을 방지하려는 상황에서 사용됩니다.
예시: 수동 Sync
Argo CD UI에서 “Sync” 버튼을 클릭하여 수동으로 동기화를 수행할 수 있습니다.
2️⃣ Sync 옵션 및 동작 방식
Argo CD에서 Sync는 여러 가지 옵션을 제공하며, 이 옵션들은 애플리케이션의 배포 방식을 세밀하게 제어할 수 있도록 돕습니다.
1. Sync 옵션
Prune
: Git 리포지토리에서 삭제된 리소스를 Kubernetes 클러스터에서 자동으로 삭제합니다.SelfHeal
: 리소스가 Git 리포지토리와 다를 경우, 자동으로 클러스터 상태를 복구합니다.
2. 동작 방식
Sync 동작은 Git 리포지토리와 Kubernetes 클러스터 간의 차이를 분석하고, 이를 기반으로 새로운 리소스를 생성하거나 기존 리소스를 수정/삭제합니다. 이 과정은 Argo CD의 Helm, Kustomize, 또는 Manifests를 통해 수행됩니다.
3. 예시: Sync 옵션 설정
syncPolicy:
automated:
prune: true
selfHeal: true
이 설정은 자동 Sync를 활성화하고, 불필요한 리소스를 정리하며, 변경 사항을 즉시 클러스터에 반영합니다.
3️⃣ Sync Waves & Phases (배포 단계 제어)
Argo CD는 애플리케이션 배포를 여러 단계로 나누어 배포할 수 있는 Sync Waves 기능을 제공합니다. 이를 통해 배포 작업의 순서를 제어하고, 복잡한 배포 작업을 효율적으로 관리할 수 있습니다.
1. Sync Waves
Sync Waves는 배포 작업을 여러 단계로 나누어 순차적으로 실행할 수 있게 합니다. 각 Wave는 동기화 단계의 그룹으로, 배포 순서를 설정할 수 있습니다.
2. Phases
Sync Phases는 배포 과정에서 각각의 리소스가 처리되는 순서를 정의합니다. 예를 들어, 데이터베이스 리소스를 먼저 배포하고, 그 다음에 애플리케이션을 배포하는 방식으로 설정할 수 있습니다.
3. 예시: Sync Waves 설정
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- SyncWave=1 # 첫 번째 배포 단계
- SyncWave=2 # 두 번째 배포 단계
4️⃣ Sync Hooks (PreSync, Sync, PostSync)
Argo CD는 배포 과정 중에 특정 작업을 트리거할 수 있는 Sync Hooks를 제공합니다. Sync Hooks는 배포 작업의 각 단계(PreSync, Sync, PostSync)에 실행할 작업을 정의합니다.
1. PreSync Hook
PreSync
는 배포가 시작되기 전에 실행되는 작업입니다. 예를 들어, 배포 전에 데이터베이스 마이그레이션을 실행하거나, 이전 배포 버전에서 데이터를 백업할 수 있습니다.
2. Sync Hook
Sync
는 실제 애플리케이션 배포가 이루어지는 시점입니다. 이 단계에서 실제 Kubernetes 리소스를 배포합니다.
3. PostSync Hook
PostSync
는 배포 후에 실행되는 작업입니다. 예를 들어, 배포 후 애플리케이션의 상태를 모니터링하거나, 추가적인 설정을 적용할 수 있습니다.
4. 예시: Sync Hook 설정
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
syncPolicy:
automated:
prune: true
selfHeal: true
syncHooks:
- hook: PreSync
command: ["sh", "-c", "echo 'Running PreSync task'"]
- hook: PostSync
command: ["sh", "-c", "echo 'Running PostSync task'"]
5️⃣ Blue-Green 배포 및 Canary 배포 적용
Argo CD는 Blue-Green 배포와 Canary 배포 전략을 지원하여, 애플리케이션 배포 시 더 안전하고 점진적인 배포를 할 수 있습니다.
1. Blue-Green 배포
Blue-Green 배포는 새 버전의 애플리케이션을 배포할 때, 기존 버전과 새로운 버전을 동시에 유지하고, 트래픽을 새로운 버전으로 전환하는 전략입니다. 이 방식은 롤백이 쉬운 장점이 있습니다.
2. Canary 배포
Canary 배포는 새 버전의 애플리케이션을 일부 사용자에게만 배포하고, 문제가 없을 경우 점진적으로 배포 대상을 확대하는 방식입니다. 이는 위험을 최소화하며 점진적으로 배포를 관리할 수 있습니다.
3. 예시: Canary 배포 설정
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-canary-app
spec:
syncPolicy:
automated:
prune: true
selfHeal: true
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-canary-app.git
targetRevision: HEAD
path: manifests
project: default
syncOptions:
- CanaryStrategy=true
6️⃣ 배포 롤백 (Rollback) 및 히스토리 관리
배포 롤백은 새로운 버전의 배포가 문제가 발생했을 때 이전 안정적인 버전으로 되돌리는 작업입니다. Argo CD는 배포 히스토리를 관리하며, 손쉽게 롤백을 할 수 있습니다.
1. 롤백
Argo CD는 배포 기록을 저장하여, 사용자가 이전 버전으로 쉽게 롤백할 수 있도록 지원합니다. 이 기능은 배포 중 문제가 발생했을 때 매우 유용합니다.
2. 예시: 롤백 수행
Argo CD UI에서 “Rollback” 버튼을 클릭하거나 CLI에서 다음 명령어를 사용하여 롤백할 수 있습니다.
argocd app rollback my-app --revision <revision_number>