
Ferramenta de testes de caos, emulação de rede e testes de estresse para contêineres.
Ferramenta de teste de caos para Docker, containerd e Podman
Início Rápido · Guia do Usuário · Caos de Rede · Implantação · Contribuição
Pumba é uma ferramenta de teste de caos e emulação de rede para contêineres Docker, containerd e Podman. Inspirado no Netflix Chaos Monkey, o Pumba leva a engenharia do caos ao nível de contêineres — mate, pare, pause e remova contêineres, injete atrasos de rede e perda de pacotes ou teste a resistência dos recursos dos contêineres.
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 (padrão) | netem / iptables / stress | Observações |
|---|---|---|---|
| Docker | /var/run/docker.sock | Funciona como root ou com acesso ao socket | Runtime padrão. |
| containerd | /run/containerd/containerd.sock | Requer root (montagens overlayfs para o sidecar) | Namespaces: k8s.io (Kubernetes), moby (gerenciado pelo Docker), default (containerd puro). |
| Podman | /run/podman/podman.sock (rootful) | Requer Podman rootful (falha rapidamente caso contrário) | Usa a API compatível com Docker do Podman; no macOS, o pumba roda dentro do podman machine (veja abaixo). |
O Pumba tem como alvo contêineres Linux — toda ação de caos depende de primitivas do Linux (netns, cgroups v2, iptables, qdiscs tc, sockets do runtime de contêiner). Binários publicados:
| OS | amd64 | arm64 | Observações |
|---|---|---|---|
| Linux | ✅ | ✅ | Alvo principal. Execute o pumba no mesmo kernel dos contêineres alvo. |
| macOS | ✅ | ✅ | Apenas para ergonomia de desenvolvimento. Use-o para controlar uma VM remota Docker/Podman/containerd (ex.: Colima, podman machine). |
| Windows | ❌ | ❌ | Não suportado e não planejado. Veja abaixo. |
O Windows não é compilado intencionalmente. As primitivas de caos — gravações em netns/cgroups do Linux, injeção de sidecar tc/iptables, encaminhamento de sinais POSIX (SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2 usados pelo runtime containerd) — não têm equivalente no Windows. Não há caso de uso plausível no Windows, mesmo com o backend WSL2 do Docker Desktop; portanto, nenhum binário para Windows é publicado. PRs que adicionem suporte ao Windows não serão aceitos; execute o pumba no Linux (nativo, contêiner ou VM).
| Categoria | Comandos | Descrição |
|---|---|---|
| Caos de contêineres | kill, stop, pause, rm, restart | Interrompe o ciclo de vida dos contêineres |
| Execução | exec | Executa comandos dentro de contêineres |
| Atraso de rede | netem delay | Adiciona latência ao tráfego de saída |
| Perda de pacotes | netem loss, iptables loss | Descarta pacotes (saída e entrada) |
| Efeitos de rede | netem duplicate, corrupt, rate | Duplica, corrompe ou limita a taxa de pacotes |
| Teste de estresse | stress | Estresse de CPU, memória e I/O via stress-ng (cgroup filho ou injeção no mesmo cgroup) |
| Alvos | nomes, regex (re2:), labels, --random | Seleção flexível de contêineres |
| Agendamento | --interval | Caos recorrente em intervalos fixos |
Baixe a última versão para sua plataforma ou use 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>