
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]
| 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). |
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 :
| 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. |
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).
| 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 |
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>