Chaos Engineering Command
Design, run, and debug Chaos Engineering experiments on Kubernetes.
Interactive Wizard (fires when no arguments are provided)
When invoked with no arguments, ask before proceeding:
Q1 — Mode?
What do you need?
1. install — install Litmus Chaos or Chaos Mesh via Helm
2. experiment — design a fault injection experiment
3. schedule — wrap an experiment in a recurring schedule
4. gameday — run a structured GameDay experiment
5. debug — diagnose a failed or stuck experiment
6. report — summarize results after an experiment completes
Enter 1–6 or mode name:
After collecting the mode, ask one follow-up:
- install:
Which tool? Litmus Chaos (recommended default) or Chaos Mesh (network/IO faults)? - experiment:
Describe the workload to target — name, namespace, fault type (pod-delete / network-loss / cpu-stress / node-drain): - schedule:
Provide the experiment YAML or describe the experiment to wrap in a schedule: - gameday:
State the steady-state hypothesis — what metric or probe proves the system is healthy? - debug:
Describe the symptom or paste the ChaosEngine/ChaosResult status: - report:
Paste the ChaosResult output or describe the experiment that ran:
Then proceed into the relevant mode below.
Mode: install
Install Litmus Chaos or Chaos Mesh via Helm.
Steps:
-
Choose the tool:
- Litmus Chaos: CNCF graduated, ChaosCenter UI, broad experiment library → recommended default
- Chaos Mesh: CNCF incubating, fine-grained NetworkChaos, IOChaos → choose for network partitions or I/O faults
-
Install Litmus Chaos:
helm repo add litmuschaos https://litmuschaos.github.io/litmus-helm/helm repo updatehelm upgrade --install chaos litmuschaos/litmus \--namespace litmus \--create-namespace \--version 3.9.0 \-f examples/chaos/litmus-install-values.yaml -
Install Chaos Mesh:
helm repo add chaos-mesh https://charts.chaos-mesh.orghelm repo updatehelm upgrade --install chaos-mesh chaos-mesh/chaos-mesh \--namespace chaos-mesh \--create-namespace \--version 2.7.0 \-f examples/chaos/chaos-mesh-install-values.yaml -
Verify:
# Litmuskubectl get pods -n litmus# Chaos Meshkubectl get pods -n chaos-meshExpected: all pods Running
Mode: experiment
Generate a fault experiment from a description.
Steps:
- Identify: tool (Litmus/Mesh), fault class (pod/network/stress/node), target workload name and namespace
- Require steady-state hypothesis before generating the experiment:
- HTTP probe: URL + expected response code
- Prometheus probe: PromQL query that returns 1 (healthy) or 0 (degraded)
- Generate the experiment CRD with:
- Namespace-scoped label selector
durationorTOTAL_CHAOS_DURATIONset (default 60s)- Probe section referencing the steady-state hypothesis
PODS_AFFECTED_PERC: "50"for initial runs (safe); increase to 100% for full resilience test
- Output: experiment YAML +
kubectl applycommand + expected ChaosResult verdict
See examples/chaos/pod-delete-experiment.yaml and examples/chaos/network-loss-experiment.yaml for complete examples.
Mode: schedule
Wrap an experiment in a recurring schedule.
Steps:
-
Litmus ChaosSchedule:
apiVersion: litmuschaos.io/v1alpha1kind: ChaosSchedulemetadata:name: pod-delete-weeklynamespace: my-namespacespec:schedule:repeat:properties:minChaosInterval: "168h"engineTemplateSpec:appinfo:appns: my-namespaceapplabel: "app=my-service"appkind: deploymentchaosServiceAccount: litmus-adminexperiments:- name: pod-deletespec:components:env:- name: TOTAL_CHAOS_DURATIONvalue: "60" -
Chaos Mesh Schedule:
apiVersion: chaos-mesh.org/v1alpha1kind: Schedulemetadata:name: network-loss-weeklynamespace: my-namespacespec:schedule: "0 2 * * 1"type: NetworkChaoshistoryLimit: 5concurrencyPolicy: ForbidnetworkChaosTemplate:spec:action: lossmode: allselector:namespaces: [my-namespace]labelSelectors:app: my-serviceloss:loss: "20"duration: 60s -
Recommend staging only — never schedule experiments in production without a change window
Mode: gameday
Run a structured GameDay experiment.
Steps:
-
Define steady-state hypothesis:
- What metric or probe proves the system is healthy?
- What is the acceptable degradation threshold?
-
Scope the blast radius:
- Namespace:
<namespace> - Label selector:
app=<service-name> - Max affected pods: 50% for first run
- Namespace:
-
Inject the fault (reference experiment from
experimentmode output) -
Observe:
- Watch probe results in ChaosResult
- Check Prometheus/Grafana for error rate, latency, saturation
- Note time-to-detect if an alert fired
-
Record the verdict:
- PASS: steady-state probe held throughout, service recovered within SLO
- FAIL: probe failed, alert did not fire within expected window, or recovery exceeded SLO
-
Output DORA impact summary:
- Change failure rate delta: did this fault class cause failures in past deploys?
- MTTR observed: time from fault injection to steady-state restoration
- Recommendation: improve circuit breaker / HPA config / replica count / PDB
Mode: debug
If you need deeper context on troubleshooting, load references/chaos.md.
Diagnose a failed or stuck experiment.
Checklist:
-
Is the controller running?
kubectl get pods -n litmus # Litmuskubectl get pods -n chaos-mesh # Chaos Mesh -
Is the ChaosEngine/fault stuck?
kubectl describe chaosengine <name> -n <namespace> # Litmuskubectl describe podchaos <name> -n <namespace> # Chaos Mesh -
Check the ChaosResult (Litmus only):
kubectl get chaosresult -n <namespace>kubectl describe chaosresult <engine-name>-<experiment-name> -n <namespace>Look for
status.experimentStatus.verdictand probe failure messages. -
Common causes:
Symptom Cause Fix Stuck InitializedMissing RBAC kubectl get clusterrolebinding -l app.kubernetes.io/component=operatorNo pods targeted Label selector wrong kubectl get pods -n <ns> -l <selector>Probe failing Wrong URL or PromQL Test probe URL with curlfrom inside the namespaceExperiment won't end Missing duration Add duration: 60s(Chaos Mesh) orTOTAL_CHAOS_DURATION(Litmus)Controller crashlooping Version mismatch Re-install matching chart version
Mode: report
Summarize experiment results after completion.
Steps:
-
Collect ChaosResult:
kubectl get chaosresult -n <namespace> -o yaml -
Report:
- Fault injected: type, duration, affected pods
- Steady-state probe: pass/fail timeline (from ChaosResult probe status)
- Recovery time: time from fault injection (
status.experimentStatus.passedRuns) to probe passing again - Verdict: PASS / FAIL with reason
-
DORA impact:
- Was error rate SLO breached? → contributes to change failure rate
- Recovery time → MTTR observation
- Feed into DORA
benchmarkmode:/platform-skills:dora benchmark
After completing this task, log errors and learnings via /platform-skills:self-improve log.