Chaos Engineering Grundlagen | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

235 Dokumentationen verfügbar

Wissensdatenbank

Chaos Engineering Grundlagen

Zuletzt aktualisiert: 20.01.2026 um 11:24 Uhr

Chaos Engineering Grundlagen

Chaos Engineering testet die Widerstandsfähigkeit von Systemen durch kontrollierte Experimente. Lernen Sie Prinzipien, Tools und wie Sie Chaos-Experimente sicher durchführen.

Was ist Chaos Engineering?

┌─────────────────────────────────────────────────────────────┐
│                    CHAOS ENGINEERING                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   "The discipline of experimenting on a system in order    │
│    to build confidence in the system's capability to       │
│    withstand turbulent conditions in production."          │
│                                             - Netflix       │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                                                      │  │
│   │   TRADITIONELL:                                     │  │
│   │   Warten auf Ausfälle → Reagieren → Fixen          │  │
│   │                                                      │  │
│   │   CHAOS ENGINEERING:                                │  │
│   │   Ausfälle simulieren → Schwächen finden →         │  │
│   │   Verbessern → Wiederholen                          │  │
│   │                                                      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   ZIEL: Schwächen finden BEVOR sie in Production          │
│         zu Ausfällen führen                                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Prinzipien

1. STEADY STATE HYPOTHESE
   ┌─────────────────────────────────────────────────────┐
   │ Definiere "normale" System-Metriken:                │
   │ • Response Time < 200ms                             │
   │ • Error Rate < 0.1%                                 │
   │ • Throughput > 1000 req/s                          │
   │                                                     │
   │ Hypothese: "Das System behält diesen Zustand       │
   │            auch wenn X passiert"                    │
   └─────────────────────────────────────────────────────┘

2. REALE EREIGNISSE SIMULIEREN
   ┌─────────────────────────────────────────────────────┐
   │ • Server/Container Ausfall                         │
   │ • Netzwerk-Partitionen                             │
   │ • Hohe Latenz                                      │
   │ • Disk Full                                        │
   │ • CPU/Memory Exhaustion                            │
   │ • Dependency Ausfall                               │
   └─────────────────────────────────────────────────────┘

3. IN PRODUCTION EXPERIMENTIEREN
   ┌─────────────────────────────────────────────────────┐
   │ Production ist die einzige echte Umgebung.         │
   │ Staging kann Production nie perfekt nachbilden.    │
   │                                                     │
   │ → Mit Sicherheitsnetzen und Rollback-Plänen!      │
   └─────────────────────────────────────────────────────┘

4. AUTOMATISIEREN
   ┌─────────────────────────────────────────────────────┐
   │ Chaos-Experimente sollten kontinuierlich laufen,   │
   │ nicht nur einmalig.                                 │
   │                                                     │
   │ → In CI/CD Pipeline integrieren                    │
   └─────────────────────────────────────────────────────┘

5. BLAST RADIUS MINIMIEREN
   ┌─────────────────────────────────────────────────────┐
   │ Klein anfangen, schrittweise erweitern:            │
   │ • Erst einen Pod                                    │
   │ • Dann eine Availability Zone                      │
   │ • Dann eine Region                                  │
   └─────────────────────────────────────────────────────┘

Chaos Monkey (Netflix)

# Das Original von Netflix

# Simtian Army Tools:
# - Chaos Monkey: Zufällige Instance-Terminierung
# - Latency Monkey: Künstliche Verzögerungen
# - Conformity Monkey: Nicht-konforme Instances finden
# - Chaos Gorilla: Ganze AZ ausschalten
# - Chaos Kong: Ganze Region ausschalten

# Installation (Spinnaker integriert)
# Oder als standalone:

# Simian Army Config
simianarmy.chaos.enabled = true
simianarmy.chaos.probability = 1.0
simianarmy.chaos.leashed = false

# Bestimmte ASGs ausschließen
simianarmy.chaos.asgs.exclude = critical-*,database-*

# Schedule
simianarmy.chaos.schedule.startHour = 9
simianarmy.chaos.schedule.endHour = 17
simianarmy.chaos.schedule.workdays = Mon,Tue,Wed,Thu,Fri

Chaos Toolkit

# Open Source Chaos Engineering Framework

# Installation
pip install chaostoolkit
pip install chaostoolkit-kubernetes
pip install chaostoolkit-aws

