
Beendet regelmäßig zufällige Kubernetes-Pods, um zu testen, wie sich Systeme unter beliebigen Pod-Ausfällen verhalten. Unterstützt Filter nach Namespace, Label, Annotation und Zeitplan für kontrollierte Chaos-Experimente.
chaoskube beendet regelmäßig zufällige Pods in deinem Kubernetes-Cluster.

Teste, wie sich dein System unter beliebigen Pod-Ausfällen verhält.
Beim Ausführen wird standardmäßig alle 10 Minuten ein Pod in einem beliebigen Namespace beendet.
$ 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 ermöglicht das Filtern der Ziel-Pods nach Namespaces, Labels, Annotationen und Alter sowie das Ausschließen bestimmter Wochentage, Tageszeiten und Tage eines Jahres vom Chaos.
Du kannst chaoskube mit Helm installieren. Folge Helms Quickstart-Guide und installiere dann das chaoskube-Chart.
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace
Siehe chaoskube auf kubeapps.com, um zu erfahren, wie du es konfigurierst und andere nützliche Helm-Charts findest.
Siehe Beispiel-Manifest. Stelle sicher, dass du chaoskube mit der bereitgestellten ClusterRole die entsprechenden Berechtigungen erteilst.
Standardmäßig ist chaoskube freundlich und beendet nichts. Wenn du deinen Ziel-Cluster validiert hast, kannst du den Dry-Run-Modus deaktivieren, indem du das Flag --no-dry-run übergibst. Du kannst auch ein aggressiveres Intervall und andere unterstützte Flags für deine Bereitstellung angeben.
Wenn du in einem Kubernetes-Cluster läufst und denselben Cluster anvisieren möchtest, ist das alles, was du tun musst.
Wenn du einen anderen Cluster anvisieren oder ihn lokal ausführen möchtest, gib deinen Cluster über das --master-Flag an oder stelle eine gültige kubeconfig über das --kubeconfig-Flag bereit. Standardmäßig wird der Standardpfad der kubeconfig in deinem Home-Verzeichnis verwendet. Das bedeutet, dass der aktuelle Kontext dort anvisiert wird.
Wenn du das Ausmaß des Chaos erhöhen oder verringern möchtest, ändere das Intervall zwischen den Beendigungen mit dem --interval-Flag. Alternativ kannst du die Anzahl der Repliken deiner chaoskube-Bereitstellung erhöhen.
Denke daran, dass chaoskube standardmäßig jeden Pod in all deinen Namespaces beendet, einschließlich System-Pods und sich selbst.
chaoskube stellt einen einfachen HTTP-Endpunkt bereit, mit dem überprüft werden kann, ob es läuft. Dieser kann für Kubernetes-Liveness- und Readiness-Probes verwendet werden. Standardmäßig lauscht dieser auf Port 8080. Zum Deaktivieren übergib --metrics-address="" an chaoskube.
Du kannst den Suchraum von chaoskube jedoch einschränken, indem du Label-, Annotation- und Namespace-Selektoren, Pod-Namen-Ein-/Ausschlussmuster sowie eine Mindestalter-Einstellung angibst.
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter labels="app=mate,chaos,stage!=production"
Dies wählt alle Pods aus, deren Label app auf mate gesetzt ist, deren Label chaos auf einen beliebigen Wert gesetzt ist und deren Label stage nicht auf production gesetzt oder nicht gesetzt ist.
Du kannst Ziel-Pods auch nach Namespace-Selektor filtern.
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter namespaces="default,staging,testing"
Dies filtert nach Pods in den drei Namespaces default, staging und testing.
Namespaces können zusätzlich über einen Namespace-Label-Selektor gefiltert werden.
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter namespaceLabels="!integration"
Dies schließt alle Pods aus Namespaces mit dem Label integration aus.
Du kannst Ziel-Pods nach dem Kind-Selektor der OwnerReference filtern.
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter kinds="!DaemonSet,!StatefulSet"
Dies schließt alle DaemonSet- und StatefulSet-Pods aus.
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter kinds="DaemonSet"
Dies schließt nur DaemonSet-Pods ein.
Bitte beachte: Jeder include-Filter schließt automatisch alle Pods ohne definierte OwnerReference aus.
Du kannst Pods nach Namen filtern:
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter excludedPodNames=prod includedPodNames="foo|bar"
Dadurch werden nur Pods anvisiert, deren Name 'foo' oder 'bar' enthält und nicht 'prod' enthält.
Du kannst auch Namespaces ausschließen und sie mit den Label- und Annotation-Selektoren kombinieren.
$ 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"
Dies schränkt den Suchraum des obigen Label-Selektors weiter ein, indem auch alle Pods in den Namespaces kube-system und production ausgeschlossen sowie alle Pods ignoriert werden, die als kritisch markiert sind.
Der Annotation-Selektor kann auch verwendet werden, um chaoskube als Cluster-Addon auszuführen und Pods nach Belieben zu erlauben, sich für die Beendigung zu entscheiden. Du könntest chaoskube zum Beispiel so ausführen:
$ 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