
कंटेनरों के लिए अव्यवस्था परीक्षण, नेटवर्क अनुकरण और स्ट्रेस टेस्टिंग उपकरण
Docker, containerd और Podman के लिए कैओस परीक्षण उपकरण
त्वरित आरंभ · उपयोगकर्ता गाइड · नेटवर्क कैओस · परिनियोजन · योगदान
Pumba, Docker, containerd और Podman कंटेनरों के लिए एक कैओस परीक्षण और नेटवर्क इम्यूलेशन उपकरण है। Netflix Chaos Monkey से प्रेरित होकर, Pumba कैओस इंजीनियरिंग को कंटेनर स्तर पर लाता है — कंटेनरों को kill, stop, pause और remove करना, नेटवर्क विलंब और पैकेट हानि इंजेक्ट करना, या कंटेनर संसाधनों का स्ट्रेस-टेस्ट करना।
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 लेखन, tc/iptables साइडकार इंजेक्शन, POSIX सिग्नल फ़ॉरवर्डिंग (SIGCONT/SIGSTOP/SIGUSR1/SIGUSR2 जो containerd रनटाइम द्वारा उपयोग किए जाते हैं) — का कोई Windows समकक्ष नहीं है। Docker Desktop के WSL2 बैकएंड के साथ भी Windows के लिए कोई सार्थक उपयोग-मामला नहीं है, इसलिए कोई Windows बाइनरी प्रकाशित नहीं की गई है। Windows समर्थन जोड़ने वाले PR स्वीकार नहीं किए जाएँगे; कृपया 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-compat सॉकेट के माध्यम से संवाद करता है। --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) की ओर इंगित करता है।
macOS पर Podman एक Linux VM के अंदर चलता है। Pumba को लक्षित कंटेनरों के समान कर्नेल पर चलना चाहिए (होस्ट-साइड /proc/<pid>/cgroup रीड), इसलिए pumba बाइनरी को podman machine VM के अंदर चलाएँ:
# 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का उपयोग करें: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 | ⚠️ अप्रचलित |
इमेजेस linux/amd64 और linux/arm64 के लिए नेटिव रूप से बनाई जाती हैं (कोई QEMU नहीं)।
| रनटाइम | सॉकेट (डिफ़ॉल्ट) | netem / iptables / stress | नोट्स |
|---|
| Docker | /var/run/docker.sock | रूट के रूप में या सॉकेट एक्सेस के साथ काम करता है | डिफ़ॉल्ट रनटाइम। |
| containerd | /run/containerd/containerd.sock | रूट की आवश्यकता होती है (साइडकार के लिए overlayfs माउंट) | नेमस्पेस: k8s.io (Kubernetes), moby (Docker-प्रबंधित), default (शुद्ध containerd)। |
| Podman | /run/podman/podman.sock (rootful) | rootful Podman की आवश्यकता होती है (अन्यथा तुरंत विफल) | Podman के Docker-compat API का उपयोग करता है; macOS पर pumba podman machine के अंदर चलता है (नीचे देखें)। |
| ओएस | amd64 | arm64 | नोट्स |
|---|
| Linux | ✅ | ✅ | प्राथमिक लक्ष्य। Pumba को लक्षित कंटेनरों के समान कर्नेल पर चलाएँ। |
| macOS | ✅ | ✅ | केवल डेवलपर एर्गोनॉमिक्स। इसका उपयोग दूरस्थ Docker/Podman/containerd VM (जैसे Colima, podman machine) चलाने के लिए करें। |
| Windows | ❌ | ❌ | समर्थित नहीं है और न ही योजना है। नीचे देखें। |
| श्रेणी | कमांड्स | विवरण |
|---|
| कंटेनर कैओस | kill, stop, pause, rm, restart | कंटेनर जीवनचक्र को बाधित करें |
| निष्पादन | exec | कंटेनरों के अंदर कमांड चलाएँ |
| नेटवर्क विलंब | netem delay | ईग्रेस ट्रैफ़िक में विलंब जोड़ें |
| पैकेट हानि | netem loss, iptables loss | पैकेट ड्रॉप करें (ईग्रेस और इनग्रेस) |
| नेटवर्क प्रभाव | netem duplicate, corrupt, rate | पैकेटों की नकल करें, दूषित करें, या रेट-लिमिट करें |
| स्ट्रेस टेस्टिंग | stress | stress-ng के माध्यम से CPU, मेमोरी, I/O स्ट्रेस (चाइल्ड cgroup या समान-cgroup इंजेक्शन) |
| लक्ष्यीकरण | नाम, regex (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 | (स्वतः पहचाना गया) | Podman सॉकेट URI (जैसे unix:///run/podman/podman.sock); खाली होने पर ऑटो-डिटेक्शन सक्रिय होता है |
| दस्तावेज़ | विवरण |
|---|
| उपयोगकर्ता गाइड | कंटेनर कैओस कमांड, लक्ष्यीकरण, शेड्यूलिंग, कॉन्फ़िगरेशन |
| नेटवर्क कैओस | netem, iptables, उन्नत परिदृश्य, आर्किटेक्चर आरेख |
| स्ट्रेस टेस्टिंग | stress-ng के साथ CPU/मेमोरी/IO स्ट्रेस टेस्टिंग |
| परिनियोजन | Docker, Kubernetes DaemonSets, OpenShift |
| योगदान | सोर्स से बिल्ड करें, टेस्ट चलाएँ, प्रोजेक्ट संरचना |