Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
chaoskube — 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. | Kitploit
Tools/GitHubGitHub/linki/chaoskube
Chaos-Engineering
GitHublinki/chaoskube

chaoskube

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.

Repository anzeigen
1.9k126vor 22 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

chaoskube

GitHub release go-doc

chaoskube beendet regelmäßig zufällige Pods in deinem Kubernetes-Cluster.

chaoskube

Warum

Teste, wie sich dein System unter beliebigen Pod-Ausfällen verhält.

Beispiel

Beim Ausführen wird standardmäßig alle 10 Minuten ein Pod in einem beliebigen Namespace beendet.

root@kitploit:~
$ 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.

Wie

Helm

Du kannst chaoskube mit Helm installieren. Folge Helms Quickstart-Guide und installiere dann das chaoskube-Chart.

root@kitploit:~
$ 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.

Raw-Manifest

Siehe Beispiel-Manifest. Stelle sicher, dass du chaoskube mit der bereitgestellten ClusterRole die entsprechenden Berechtigungen erteilst.

Konfiguration

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.

Ziele filtern

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.

root@kitploit:~
$ 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.

root@kitploit:~
$ 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.

root@kitploit:~
$ 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.

root@kitploit:~
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter       kinds="!DaemonSet,!StatefulSet"

Dies schließt alle DaemonSet- und StatefulSet-Pods aus.

root@kitploit:~
$ 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:

root@kitploit:~
$ 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.

root@kitploit:~
$ 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:

root@kitploit:~
$ 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

Sofern du diese Annotation nicht bereits irgendwo verwendest, ignoriert dies zunächst alle deine Pods (du kannst die Anzahl der Kandidaten im Debug-Modus sehen). Du kannst dann einzelne Deployments gezielt für den Chaos-Modus anmelden, indem du ihre Pods mit chaos.alpha.kubernetes.io/enabled=true annotierst.

root@kitploit:~
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  template:
    metadata:
      annotations:
        chaos.alpha.kubernetes.io/enabled: "true"
    spec:
      ...

Du kannst Pods, die vor kurzem gestartet wurden, mit dem --minimum-age-Flag ausschließen.

root@kitploit:~
$ chaoskube --minimum-age 6h
...
INFO[0000] setting pod filter       minimumAge=6h0m0s

Chaos begrenzen

Du kannst die Zeit, in der Chaos erzeugt wird, nach Wochentagen, Tageszeiten, Tagen eines Jahres oder allen zusammen begrenzen.

Füge eine kommagetrennte Liste abgekürzter Wochentage über die Option --excluded-weekdays, eine kommagetrennte Liste von Zeiträumen über die Option --excluded-times-of-day und/oder eine kommagetrennte Liste von Tagen eines Jahres über die Option --excluded-days-of-year hinzu und gib eine --timezone an, anhand derer sie interpretiert werden.

root@kitploit:~
$ chaoskube \
    --excluded-weekdays=Sat,Sun \
    --excluded-times-of-day=22:00-08:00,11:00-13:00 \
    --excluded-days-of-year=Apr1,Dec24 \
    --timezone=Europe/Berlin
...
INFO[0000] setting quiet times      daysOfYear="[Apr 1 Dec24]" timesOfDay="[22:00-08:00 11:00-13:00]" weekdays="[Saturday Sunday]"
INFO[0000] setting timezone         location=Europe/Berlin name=CET offset=1

Verwende UTC, Local oder wähle einen Zeitzonennamen aus der (IANA) tz-Datenbank. Wenn du chaoskube von deinem lokalen Rechner aus testest, ist Local am sinnvollsten. Sobald du chaoskube in deinem Cluster bereitstellst, solltest du es mit einer bestimmten Zeitzone bereitstellen, z. B. dort, wo die meisten deiner Teammitglieder leben, damit dein Team und chaoskube ein gemeinsames Verständnis darüber haben, wann ein bestimmter Wochentag beginnt und endet. Wenn dein Team über mehrere Zeitzonen verteilt ist, ist es wahrscheinlich am besten, UTC zu wählen, was auch die Standardeinstellung ist. Die Wahl der falschen Zeitzone verschiebt die Bedeutung eines bestimmten Wochentags zwischen dir und dem Server um einige Stunden.

Flags

Verwandte Projekte

Es gibt mehrere andere Projekte, mit denen du etwas Chaos in deinem Kubernetes-Cluster erzeugen kannst.

  • kube-monkey ist ein ausgefeilter pod-basierter Chaos-Monkey für Kubernetes. Jeden Morgen erstellt er einen Zeitplan für Pod-Beendigungen, die im Laufe des Tages stattfinden sollen. Er ermöglicht die Angabe einer mittleren Zeit zwischen Ausfällen pro Pod, eine Funktion, die chaoskube fehlt. Er kann auch Gruppen von Pods erkennen, die eine Anwendung bilden, um sie speziell zu behandeln, z. B. alle Pods einer Anwendung auf einmal zu beenden. kube-mokey ermöglicht das globale Filtern von Zielen über Konfigurationsoptionen und erlaubt Pods, sich per Annotationen für Chaos anzumelden. Es erlaubt einzelnen Apps, sich auf ihre eigene Art anzumelden: Beispielsweise kann App A anfordern, jeden Wochentag einen Pod zu beenden, während App B, die mutiger ist, die Beendigung von 50 % der Pods anfordern kann. Es versteht eine ähnliche Konfigurationsdatei, wie sie auch von Netflix' ChaosMonkey verwendet wird.
  • PowerfulSeal ist in der Tat ein mächtiges Werkzeug, um deine Kubernetes-Umgebung zu quälen. Neben dem Beenden von Pods kann es auch deine Cloud-VMs ausschalten oder deinen Docker-Daemon beenden. Es verfügt über eine große Anzahl von Konfigurationsoptionen, um festzulegen, was und wann beendet werden kann. Es bietet auch einen interaktiven Modus, mit dem du Pods ganz einfach beenden kannst.
  • fabric8s Chaos Monkey: Ein Chaos-Monkey, der als App mit der fabric8-Kubernetes-Plattform gebündelt geliefert wird. Er kann über eine UI bereitgestellt werden und meldet alle durchgeführten Aktionen als Chat-Nachricht und/oder Desktop-Benachrichtigung. Er kann mit einem Intervall und einem Pod-Namen-Muster konfiguriert werden, dem mögliche Ziele entsprechen müssen.
  • k8aos: Ein interaktives Tool, das eine Reihe zufälliger Pod-Löschungen über einen gesamten Kubernetes-Cluster oder auf einen Namespace beschränkt ausführen kann.