# Experiment Definition (experiment.json)
{
    "version": "1.0.0",
    "title": "Pod Failure Resilience",
    "description": "Verify system handles pod failures gracefully",

    "steady-state-hypothesis": {
        "title": "Application is healthy",
        "probes": [
            {
                "type": "probe",
                "name": "api-responds",
                "tolerance": 200,
                "provider": {
                    "type": "http",
                    "url": "https://api.example.com/health",
                    "timeout": 5
                }
            },
            {
                "type": "probe",
                "name": "error-rate-acceptable",
                "tolerance": {
                    "type": "range",
                    "range": [0, 1]
                },
                "provider": {
                    "type": "python",
                    "module": "my_probes",
                    "func": "get_error_rate"
                }
            }
        ]
    },

    "method": [
        {
            "type": "action",
            "name": "terminate-random-pod",
            "provider": {
                "type": "python",
                "module": "chaosk8s.pod.actions",
                "func": "terminate_pods",
                "arguments": {
                    "ns": "production",
                    "label_selector": "app=myapp",
                    "qty": 1
                }
            },
            "pauses": {
                "after": 30
            }
        }
    ],

    "rollbacks": [
        {
            "type": "action",
            "name": "scale-up-pods",
            "provider": {
                "type": "python",
                "module": "chaosk8s.deployment.actions",
                "func": "scale_deployment",
                "arguments": {
                    "name": "myapp",
                    "replicas": 3,
                    "ns": "production"
                }
            }
        }
    ]
}
# Experiment ausführen
chaos run experiment.json

# Mit Report
chaos run experiment.json --journal-path=journal.json
chaos report --export-format=html journal.json report.html

# Nur Steady-State validieren (Dry Run)
chaos validate experiment.json

LitmusChaos (Kubernetes)

# Kubernetes-native Chaos Engineering

# Installation
kubectl apply -f https://litmuschaos.github.io/litmus/litmus-operator-v2.0.0.yaml

# ChaosEngine erstellen
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
  name: myapp-chaos
  namespace: production
spec:
  appinfo:
    appns: production
    applabel: "app=myapp"
    appkind: deployment

  engineState: active

  chaosServiceAccount: litmus-admin

  experiments:
    - name: pod-delete
      spec:
        components:
          env:
            - name: TOTAL_CHAOS_DURATION
              value: '60'
            - name: CHAOS_INTERVAL
              value: '10'
            - name: PODS_AFFECTED_PERC
              value: '50'

    - name: pod-network-latency
      spec:
        components:
          env:
            - name: NETWORK_LATENCY
              value: '500'  # 500ms Latency
            - name: TOTAL_CHAOS_DURATION
              value: '120'
# Verfügbare Experimente

POD-LEVEL:
- pod-delete: Pods terminieren
- pod-network-latency: Netzwerk-Verzögerung
- pod-network-loss: Packet Loss
- pod-cpu-hog: CPU-Last erzeugen
- pod-memory-hog: Memory-Last erzeugen
- pod-io-stress: Disk I/O Stress

NODE-LEVEL:
- node-drain: Node drainieren
- node-taint: Node tainten
- kubelet-service-kill: Kubelet stoppen

NETWORK:
- pod-network-partition: Netzwerk-Partition
- pod-dns-error: DNS-Fehler simulieren

Gremlin (Enterprise)

# Kommerzielle Chaos Engineering Plattform

# Gremlin Agent installieren
helm repo add gremlin https://helm.gremlin.com
helm install gremlin gremlin/gremlin \
  --set gremlin.secret.managed=true \
  --set gremlin.secret.teamID=$GREMLIN_TEAM_ID \
  --set gremlin.secret.clusterID=$GREMLIN_CLUSTER_ID \
  --set gremlin.secret.teamSecret=$GREMLIN_TEAM_SECRET

# Angriffe via CLI
gremlin attack kubernetes pod \
  --target-container myapp \
  --length 60 \
  --percent 50 \
  cpu

gremlin attack kubernetes pod \
  --target-container myapp \
  --length 120 \
  latency \
  --delay 500

# Oder via Web UI für:
# - Scheduled Attacks
# - Game Days
# - Automated Scenarios
# - Status Pages Integration

Experiment-Ablauf

