
समय-समय पर यादृच्छिक Kubernetes pods को समाप्त करता है ताकि यह परीक्षण किया जा सके कि सिस्टम अनियमित pod विफलताओं के तहत कैसे व्यवहार करते हैं, तथा नियंत्रित chaos प्रयोगों के लिए namespace, label, annotation और schedule फ़िल्टर का समर्थन करता है।
chaoskube समय-समय पर आपके Kubernetes क्लस्टर में यादृच्छिक पॉड्स को समाप्त करता है।

जांचें कि आपका सिस्टम किसी भी पॉड विफलता के तहत कैसा व्यवहार करता है।
डिफ़ॉल्ट रूप से, इसे चलाने पर हर 10 मिनट में किसी भी नेमस्पेस में एक पॉड समाप्त हो जाएगा।
$ chaoskube
INFO[0000] starting up dryRun=true interval=10m0s version=v0.21.0
INFO[0000] connecting to cluster master="https://kube.you.me" serverVersion=v1.10.5+coreos.0
INFO[0000] setting pod filter annotations= labels= minimumAge=0s namespaces=
INFO[0000] setting quiet times daysOfYear="[]" timesOfDay="[]" weekdays="[]"
INFO[0000] setting timezone location=UTC name=UTC offset=0
INFO[0001] terminating pod name=kube-dns-v20-6ikos namespace=kube-system
INFO[0601] terminating pod name=nginx-701339712-u4fr3 namespace=chaoskube
INFO[1201] terminating pod name=kube-proxy-gke-earthcoin-pool-3-5ee87f80-n72s namespace=kube-system
INFO[1802] terminating pod name=nginx-701339712-bfh2y namespace=chaoskube
INFO[2402] terminating pod name=heapster-v1.2.0-1107848163-bhtcw namespace=kube-system
INFO[3003] terminating pod name=l7-default-backend-v1.0-o2hc9 namespace=kube-system
INFO[3603] terminating pod name=heapster-v1.2.0-1107848163-jlfcd namespace=kube-system
INFO[4203] terminating pod name=nginx-701339712-bfh2y namespace=chaoskube
INFO[4804] terminating pod name=nginx-701339712-51nt8 namespace=chaoskube
...
chaoskube लक्षित पॉड्स को नेमस्पेस, लेबल, एनोटेशन और आयु द्वारा फ़िल्टर करने की अनुमति देता है, साथ ही अराजकता से कुछ सप्ताह के दिन, दिन के समय और वर्ष के दिनों को बाहर करने की भी अनुमति देता है।
आप chaoskube को Helm के साथ इंस्टॉल कर सकते हैं। Helm की क्विकस्टार्ट गाइड का पालन करें और फिर chaoskube चार्ट इंस्टॉल करें।
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace
इसे कॉन्फ़िगर करने का तरीका जानने और अन्य उपयोगी Helm चार्ट खोजने के लिए kubeapps.com पर chaoskube देखें।
उदाहरण मैनिफेस्ट देखें। सुनिश्चित करें कि आप दिए गए ClusterRole का उपयोग करके chaoskube को उचित अनुमतियाँ देते हैं।
डिफ़ॉल्ट रूप से chaoskube अनुकूल होगा और कुछ भी नहीं मारेगा। जब आप अपने लक्षित क्लस्टर को सत्यापित कर लें, तो आप --no-dry-run फ़्लैग पास करके ड्राई-रन मोड को अक्षम कर सकते हैं। आप अपनी तैनाती के लिए अधिक आक्रामक अंतराल और अन्य समर्थित फ़्लैग भी निर्दिष्ट कर सकते हैं।
यदि आप किसी Kubernetes क्लस्टर में चल रहे हैं और उसी क्लस्टर को लक्षित करना चाहते हैं, तो आपको बस इतना ही करना है।
यदि आप किसी भिन्न क्लस्टर को लक्षित करना चाहते हैं या इसे स्थानीय रूप से चलाना चाहते हैं, तो अपने क्लस्टर को --master फ़्लैग के माध्यम से निर्दिष्ट करें या --kubeconfig फ़्लैग के माध्यम से एक मान्य kubeconfig प्रदान करें। डिफ़ॉल्ट रूप से, यह आपके घर में आपके मानक kubeconfig पथ का उपयोग करता है। इसका मतलब है, वहाँ जो भी वर्तमान कॉन्टेक्स्ट होगा, वह लक्षित किया जाएगा।
यदि आप अराजकता की मात्रा बढ़ाना या घटाना चाहते हैं, तो --interval फ़्लैग के साथ हत्याओं के बीच के अंतराल को बदलें। वैकल्पिक रूप से, आप अपने chaoskube तैनाती की रेप्लिकास की संख्या बढ़ा सकते हैं।
याद रखें कि chaoskube डिफ़ॉल्ट रूप से आपके सभी नेमस्पेस में किसी भी पॉड को मारता है, जिसमें सिस्टम पॉड्स और स्वयं भी शामिल हैं।
chaoskube एक सरल HTTP एंडपॉइंट प्रदान करता है जिसका उपयोग यह जाँचने के लिए किया जा सकता है कि यह चल रहा है। इसका उपयोग Kubernetes लाइवनेस और रेडीनेस प्रोब्स के लिए किया जा सकता है। डिफ़ॉल्ट रूप से, यह पोर्ट 8080 पर सुनता है। अक्षम करने के लिए, chaoskube को --metrics-address="" पास करें।
हालाँकि, आप लेबल, एनोटेशन और नेमस्पेस सेलेक्टर, पॉड नाम शामिल/बहिष्कृत पैटर्न, साथ ही न्यूनतम आयु सेटिंग प्रदान करके chaoskube के खोज स्थान को सीमित कर सकते हैं।
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter labels="app=mate,chaos,stage!=production"
यह उन सभी पॉड्स का चयन करता है जिनका लेबल app mate पर सेट है, लेबल chaos किसी भी चीज़ पर सेट है, और लेबल stage production पर सेट नहीं है या अनसेट है।
आप लक्षित पॉड्स को नेमस्पेस सेलेक्टर द्वारा भी फ़िल्टर कर सकते हैं।
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter namespaces="default,staging,testing"
यह तीन नेमस्पेस default, staging और testing में पॉड्स के लिए फ़िल्टर करेगा।
नेमस्पेस को अतिरिक्त रूप से एक नेमस्पेस लेबल सेलेक्टर द्वारा फ़िल्टर किया जा सकता है।
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter namespaceLabels="!integration"
यह integration लेबल वाले नेमस्पेस के सभी पॉड्स को बाहर कर देगा।
आप लक्षित पॉड्स को OwnerReference के काइंड सेलेक्टर द्वारा फ़िल्टर कर सकते हैं।
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter kinds="!DaemonSet,!StatefulSet"
यह किसी भी DaemonSet और StatefulSet पॉड्स को बाहर कर देगा।
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter kinds="DaemonSet"
यह केवल किसी भी DaemonSet पॉड्स को शामिल करेगा।
कृपया ध्यान दें: कोई भी include फ़िल्टर स्वचालित रूप से उन सभी पॉड्स को बाहर कर देगा जिनमें कोई OwnerReference परिभाषित नहीं है।
आप पॉड्स को नाम से फ़िल्टर कर सकते हैं:
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter excludedPodNames=prod includedPodNames="foo|bar"
इससे केवल उन पॉड्स को लक्षित किया जाएगा जिनके नाम में 'foo' या 'bar' है और जिनमें 'prod' नहीं है।
आप नेमस्पेस को भी बाहर कर सकते हैं और लेबल और एनोटेशन सेलेक्टर्स के साथ मिला-जुलाकर उपयोग कर सकते हैं।
$ chaoskube \
--labels 'app=mate,chaos,stage!=production' \
--annotations '!scheduler.alpha.kubernetes.io/critical-pod' \
--namespaces '!kube-system,!production'
...
INFO[0000] setting pod filter annotations="!scheduler.alpha.kubernetes.io/critical-pod" labels="app=mate,chaos,stage!=production" namespaces="!kube-system,!production"
यह उपरोक्त लेबल सेलेक्टर के खोज स्थान को और सीमित करता है, साथ ही kube-system और production नेमस्पेस के किसी भी पॉड्स को बाहर करता है और उन सभी पॉड्स को अनदेखा करता है जिन्हें महत्वपूर्ण के रूप में चिह्नित किया गया है।
एनोटेशन सेलेक्टर का उपयोग chaoskube को क्लस्टर ऐडऑन के रूप में चलाने और पॉड्स को आपके अनुसार समाप्त होने के लिए ऑप्ट-इन करने की अनुमति देने के लिए भी किया जा सकता है। उदाहरण के लिए, आप chaoskube को इस प्रकार चला सकते हैं:
$ chaoskube --annotations 'chaos.alpha.kubernetes.io/enabled=true' --debug
...
INFO[0000] setting pod filter annotations="chaos.alpha.kubernetes.io/enabled=true"
DEBU[0000] found candidates count=0
DEBU[0000] no victim found