카오스 엔지니어링

프로덕션 환경에서 장애를 주입하여 시스템의 복원력을 검증


프로덕션 환경에서 장애를 주입하여 시스템의 복원력을 검증

목표: 장애에 강한 시스템을 설계하고 운영할 수 있는 수준


🎯 카오스 엔지니어링 개요

정의

프로덕션 환경에서 실험을 통해 시스템의 불확실성을 발견.

graph TB
    subgraph "카오스 엔지니어링"
        STEADY["📊 Steady State"] -->|"가설"| HYPOTHESIS["🎯 가설"]
        HYPOTHESIS -->|"장애 주입"| INJECT["💥 장애 주입"]
        INJECT -->|"측정"| MEASURE["📏 측정"]
        MEASURE -->|"비교"| COMPARE["⚖️ 비교"]
        COMPARE -->|"개선"| IMPROVE["🔧 개선"]
        IMPROVE --> STEADY
    end

🧪 실험 원칙

5가지 원칙

  1. Steady State 가설: 정상 상태를 정의
  2. 실제 환경: 프로덕션에서 실험
  3. 자동화: 자동화된 실험
  4. 최소 폭발 반경: 영향 범위 제한
  5. 새로운 인사이트: 새로운 것을 발견

실험 설계

# chaos-experiment.yaml
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
  name: pod-delete-experiment
  namespace: default
spec:
  appinfo:
    appns: 'default'
    applabel: 'app=my-app'
    appkind: 'deployment'
  annotationCheck: 'true'
  engineState: 'active'
  auxiliaryAppInfo: ''
  chaosServiceAccount: pod-delete-sa
  monitoring: true
  jobCleanUpPolicy: 'delete'
  experiments:
    - name: pod-delete
      spec:
        components:
          env:
            - name: TOTAL_CHAOS_DURATION
              value: '30'
            - name: CHAOS_INTERVAL
              value: '10'
            - name: FORCE
              value: 'false'
            - name: PODS_AFFECTED_PERC
              value: '50'

🛠️ 도구

Chaos Mesh

# 설치
curl -sSL https://mirrors.chaos-mesh.org/latest/install.sh | bash

# 실험 생성
cat <<EOF | kubectl apply -f -
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
  name: pod-failure-example
  namespace: chaos-testing
spec:
  action: pod-failure
  mode: one
  duration: "30s"
  selector:
    namespaces:
      - default
    labelSelectors:
      "app.kubernetes.io/component": "tikv"
EOF

Litmus

# 설치
helm repo add litmuschaos https://litmuschaos.github.io/litmus-helm/
helm install litmus litmuschaos/litmus

# 실험 실행
kubectl apply -f https://hub.litmuschaos.io/api/chaos/1.9.0?file=charts/generic/pod-delete/experiment.yaml

Gremlin

# CPU 공격
gremlin attack cpu --length 60 --cpus 2

# 메모리 공격
gremlin attack memory --length 60 --amount 90

# 네트워크 공격
gremlin attack network --length 60 --delay 100

📋 장애 시나리오

주요 시나리오

시나리오설명도구
Pod 삭제Kubernetes Pod 강제 삭제Chaos Mesh
네트워크 지연네트워크 지연 추가Litmus
CPU 부하CPU 사용률 증가Gremlin
메모리 부족메모리 압박Chaos Mesh
디스크 부족디스크 공간 채움Litmus
DNS 장애DNS 응답 실패Gremlin
지역 장애전체 지역 다운AWS FIS

📋 체크리스트

  • Steady State 정의
  • 가설 수립
  • 장애 주입 도구 선택
  • 실험 설계
  • 안전 장치 구현
  • 모니터링 설정
  • 롤백 계획
  • 실험 실행
  • 결과 분석
  • 개선 적용

🔗 관련 노트

  • 03-03-SRE-원칙 — SRE
  • 02-04-모니터링-스택 — 모니터링
  • 02-11-Pod-실패-원인-분석 — 문제 해결

마지막 업데이트: 2026-06-01