
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 d'utilisation · Chaos réseau · Déploiement · Contribution
Pumba est un outil de test de chaos et d'émulation réseau pour les conteneurs Docker, containerd et Podman. Inspiré par Netflix Chaos Monkey, Pumba apporte l'ingénierie du chaos au niveau des conteneurs — tuer, arrêter, mettre en pause et supprimer des conteneurs, injecter des délais réseau et des pertes de paquets, ou stresser les 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 (par défaut) | netem / iptables / stress | Remarques |
|---|---|---|---|
| Docker | /var/run/docker.sock | Fonctionne en root ou avec accès au socket | Runtime par défaut. |
| containerd | /run/containerd/containerd.sock | Nécessite root (montages overlayfs pour le sidecar) | Namespaces : k8s.io (Kubernetes), moby (géré par Docker), default (containerd pur). |
| Podman | /run/podman/podman.sock (rootful) | Nécessite Podman rootful (échec immédiat sinon) | Utilise l'API Docker-compat de Podman ; sur macOS pumba s'exécute à l'intérieur de podman machine (voir ci-dessous). |
Pumba cible les conteneurs Linux — chaque action de chaos dépend de primitives Linux (netns, cgroups v2, iptables, tc qdiscs, sockets de runtime de conteneurs). Binaires publiés :
| OS | amd64 | arm64 | Remarques |
|---|---|---|---|
| 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 (par ex. Colima, podman machine). |
| Windows | ❌ | ❌ | Non pris en charge et non prévu. Voir ci-dessous. |
Windows n'est intentionnellement pas compilé. Les primitives de chaos — écritures Linux netns/cgroup, injection de 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 Windows plausible, 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 sur Linux (natif, conteneur ou VM).
| Catégorie | Commandes | Description |
|---|---|---|
| Chaos de conteneur | kill, stop, pause, rm, restart | Perturber le cycle de vie des conteneurs |
| Exécution | exec | Exécuter des commandes à l'intérieur des conteneurs |
| Délai réseau | netem delay | Ajouter de la latence au trafic sortant |
| Perte de paquets | netem loss, iptables loss | Supprimer des paquets (sortants et entrants) |
| Effets réseau | netem duplicate, corrupt, rate | Dupliquer, corrompre ou limiter le débit des paquets |
| Effets combinés | netem combine | Appliquer plusieurs effets dans une seule qdisc netem possédée |
| Tests de charge | stress | Stress CPU, mémoire, E/S via stress-ng (cgroup enfant ou injection dans le même cgroup) |
| Ciblage | noms, regex (re2:), labels, --random | Sélection flexible des conteneurs ; netem/iptables offrent aussi --match-all en option |
| Planification | --interval | Chaos récurrent à intervalles fixes |
| Agents | schema, --output ndjson | Description de la CLI en JSON ; événements de résultat sur stdout |
| Vérification des résidus | status [--check], revert --run-id | Inspecter les fautes et récupérer les règles/sidecars éligibles marqués par exécution |
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
# Combine 100ms delay and 20% packet loss in one qdisc
pumba netem --duration 5m combine --delay --delay-time 100 --loss --loss-percent 20 -- mydb