
Tool für Chaos-Tests, Netzwerk-Emulation und Stresstests von Containern
Chaos-Testwerkzeug für Docker, containerd und Podman
Schnellstart · Benutzerhandbuch · Netzwerk-Chaos · Bereitstellung · Mitwirken
Pumba ist ein Chaos-Test- und Netzwerk-Emulationswerkzeug für Docker-, containerd- und Podman-Container. Inspiriert von Netflix Chaos Monkey bringt Pumba Chaos Engineering auf die Container-Ebene – Container töten, stoppen, pausieren und entfernen, Netzwerkverzögerungen und Paketverluste einfügen oder Container-Ressourcen unter Belastung testen.
graph LR
A[Pumba CLI] -->|Docker API / containerd API / Podman compat API| B[Container Runtime]
B -->|List & Filter| C[Target Containers]
A -->|kill / stop / pause / rm| C
A -->|netem / iptables| D[Helper Container / Direct Exec]
D -->|Shares network namespace| C
D -->|Runs tc / iptables| E[Network Chaos]
| Laufzeit | Socket (Standard) | netem / iptables / stress | Hinweise |
|---|---|---|---|
| Docker | /var/run/docker.sock | Funktioniert als Root oder mit Socket-Zugriff | Standard-Laufzeitumgebung. |
| containerd | /run/containerd/containerd.sock | Erfordert Root (overlayfs-Mounts für Sidecar) | Namensräume: k8s.io (Kubernetes), moby (Docker-verwaltet), default (reines containerd). |
| Podman | /run/podman/podman.sock (rootful) | Erfordert rootful Podman (sonst schneller Abbruch) | Verwendet Podmans Docker-kompatible API; auf macOS läuft pumba innerhalb von podman machine (siehe unten). |
Pumba zielt auf Linux-Container ab – jede Chaos-Aktion hängt von Linux-Primitiven ab (netns, cgroups v2, iptables, tc qdiscs, Container-Runtime-Sockets). Veröffentlichte Binärdateien:
| Betriebssystem | amd64 | arm64 | Hinweise |
|---|---|---|---|
| Linux | ✅ | ✅ | Primäres Ziel. Führen Sie pumba auf demselben Kernel wie die Zielcontainer aus. |
| macOS | ✅ | ✅ | Nur für Entwicklerzwecke. Verwenden Sie es, um eine entfernte Docker-/Podman-/containerd-VM zu steuern (z. B. Colima, podman machine). |
| Windows | ❌ | ❌ | Nicht unterstützt und nicht geplant. Siehe unten. |
Windows wird bewusst nicht gebaut. Die Chaos-Primitive – Linux-netns/cgroup-Schreibvorgänge, tc/iptables-Sidecar-Injektion, POSIX-Signalweiterleitung (SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2, die von der containerd-Laufzeitumgebung verwendet werden) – haben kein Windows-Äquivalent. Es gibt keinen plausiblen Windows-Anwendungsfall, selbst mit dem WSL2-Backend von Docker Desktop, daher wird keine Windows-Binärdatei veröffentlicht. PRs, die Windows-Unterstützung hinzufügen, werden nicht angenommen; bitte führen Sie pumba auf Linux aus (nativ, als Container oder in einer VM).
| Kategorie | Befehle | Beschreibung |
|---|---|---|
| Container-Chaos | kill, stop, pause, rm, restart | Unterbrechen des Container-Lebenszyklus |
| Ausführen | exec | Befehle innerhalb von Containern ausführen |
| Netzwerkverzögerung | netem delay | Latenz zum ausgehenden Datenverkehr hinzufügen |
| Paketverlust | netem loss, iptables loss | Pakete verwerfen (ausgehend und eingehend) |
| Netzwerkeffekte | netem duplicate, corrupt, rate | Pakete duplizieren, beschädigen oder ratenbegrenzen |
| Belastungstest | stress | CPU-, Speicher-, I/O-Belastung über stress-ng (Child-cgroup oder gleiche cgroup Injektion) |
| Zielauswahl | Namen, Regex (re2:), Labels, --random | Flexible Containerauswahl |
| Zeitplanung | --interval | Wiederkehrendes Chaos in festen Intervallen |
Laden Sie das neueste Release für Ihre Plattform herunter, oder verwenden Sie Docker:
# Binärdatei
curl -sL https://github.com/alexei-led/pumba/releases/latest/download/pumba_linux_amd64 -o pumba
chmod +x pumba
# Docker (empfohlen)
docker pull ghcr.io/alexei-led/pumba:latest
# Töte alle 30 Sekunden einen zufälligen Container, der "test" entspricht
pumba --interval=30s --random kill "re2:^test"
# Füge mydb 5 Minuten lang eine Netzwerkverzögerung von 3 Sekunden hinzu
pumba netem --duration 5m delay --time 3000 mydb
# Verwerfe 2 Minuten lang 10 % der eingehenden Pakete für myapp
pumba iptables --duration 2m loss --probability 0.1 myapp
# Belaste die CPU von mycontainer 60 Sekunden lang
pumba stress --duration 60s --stressors="--cpu 4 --timeout 60s" mycontainer
# Töte einen Container anhand seiner ID über containerd
pumba --runtime containerd --containerd-namespace k8s.io kill <container-id>