(Argo CD + Argo Rollouts + Kustomize + Notification Integration)
⸻
🧠 왜 GitOps만으로는 충분하지 않은가?
GitOps는 “Git에 선언하고, 자동 동기화하라”는 이상적인 접근입니다. 하지만 다음 문제들이 자주 발생합니다:
문제 상황 설명
새로운 이미지 적용 시 장애 가능성 Git 상태는 최신이지만, 롤아웃 중 실패 감지 없음
점진적 트래픽 분산 불가능 kubectl rollout은 무조건 100% 적용
알림·인사이트 연동 어려움 Git만 보고는 배포 실패/성공 알기 어려움
이를 해결하기 위해 Progressive Delivery, 즉 점진적 배포 전략이 필요하며,
이를 GitOps와 결합하여 안정성 + 자동화 + 추적성을 동시에 확보할 수 있습니다.
⸻
🔧 핵심 기술 스택 구성
구성요소 역할
Argo CD GitOps 기반 선언적 배포
Argo Rollouts Canary / Blue-Green 배포 제어
Kustomize 환경별 YAML 차등 적용
Argo Notifications Slack/Teams/Discord 등 연동
Prometheus/Grafana 자동화된 헬스 체크 기준 제공
⸻
📁 디렉토리 구조 예시
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
├── overlays/
│ ├── dev/
│ │ └── kustomization.yaml
│ ├── prod/
│ │ └── kustomization.yaml
├── rollout/
│ └── rollout.yaml
⸻
🧪 Argo Rollouts 예시: Canary 전략
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp
spec:
strategy:
canary:
steps:
- setWeight: 10
- pause: { duration: 2m }
- setWeight: 30
- pause: { duration: 5m }
- setWeight: 100
selector:
matchLabels:
app: myapp
template:
spec:
containers:
- name: myapp
image: myorg/myapp:1.2.3
→ 10% → 30% → 100% 순으로 트래픽 증가
→ Prometheus metric 기반 자동 rollback 가능
⸻
🧬 Kustomize로 환경별 차이 관리
# overlays/prod/kustomization.yaml
resources:
- ../../base
- ../../rollout/rollout.yaml
patchesStrategicMerge:
- image-prod.yaml
→ prod와 dev는 서로 다른 rollout 규칙 및 이미지 사용 가능
⸻
📣 Argo Notifications 예시 (Slack)
trigger:
- name: on-sync-failed
condition: app.status.sync.status == 'OutOfSync'
template: slack-alert
template:
- name: slack-alert
slack:
channels: ["#deploy-alerts"]
message: |
🚨 *{{app.metadata.name}}* 배포 실패!
상태: {{app.status.sync.status}}
⸻
📊 Prometheus + Argo 연동으로 자동 헬스체크
metrics:
- name: http-success-rate
interval: 10s
query: |
sum(rate(http_requests_total{status=~"2.."}[1m]))
/
sum(rate(http_requests_total[1m]))
threshold: 0.95
→ 성공률이 95% 이하로 떨어지면 자동 rollback
⸻
📈 Argo CD Sync 옵션 설정
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ApplyOutOfSyncOnly=true
→ Git과 실제 클러스터 상태가 어긋나면 자동 복구
→ 선언적으로 운용 가능
⸻
🧠 실전 팁
과제 전략
Canary 배포 후 장애 감지 못함 Prometheus + Rollouts에 alert 조건 설정
배포 히스토리 추적 어려움 Argo UI로 배포, 롤백, Sync 상태 전부 추적
서로 다른 팀이 하나의 GitOps 관리 앱별 AppProject 분리 + RBAC 설정
이미지 Digest 기반 배포 필요 argocd-image-updater 연동하여 자동 PR
⸻
🧩 결론: 선언적 구성 + 동적 배포 전략 = GitOps 2.0
단순히 Git에 YAML만 저장하는 시대는 끝났습니다.
이제는 선언적 구성과 동적인 점진적 배포 로직을 함께 다루는 시대로 진입했습니다.
• GitOps는 “상태 선언”에 불과합니다.
• Rollouts는 “변화 과정 제어”를 보완합니다.
• Prometheus는 “헬스 기준”을 제공합니다.
• Notifications는 “사람에게 명확한 신호”를 줍니다.
이 네 가지를 결합한 자동화 시스템이 진정한 GitOps의 완성형입니다.
원하신다면 GitHub Actions로 이미지 PR 자동화, Argo CD App-of-Apps 패턴 설명도 이어드릴 수 있습니다.
카테고리 없음