用于 Docker、containerd 和 Podman 的混沌测试工具
快速开始 ·
用户指南 ·
网络混沌 ·
部署 ·
贡献
Pumba 是一款用于 Docker、containerd 和 Podman 容器的混沌测试与网络模拟工具。受到 Netflix Chaos Monkey 的启发,Pumba 将混沌工程带入容器层面——杀死、停止、暂停和删除容器,注入网络延迟和数据包丢失,或对容器资源进行压力测试。
工作原理
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 面向 Linux 容器——每个混沌操作都依赖 Linux 原语(netns、cgroups v2、iptables、tc qdisc、容器运行时 socket)。发布的二进制文件:
Windows 版本是有意不构建的。 混沌原语——Linux netns/cgroup 写入、tc/iptables sidecar 注入、POSIX 信号转发(containerd 运行时使用的 SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2)——在 Windows 上没有对应实现。即使使用 Docker Desktop 的 WSL2 后端,Windows 也没有合理的用例,因此不发布 Windows 二进制文件。添加 Windows 支持的 PR 将不被接受;请在 Linux(原生、容器或 VM)上运行 pumba。
功能特性
快速开始
安装
为你的平台下载最新版本,或使用 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
containerd 运行时
# 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>
Podman 运行时
Pumba 通过其 Docker 兼容 socket 与 Podman 通信。--podman-socket 是可选的——如果为空,pumba 会依次探测 $CONTAINER_HOST、$PODMAN_SOCK、podman machine inspect、/run/podman/podman.sock 和 $XDG_RUNTIME_DIR/podman/podman.sock。
# 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 和 stress 需要 rootful Podman——rootless 模式会快速失败,并给出明确消息,指向 podman machine set --rootful(macOS)或 rootful systemd 单元(Linux)。
使用 Podman 进行 macOS 开发
macOS 上的 Podman 运行在 Linux VM 内部。Pumba 必须与目标容器运行在同一内核上(读取宿主机侧的 /proc/<pid>/cgroup),因此请在 podman machine VM 内部运行 pumba 二进制文件:
# 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>
提示: 对于没有 tc/iptables 的容器进行网络混沌实验时,使用 --tc-image 生成 sidecar:
pumba --runtime containerd netem --tc-image ghcr.io/alexei-led/pumba-alpine-nettools:latest \
--duration 5m delay --time 3000 <container-id>
使用 Docker 运行
docker run -it --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/alexei-led/pumba --interval=10s --random kill "re2:^test"
Docker 镜像
| 注册表 | 镜像 | 状态 |
|---|
| GitHub Container Registry | ghcr.io/alexei-led/pumba | ✅ 主要 |
| Docker Hub | alexeiled/pumba | ⚠️ 已弃用 |
镜像为 linux/amd64 和 linux/arm64 原生构建(不使用 QEMU)。
文档
演示

社区与支持
许可证
Apache License 2.0