
أداة اختبار الفوضى، ومحاكاة الشبكة، واختبار الضغط للحاويات
أداة اختبار الفوضى لحاويات 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 qdiscs ومقابس بيئة تشغيل الحاويات). الملفات الثنائية الصادرة:
لا يُبنى Windows عمدًا. أوليات الفوضى — كتابات Linux netns/cgroup، حقن الحاوية المساعدة (sidecar) عبر tc/iptables، إعادة توجيه إشارات POSIX (SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2 المستخدمة من بيئة تشغيل containerd) — لا مقابل لها في Windows. لا توجد حالة استخدام معقولة لـ Windows حتى مع الواجهة الخلفية WSL2 في Docker Desktop، لذلك لا يُنشر أي ملف ثنائي لـ Windows. لن تُقبل طلبات السحب (PRs) التي تضيف دعمًا لـ Windows؛ يرجى تشغيل pumba على Linux (محليًا أو داخل حاوية أو VM).
حمّل أحدث إصدار الخاص بمنصتك، أو استخدم 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>
يتواصل Pumba مع Podman عبر مقبسه المتوافق مع Docker. خيار --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 استخدام Podman بوضع rootful — الوضع rootless يفشل فورًا مع رسالة واضحة تشير إلى podman machine set --rootful (على macOS) أو وحدة systemd بوضع rootful (على Linux).
يعمل Podman على macOS داخل جهاز VM بنظام Linux. يجب أن يعمل Pumba على نفس النواة التي تعمل عليها الحاويات المستهدفة (قراءة /proc/<pid>/cgroup من جانب المضيف)، لذا شغّل ملف pumba الثنائي داخل جهاز VM الخاص بـ podman machine:
# 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 run -it --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/alexei-led/pumba --interval=10s --random kill "re2:^test"
| السجل | الصورة | الحالة |
|---|---|---|
| GitHub Container Registry | ghcr.io/alexei-led/pumba | ✅ أساسي |
| Docker Hub | alexeiled/pumba | ⚠️ مُهجَر |
تُبنى الصور بشكل أصلي (native) لكل من linux/amd64 و linux/arm64 (بدون QEMU).
| Runtime | Socket (default) | netem / iptables / stress | Notes |
|---|
| Docker | /var/run/docker.sock | Works as root or with socket access | Default runtime. |
| containerd | /run/containerd/containerd.sock | Requires root (overlayfs mounts for sidecar) | Namespaces: k8s.io (Kubernetes), moby (Docker-managed), default (pure containerd). |
| Podman | /run/podman/podman.sock (rootful) | Requires rootful Podman (fails fast else) | Uses Podman's Docker-compat API; on macOS pumba runs inside podman machine (see below). |
| OS | amd64 | arm64 | Notes |
|---|
| Linux | ✅ | ✅ | الهدف الأساسي. شغّل pumba على نفس نواة الحاويات المستهدفة. |
| macOS | ✅ | ✅ | لراحة المطوّرين فقط. استخدمه لقيادة VM بعيد يعمل بـ Docker/Podman/containerd (مثل Colima أو podman machine). |
| Windows | ❌ | ❌ | غير مدعوم وغير مخطط له. انظر أدناه. |
| الفئة | الأوامر | الوصف |
|---|
| فوضى الحاويات | kill, stop, pause, rm, restart | تعطيل دورة حياة الحاويات |
| التنفيذ | exec | تشغيل أوامر داخل الحاويات |
| تأخير الشبكة | netem delay | إضافة كمون إلى حركة المرور الصادرة |
| فقدان الحزم | netem loss, iptables loss | إسقاط الحزم (الصادرة والواردة) |
| تأثيرات الشبكة | netem duplicate, corrupt, rate | تكرار الحزم أو إفسادها أو تحديد معدل نقلها |
| اختبار الإجهاد | stress | إجهاد CPU والذاكرة والإدخال/الإخراج عبر stress-ng (الحقن في cgroup فرعي أو نفس cgroup) |
| الاستهداف | الأسماء، التعبيرات النمطية (re2:)، التسميات، --random | تحديد مرن للحاويات |
| الجدولة | --interval | فوضى متكررة على فترات زمنية ثابتة |
| العلامة | الافتراضي | الوصف |
|---|
--runtime | docker | بيئة تشغيل الحاويات (docker أو containerd أو podman) |
--containerd-socket | /run/containerd/containerd.sock | مسار مقبس containerd |
--containerd-namespace | k8s.io | مساحة أسماء containerd (k8s.io لـ Kubernetes، moby لـ Docker) |
--podman-socket | (اكتشاف تلقائي) | URI مقبس Podman (مثل unix:///run/podman/podman.sock)؛ تركه فارغًا يؤدي إلى الاكتشاف التلقائي |
| المستند | الوصف |
|---|
| دليل المستخدم | أوامر فوضى الحاويات، الاستهداف، الجدولة، التكوين |
| فوضى الشبكة | netem و iptables، سيناريوهات متقدمة، مخططات معمارية |
| اختبار الإجهاد | اختبار إجهاد CPU/الذاكرة/الإدخال-الإخراج باستخدام stress-ng |
| النشر | Docker و DaemonSets الخاصة بـ Kubernetes و OpenShift |
| المساهمة | البناء من المصدر، تشغيل الاختبارات، بنية المشروع |