
Herramienta de pruebas de caos, emulación de red y pruebas de estrés para contenedores
Herramienta de pruebas de caos para Docker, containerd y Podman
Inicio rápido · Guía de usuario · Caos de red · Despliegue · Contribuciones
Pumba es una herramienta de pruebas de caos y emulación de red para contenedores Docker, containerd y Podman. Inspirado en Netflix Chaos Monkey, Pumba lleva la ingeniería del caos al nivel de contenedor — matar, detener, pausar y eliminar contenedores, inyectar retrasos de red y pérdida de paquetes, o realizar pruebas de estrés sobre los recursos de los contenedores.
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 (por defecto) | netem / iptables / stress | Notas |
|---|---|---|---|
| Docker | /var/run/docker.sock | Funciona como root o con acceso al socket | Runtime por defecto. |
| containerd | /run/containerd/containerd.sock | Requiere root (montajes overlayfs para sidecar) | Namespaces: k8s.io (Kubernetes), moby (gestionado por Docker), default (containerd puro). |
| Podman | /run/podman/podman.sock (rootful) | Requiere Podman rootful (falla rápido si no) | Usa la API Docker-compat de Podman; en macOS pumba se ejecuta dentro de podman machine (ver más abajo). |
Pumba se dirige a contenedores Linux: cada acción de caos depende de primitivas de Linux (netns, cgroups v2, iptables, tc qdiscs, sockets del runtime de contenedores). Binarios publicados:
| OS | amd64 | arm64 | Notas |
|---|---|---|---|
| Linux | ✅ | ✅ | Objetivo principal. Ejecuta pumba en el mismo kernel que los contenedores objetivo. |
| macOS | ✅ | ✅ | Solo ergonomía para desarrolladores. Úsalo para controlar una VM Docker/Podman/containerd remota (p. ej. Colima, podman machine). |
| Windows | ❌ | ❌ | No compatible ni planeado. Ver más abajo. |
Windows no se compila intencionalmente. Las primitivas de caos — escrituras de netns/cgroup de Linux, inyección de sidecar tc/iptables, reenvío de señales POSIX (SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2 utilizadas por el runtime containerd) — no tienen equivalente en Windows. No hay un caso de uso plausible para Windows ni siquiera con el backend WSL2 de Docker Desktop, por lo que no se publica ningún binario de Windows. No se aceptarán PRs que añadan soporte para Windows; por favor ejecuta pumba en Linux (nativo, contenedor o VM).
| Categoría | Comandos | Descripción |
|---|---|---|
| Caos en contenedores | kill, stop, pause, rm, restart | Alterar el ciclo de vida del contenedor |
| Ejecutar | exec | Ejecutar comandos dentro de contenedores |
| Retardo de red | netem delay | Añadir latencia al tráfico de salida |
| Pérdida de paquetes | netem loss, iptables loss | Descartar paquetes (salida y entrada) |
| Efectos de red | netem duplicate, corrupt, rate | Duplicar, corromper o limitar la tasa de paquetes |
| Pruebas de estrés | stress | Estrés de CPU, memoria y E/S mediante stress-ng (cgroup hijo o inyección en el mismo cgroup) |
| Selección de objetivos | nombres, regex (re2:), etiquetas, --random | Selección flexible de contenedores |
| Programación | --interval | Caos recurrente a intervalos fijos |
Descarga la última versión para tu plataforma, o usa 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>