Danksagungen

Dieses Projekt wäre nicht dort, wo es ist, ohne die Ideen und die Hilfe mehrerer großartiger Mitwirkender:

  • Dank an @twildeboer und @klautcomputing, die die Idee angestoßen haben, das Chaos zu bestimmten Zeiten zu begrenzen, wie etwa Geschäftszeiten oder Feiertage, sowie für die ersten Implementierungen dieser Funktion in #54 und #55.
  • Dank an @klautcomputing für den ersten Versuch, die fehlende Prozent-Funktion zu lösen, sowie für die Bereitstellung der RBAC-Konfigurationsdateien.
  • Dank an @j0sh3rs dafür, dass das Helm-Chart auf den neuesten Stand gebracht wurde.
  • Dank an @klautcomputing, @grosser, @twz123, @hchenxa und @bavarianbidi für Verbesserungen am Dockerfile und an der Doku in #31, #40 und #58.
  • Dank an @bakins für das Hinzufügen des Mindestalter-Filters in #86.
  • Dank an @bakins für das Hinzufügen eines Health Checks und von Prometheus-Metriken in #94 und #97.

Mitwirken

Zögere nicht, Issues zu erstellen oder Pull Requests einzureichen.

Tool herunterladen
OptionEnvironmentDescriptionDefault
--intervalCHAOSKUBE_INTERVALIntervall zwischen Pod-Beendigungen10m
--labelsCHAOSKUBE_LABELSLabel-Selektor zum Filtern von Pods(passt auf alles)
--annotationsCHAOSKUBE_ANNOTATIONSAnnotation-Selektor zum Filtern von Pods(passt auf alles)
--kindsCHAOSKUBE_KINDSKind-Selektor des Besitzers zum Filtern von Pods(alle Kinds)
--namespacesCHAOSKUBE_NAMESPACESNamespace-Selektor zum Filtern von Pods(alle Namespaces)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELSLabel-Selektor zum Filtern von Namespaces und deren Pods(alle Namespaces)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMESRegulärer Ausdruck für einzuschließende Pod-Namen(alle eingeschlossen)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMESRegulärer Ausdruck für auszuschließende Pod-Namen(keine ausgeschlossen)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYSWochentage, an denen Chaos ausgesetzt werden soll, z. B. "Sat,Sun"(kein Wochentag ausgenommen)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAYTageszeiten, zu denen Chaos ausgesetzt werden soll, z. B. "22:00-08:00"(keine Tageszeiten ausgenommen)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEARTage eines Jahres, an denen Chaos ausgesetzt werden soll, z. B. "Apr1,Dec24"(keine Tage des Jahres ausgenommen)
--timezoneCHAOSKUBE_TIMEZONEZeitzone aus der tz-Datenbank, z. B. "America/New_York", "UTC" oder "Local"(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEMaximale Laufzeit, bevor chaoskube beendet wird-1s (unbegrenzte Zeit)
--max-killCHAOSKUBE_MAX_KILLGibt die maximale Anzahl von Pods an, die pro Intervall beendet werden1
--minimum-ageCHAOSKUBE_MINIMUM_AGEMindestalter zum Filtern von Pods0s (passt auf jeden Pod)
--dry-runCHAOSKUBE_DRY_RUNPods nicht beenden, nur protokollieren, was getan worden wäretrue
--log-formatCHAOSKUBE_LOG_FORMATFormat der Protokollmeldungen angeben. Optionen sind text und jsontext
--log-callerCHAOSKUBE_LOG_CALLERName und Ort der aufrufenden Funktion in die Protokollmeldungen aufnehmenfalse
--slack-webhookCHAOSKUBE_SLACK_WEBHOOKAdresse des Slack-Webhooks für Benachrichtigungendeaktiviert
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPEKubernetes-API-Aufrufe auf den angegebenen Namespace beschränken(alle Namespaces)
  • pod-reaper beendet Pods basierend auf einem Intervall und einer konfigurierbaren Chaos-Wahrscheinlichkeit. Es ermöglicht die Angabe möglicher Ziel-Pods über einen Label-Selektor und Namespace. Es kann sich nach einiger Zeit selbst beenden und eignet sich daher möglicherweise gut für Kubernetes-Job-Objekte. Es kann auch so konfiguriert werden, dass jeder Pod beendet wird, der länger als eine konfigurierbare Dauer läuft.
  • kubernetes-pod-chaos-monkey: Ein sehr einfacher Zufalls-Pod-Killer mit kubectl, geschrieben in ein paar Zeilen Bash. Bei einem Namespace und einem Intervall beendet er bei jedem Intervall einen zufälligen Pod in diesem Namespace. So ähnlich, wie chaoskube am Anfang funktionierte.
  • kubeinvaders: Ein gamifiziertes Chaos-Engineering-Tool für Kubernetes. Es ist wie Space Invaders, aber die Aliens sind Pods oder Worker-Nodes.