┌─────────────────────────────────────────────────────────────┐
│                  CHAOS EXPERIMENT WORKFLOW                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   1. STEADY STATE DEFINIEREN                                │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ • Welche Metriken definieren "gesund"?              │  │
│   │ • Response Time, Error Rate, Throughput             │  │
│   │ • Dashboards und Alerts vorbereiten                 │  │
│   └─────────────────────────────────────────────────────┘  │
│                         │                                   │
│                         ▼                                   │
│   2. HYPOTHESE FORMULIEREN                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ "Wenn ein Pod ausfällt, bleibt das System im       │  │
│   │  Steady State weil Kubernetes automatisch          │  │
│   │  einen neuen Pod startet"                           │  │
│   └─────────────────────────────────────────────────────┘  │
│                         │                                   │
│                         ▼                                   │
│   3. EXPERIMENT DURCHFÜHREN                                 │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ • Steady State validieren (Pre-Check)              │  │
│   │ • Chaos einführen (Pod terminieren)                │  │
│   │ • Metriken beobachten                               │  │
│   │ • Steady State erneut validieren (Post-Check)      │  │
│   └─────────────────────────────────────────────────────┘  │
│                         │                                   │
│                         ▼                                   │
│   4. ERGEBNISSE ANALYSIEREN                                 │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ ✅ Hypothese bestätigt → System ist resilient       │  │
│   │ ❌ Hypothese widerlegt → Schwäche gefunden!        │  │
│   │    → Dokumentieren, Ticket erstellen, fixen        │  │
│   └─────────────────────────────────────────────────────┘  │
│                         │                                   │
│                         ▼                                   │
│   5. VERBESSERN UND WIEDERHOLEN                            │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ • Fixes implementieren                              │  │
│   │ • Experiment erneut durchführen                     │  │
│   │ • Nächstes Experiment planen                        │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Game Days

GAME DAY PLANNING

┌──────────────────────────────────────────────────────────┐
│ Ein "Game Day" ist ein koordiniertes Chaos-Event        │
│ mit dem gesamten Team.                                   │
└──────────────────────────────────────────────────────────┘

VORBEREITUNG:
1. Datum und Zeitfenster festlegen
2. Alle Stakeholder informieren
3. Runbooks und Rollback-Pläne bereithalten
4. Monitoring und Alerting validieren
5. "Big Red Button" für Notfall-Stop

DURCHFÜHRUNG:
1. Pre-Game Briefing (15 min)
2. Steady State Baseline aufnehmen
3. Chaos-Szenarien nacheinander durchführen
4. Beobachten und dokumentieren
5. Post-Game Review (30-60 min)

BEISPIEL-AGENDA:

09:00 - Briefing, Steady State Check
09:15 - Szenario 1: Database Failover
09:45 - Analyse und Recovery
10:00 - Szenario 2: 50% Pod Failure
10:30 - Analyse und Recovery
11:00 - Szenario 3: Network Partition
11:30 - Analyse und Recovery
12:00 - Debrief und Action Items

Sicherheitsmaßnahmen

1. KILL SWITCH
   - Sofortiger Stopp aller Experimente
   - Automatischer Rollback

2. BLAST RADIUS LIMITS
   - Max. 10% der Pods
   - Max. 1 AZ gleichzeitig
   - Bestimmte Services ausschließen

3. ZEITLICHE GRENZEN
   - Nur während Business Hours
   - Automatischer Stop nach X Minuten
   - Nicht vor/während wichtiger Events

4. MONITORING
   - Real-time Dashboards
   - Sofortige Alerts bei Anomalien
   - SLI/SLO Überwachung

5. KOMMUNIKATION
   - Team über Experiment informieren
   - #chaos Slack Channel
   - Incident Commander bereitstellen
⚠️ Wichtig: Chaos Engineering in Production erfordert Reife. Beginnen Sie in Staging, bauen Sie Vertrauen auf, und führen Sie erst dann vorsichtig Production-Experimente durch. Immer mit Rollback-Plan und Kill Switch!
💡 Best Practices: 1. Klein anfangen, schrittweise erweitern
2. Hypothesen vor Experimenten formulieren
3. Immer Monitoring aktiv haben
4. Ergebnisse dokumentieren und teilen
5. Gefundene Schwächen tatsächlich fixen

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120