본문 바로가기
IT & Tech 정보

Chaos Engineering as Code: LitmusChaos + ArgoCD + Prometheus 기반 장애 주입·회복 자동화

by 지식과 지혜의 나무 2025. 5. 29.
반응형

파이프라인



🎯 개요

“이제 장애를 수동으로 테스트하지 말고, **코드로 정의된 실험(Chaos Experiments)**을 CI/CD 파이프라인에 통합”합니다.
ArgoCD를 통해 Chaos 실험을 선언적(Manifest)으로 배포하고, Prometheus 모니터링 지표 기반으로 **자동 롤백·자가 치유(Healing Loop)**를 실행하는 완전 자동화된 Chaos Engineering 워크플로우를 구축합니다.



⚙️ 핵심 구성 요소
1. LitmusChaos
• Kubernetes 네이티브 Chaos 실험 프레임워크
• CPU·메모리 폭주, 네트워크 지연, Pod 삭제 등 다양한 Chaos 실험 제공
2. ArgoCD + Application CRD
• ChaosExperiment, ChaosResult CR을 GitOps 방식으로 관리
• syncPolicy로 실험 주기·스케줄링 자동화
3. Prometheus + Alertmanager
• SLI/SLO 지표(응답률, 에러율, 레이턴시 등) 모니터링
• Chaos 실험 중 이상치 감지 시 자동 알람
4. Custom Remediation Operator
• 실험 실패(정의한 SLO 위반) 시 자동 롤백 또는 배포 재시도
• GitOps 기록: auto-remediate: rollback aftermath of chaos-experiment 커밋
5. GitHub Actions
• Chaos Experiment 적용 전후 CI 체크
• 결과 요약 메시지를 PR 코멘트 또는 Slack으로 전송



🏗️ 아키텍처 워크플로우

[Git Push Chaos Manifests]
          ↓
┌─────────────────────────┐
│   ArgoCD Sync ➔ Chaos   │
│  (ChaosExperiment CR)   │
└─────────────┬───────────┘
              │ creates
              ▼
   ┌──────────────────────┐
   │   LitmusChaos       │  ← 지정된 주기 또는 수동 트리거
   │  executes experiment│
   └───────┬──────────────┘
           │ emits
           ▼
┌─────────────────────────┐        ┌───────────────────┐
│ Prometheus observes     │◀──────▶│ Application SLI   │
│ SLO violation?          │        └───────────────────┘
└───────┬─────────────────┘
        │ alert
        ▼
┌─────────────────────────┐        ┌───────────────────┐
│ Alertmanager Webhook    │──────▶│ Remediation CR    │
└───────┬─────────────────┘        └───────────────────┘
        │ generates                   │ triggers
        │                              ▼
        ▼                        ┌───────────────────┐
┌─────────────────────────┐      │ Remediation       │
│ Remediation Operator    │────▶│ (rollout restart │
│ applies rollback/       │      │  / revert commit) │
│ self-heal logic         │      └───────────────────┘
└────────────┬────────────┘
             │ Git commit remediation-log.yaml
             ▼
       ArgoCD Self-Heal Sync




🧪 실전 예제

1. ChaosExperiment CR 예시

apiVersion: litmuschaos.io/v1alpha1
kind: ChaosExperiment
metadata:
  name: pod-delete-experiment
spec:
  definition:
    scope: Namespaced
    permissions:
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["delete","get","list"]
  # 30초마다 1개 Pod 강제 삭제, 3분간 실험
  interval: 30
  duration: 180
  target:
    labelSelectors:
      - "app=webapp"
    mode: one

2. Prometheus SLO 룰

groups:
- name: webapp-slo
  rules:
    - alert: WebAppErrorRateHigh
      expr: |
        rate(http_requests_total{status=~"5.."}[2m]) > 0.01
      for: 1m
      labels:
        severity: critical

3. Alertmanager Webhook → RemediationRequest

apiVersion: remediation.example.com/v1alpha1
kind: RemediationRequest
metadata:
  name: rr-chaos-pod-delete
spec:
  target:
    kind: ChaosEngine
    name: pod-delete-engine
  action: rollback

4. Remediation Operator (Go Pseudo-Code)

func reconcile(req RemediationRequest) {
  if req.Spec.Action == "rollback" {
    // GitOps rollback: git revert last ArgoCD sync commit
    exec.Command("git", "revert", "--no-edit", req.Status.LastSyncCommit).Run()
    // Or Kubernetes rollout restart
    client.AppsV1().Deployments("default").Restart("webapp")
  }
  updateRequestStatus(req, "Succeeded")
}




✅ 기대 효과
• 지속적 네트워크·시스템 회복력 검증: 코드에 정의된 Chaos 실험이 주기적으로 실행
• 서비스 안정성 보장: Prometheus SLO 기반 자동 중단·롤백
• 투명한 이력 관리: 모든 실험 및 복구 작업 Git 커밋으로 기록, ArgoCD Self-Heal 검증
• SRE 생산성 향상: 수동 회복 없이 자동화된 Healing Loop로 업무 부담 경감



🔧 확장 포인트
• 카나리 Chaos: Argo Rollouts + LitmusChaos 결합해 Canary 단계별 장애 실험
• 서비스 메시 연동: Istio Fault Injection vs. LitmusChaos 실험 비교
• ChatOps 통합: Slack 명령어로 Chaos 실험 On/Off 제어
• ML 이상 탐지: Elastic ML 이상치 감지를 Chaos 트리거로 활용



“Chaos Engineering을 코드로 운영하고, 자동으로 복구하는 완전 자율 SRE 파이프라인”
를 통해 클라우드 네이티브 환경의 회복력(Resilience)을 새로운 차원으로 끌어올리는 전략입니다.

반응형