
Outil de test de chaos, d'émulation réseau et de test de stress pour conteneurs
Outil de test de chaos pour Docker, containerd et Podman
Démarrage rapide · Guide de l'utilisateur · Chaos réseau · Déploiement · Contribuer
Pumba est un outil de test de chaos et d'émulation réseau pour les conteneurs Docker, containerd et Podman. Inspiré de Netflix Chaos Monkey, Pumba apporte l'ingénierie du chaos au niveau des conteneurs — tuer, arrêter, suspendre et supprimer des conteneurs, injecter des latences réseau et des pertes de paquets, ou tester la résistance des ressources des conteneurs.
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]
Pumba cible les conteneurs Linux — chaque action de chaos dépend des primitives Linux (netns, cgroups v2, iptables, tc qdiscs, sockets des runtimes de conteneurs). Binaires publiés :
Windows n'est volontairement pas compilé. Les primitives de chaos — écritures netns/cgroups Linux, injection sidecar tc/iptables, transfert de signaux POSIX (SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2 utilisés par le runtime containerd) — n'ont pas d'équivalent Windows. Il n'existe aucun cas d'usage plausible sous Windows, même avec le backend WSL2 de Docker Desktop, donc aucun binaire Windows n'est publié. Les PR ajoutant la prise en charge de Windows ne seront pas acceptées ; veuillez exécuter pumba sous Linux (natif, conteneur ou VM).
Téléchargez la dernière version pour votre plateforme, ou utilisez Docker :
# Binary
curl -sL https://github.com/alexei-led/pumba/releases/latest/download/pumba_linux_amd64 -o pumba
chmod +x pumba
# Docker (recommended)
docker pull ghcr.io/alexei-led/pumba:latest
# Kill a random container matching "test" every 30 seconds
pumba --interval=30s --random kill "re2:^test"
# Add 3 seconds network delay to mydb for 5 minutes
pumba netem --duration 5m delay --time 3000 mydb
# Drop 10% of incoming packets to myapp for 2 minutes
pumba iptables --duration 2m loss --probability 0.1 myapp
# Stress CPU of mycontainer for 60 seconds
pumba stress --duration 60s --stressors="--cpu 4 --timeout 60s" mycontainer
# Kill a container by ID via containerd
pumba --runtime containerd --containerd-namespace k8s.io kill <container-id>
# Add network delay via containerd (requires tc in the container image)
pumba --runtime containerd --containerd-namespace moby \
netem --duration 5m delay --time 3000 <container-id>
Pumba communique avec Podman via son socket Docker-compat. --podman-socket est facultatif — s'il est vide, pumba sonde $CONTAINER_HOST, $PODMAN_SOCK, podman machine inspect, /run/podman/podman.sock et $XDG_RUNTIME_DIR/podman/podman.sock dans cet ordre.
# Kill a container by name via Podman (rootful socket auto-detected)
sudo pumba --runtime podman kill mycontainer
# Add network delay via Podman (requires rootful socket)
sudo pumba --runtime podman netem --duration 5m delay --time 3000 mycontainer
# Stress CPU via Podman (default child-cgroup mode)
sudo pumba --runtime podman stress --duration 60s --stressors="--cpu 4 --timeout 60s" mycontainer
# Explicit socket override
pumba --runtime podman --podman-socket unix:///run/podman/podman.sock kill mycontainer
netem, iptables et stress nécessitent Podman rootful — en rootless, l'échec est rapide avec un message clair indiquant podman machine set --rootful (macOS) ou l'unité systemd rootful (Linux).
Podman sur macOS s'exécute dans une VM Linux. Pumba doit s'exécuter sur le même noyau que les conteneurs ciblés (lecture côté hôte de /proc/<pid>/cgroup), donc exécutez le binaire pumba dans la VM podman machine :
# one-time setup
brew install podman
podman machine init --rootful --cpus 4 --memory 4096 --now
podman machine ssh sudo dnf install -y bats # optional, for bats tests
# copy a linux/arm64 or linux/amd64 pumba binary into the VM
podman machine ssh sudo cp /path/to/pumba /usr/local/bin/
# run inside the VM
podman machine ssh sudo pumba --runtime podman --log-level debug ps
podman machine ssh sudo pumba --runtime podman netem --duration 10s delay --time 200 <container-id>
Astuce : Pour le chaos réseau sur des conteneurs sans
tc/iptables, utilisez--tc-imagepour lancer un sidecar :pumba --runtime containerd netem --tc-image ghcr.io/alexei-led/pumba-alpine-nettools:latest \ --duration 5m delay --time 3000 <container-id>
docker run -it --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/alexei-led/pumba --interval=10s --random kill "re2:^test"
| Registry | Image | Status |
|---|---|---|
| GitHub Container Registry | ghcr.io/alexei-led/pumba | ✅ Principal |
| Docker Hub | alexeiled/pumba | ⚠️ Obsolète |
Les images sont compilées nativement pour linux/amd64 et linux/arm64 (pas de QEMU).
| Runtime | Socket (default) | netem / iptables / stress | Notes |
|---|
| Docker | /var/run/docker.sock | Works as root or with socket access | Runtime par défaut. |
| containerd | /run/containerd/containerd.sock | Requires root (overlayfs mounts for sidecar) | Namespaces : k8s.io (Kubernetes), moby (géré par Docker), default (containerd pur). |
| Podman | /run/podman/podman.sock (rootful) | Requires rootful Podman (fails fast else) | Utilise l'API Docker-compat de Podman ; sur macOS, pumba s'exécute dans podman machine (voir ci-dessous). |
| OS | amd64 | arm64 | Notes |
|---|
| Linux | ✅ | ✅ | Cible principale. Exécutez pumba sur le même noyau que les conteneurs ciblés. |
| macOS | ✅ | ✅ | Ergonomie développeur uniquement. Utilisez-le pour piloter une VM Docker/Podman/containerd distante (ex. Colima, podman machine). |
| Windows | ❌ | ❌ | Non pris en charge et non prévu. Voir ci-dessous. |
| Catégorie | Commandes | Description |
|---|
| Chaos conteneur | kill, stop, pause, rm, restart | Perturbe le cycle de vie des conteneurs |
| Exécution | exec | Exécute des commandes dans les conteneurs |
| Latence réseau | netem delay | Ajoute de la latence au trafic sortant |
| Perte de paquets | netem loss, iptables loss | Supprime des paquets (sortants et entrants) |
| Effets réseau | netem duplicate, corrupt, rate | Duplique, corrompt ou limite le débit des paquets |
| Test de stress | stress | Stress CPU, mémoire, I/O via stress-ng (injection dans un cgroup enfant ou le même cgroup) |
| Ciblage | noms, regex (re2:), étiquettes, --random | Sélection flexible des conteneurs |
| Planification | --interval | Chaos récurrent à intervalles fixes |
| Flag | Défaut | Description |
|---|
--runtime | docker | Runtime de conteneurs (docker, containerd ou podman) |
--containerd-socket | /run/containerd/containerd.sock | chemin du socket containerd |
--containerd-namespace | k8s.io | namespace containerd (k8s.io pour Kubernetes, moby pour Docker) |
--podman-socket | (auto-détecté) | URI du socket Podman (ex. unix:///run/podman/podman.sock) ; vide déclenche l'auto-détection |
| Document | Description |
|---|
| Guide de l'utilisateur | Commandes de chaos conteneur, ciblage, planification, configuration |
| Chaos réseau | netem, iptables, scénarios avancés, schémas d'architecture |
| Test de stress | Test de stress CPU/mémoire/IO avec stress-ng |
| Déploiement | Docker, DaemonSets Kubernetes, OpenShift |
| Contribuer | Compilation depuis les sources, exécution des tests, structure du projet |