DR 자동화 파이프라인
⸻
🎯 목표
AWS와 GCP 등 멀티 클라우드 환경에서 주요 인프라(네트워크, 데이터베이스, 스토리지, 애플리케이션)를 코드(Infra as Code)로 복제·동기화하고, 평상시에는 리전 간 실시간 복제만 수행하다가 장애 발생 시 한 번의 Git 커밋/PR 머지로 자동으로 페일오버까지 완료하는 완전 자동화된 재해복구(Disaster Recovery) 체계를 설계합니다.
⸻
⚙️ 핵심 구성 요소
1. Crossplane
• Kubernetes CRD 형태로 AWS·GCP 리소스를 선언적 관리
• ProviderConfig와 Composition을 통해 멀티 클라우드 리소스 동기화
2. Terraform (모듈)
• 네트워크, IAM, VPC, DB 등 공통 리소스 초회 생성
• Crossplane Composition에 필요한 모듈 코드 제공
3. Argo CD
• GitOps 엔진으로 Crossplane CR/Composition 동기화
• DR 환경용 parallel ApplicationSet으로 DR 리전 리소스 자동 생성
4. Prometheus + Alertmanager
• Primary 리전 헬스체크(Heartbeats) 모니터링
• 장애 감지 시 Webhook 알림 → GitHub Repository Dispatch 트리거
5. GitHub Actions
• 장애 Webhook 수신 시 DR 브랜치 자동 PR 생성
• PR 머지 시 Argo CD DR Application 동기화 시작
⸻
🏗️ 아키텍처 워크플로우
[초기 설정]
├─ Terraform 모듈로 네트워크·IAM 생성 (AWS, GCP)
└─ Crossplane ProviderConfig 설정 (credentials)
[GitOps 배포]
├─ base/infra/primary/Composition.yaml → Primary 리전 리소스 생성
└─ dr/infra/disaster/Composition.yaml → DR 리전 동기화 CR
[운영 중 DR 동기화]
└─ Argo CD Self-Heal로 Primary↔DR 리소스 일관성 유지
[장애 감지]
├─ Prometheus 헬스체크(Primary Control Plane) 모니터링
└─ Alertmanager Webhook → GitHub dispatch
[자동 페일오버]
├─ GitHub Actions: dr/infra → cherry-pick 최신 커밋 + PR 생성
└─ PR 머지 → Argo CD: DR ApplicationSet 자동 동기화 → 페일오버 완료
⸻
🧪 실전 예시
1) Crossplane Composition (GCP CloudSQL 복제)
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: cloudsql-replica-gcp
spec:
compositeTypeRef:
apiVersion: example.org/v1
kind: CompositeDatabase
resources:
- name: primary
base:
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstance
spec:
forProvider:
region: us-west1
databaseVersion: POSTGRES_13
settings:
tier: db-custom-2-7680
patches:
- type: PatchSet
patchSetName: primary-connection
- name: replica
base:
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstance
spec:
forProvider:
region: us-east1 # DR 리전
databaseVersion: POSTGRES_13
settings:
tier: db-custom-2-7680
writeConnectionSecretToRef:
namespace: crossplane-system
name: db-replica-secret
patches:
- type: PatchSet
patchSetName: replica-connection
2) Argo CD ApplicationSet (Primary & DR)
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: multi-region-infra
spec:
generators:
- list:
elements:
- region: primary
path: base/infra/primary
- region: dr
path: dr/infra/disaster
template:
metadata:
name: '{{region}}-infra'
spec:
project: infra
source:
repoURL: https://github.com/myorg/multicloud-infra
path: '{{path}}'
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: infra-{{region}}
syncPolicy:
automated:
prune: true
selfHeal: true
3) Prometheus 헬스체크 & Alertmanager
# PrometheusRule
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata: { name: dr-failover-check }
spec:
groups:
- name: dr
rules:
- alert: PrimaryControlPlaneDown
expr: up{job="crossplane-controllers"} == 0
for: 1m
labels: { severity: critical }
annotations:
summary: "Primary Crossplane 컨트롤러 비정상"
# Alertmanager
receivers:
- name: 'github-dispatch'
webhook_configs:
- url: 'https://api.github.com/repos/myorg/multicloud-infra/dispatches'
http_config:
bearer_token: ${{ secrets.GITHUB_TOKEN }}
route:
receiver: 'github-dispatch'
4) GitHub Actions 자동 PR
name: Trigger DR Failover
on:
webhook:
types: [PrimaryControlPlaneDown]
jobs:
create-pr:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: |
git checkout dr
git cherry-pick origin/main
git push origin dr
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: "[DR] Failover to DR region"
body: "Automatic DR failover triggered by PrimaryControlPlaneDown alert"
base: dr
head: dr
⸻
✅ 기대 효과
• 민첩한 DR 준비: 평상시 자동 복제, 장애 시 단 1 PR 머지로 페일오버
• GitOps 투명성: DR 조치 이력 모두 Git에 기록
• 멀티 클라우드 일관성: Crossplane Composition으로 클라우드 중립적 관리
• SRE 생산성 향상: 수동 DR 테스트·실행 없이 코드화된 DR 워크플로우
'IT & Tech 정보' 카테고리의 다른 글
IaC Drift as Code: Terraform Cloud Sentinel + OPA Gatekeeper + Argo CD Self-Heal (0) | 2025.05.29 |
---|---|
ModelOps CI/CD: Kubeflow Pipelines + Seldon + Argo Rollouts 기반 (0) | 2025.05.29 |
OpenTelemetry Auto-Instrumentation & Observability-Driven Autoscaling 파이프라인 (0) | 2025.05.29 |
Chaos Engineering as Code: LitmusChaos + ArgoCD + Prometheus 기반 장애 주입·회복 자동화 (0) | 2025.05.29 |
AI/ML 기반 AIOps 파이프라인 구축 (0) | 2025.05.29 |