카오스 엔지니어링
프로덕션 환경에서 장애를 주입하여 시스템의 복원력을 검증
프로덕션 환경에서 장애를 주입하여 시스템의 복원력을 검증
목표: 장애에 강한 시스템을 설계하고 운영할 수 있는 수준
🎯 카오스 엔지니어링 개요
정의
프로덕션 환경에서 실험을 통해 시스템의 불확실성을 발견.
graph TB
subgraph "카오스 엔지니어링"
STEADY["📊 Steady State"] -->|"가설"| HYPOTHESIS["🎯 가설"]
HYPOTHESIS -->|"장애 주입"| INJECT["💥 장애 주입"]
INJECT -->|"측정"| MEASURE["📏 측정"]
MEASURE -->|"비교"| COMPARE["⚖️ 비교"]
COMPARE -->|"개선"| IMPROVE["🔧 개선"]
IMPROVE --> STEADY
end
🧪 실험 원칙
5가지 원칙
- Steady State 가설: 정상 상태를 정의
- 실제 환경: 프로덕션에서 실험
- 자동화: 자동화된 실험
- 최소 폭발 반경: 영향 범위 제한
- 새로운 인사이트: 새로운 것을 발견
실험 설계
# 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