
Termina periodicamente pod Kubernetes casuali per testare come i sistemi si comportano in caso di failure arbitrarie dei pod, supportando filtri per namespace, label, annotazioni e pianificazione per esperimenti di chaos controllati.
chaoskube termina periodicamente pod casuali nel tuo cluster Kubernetes.

Verifica come il tuo sistema si comporta in caso di guasti arbitrari dei pod.
Eseguendolo, per impostazione predefinita terminerà un pod in qualsiasi namespace ogni 10 minuti.
$ 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 consente di filtrare i pod target per namespace, label, annotazioni ed età e di escludere determinati giorni della settimana, fasce orarie e giorni dell'anno dal caos.
Puoi installare chaoskube con Helm. Segui la Guida rapida di Helm e poi installa la chart chaoskube.
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace
Fai riferimento a chaoskube su kubeapps.com per sapere come configurarlo e trovare altre utili chart Helm.
Fai riferimento al manifesto di esempio. Assicurati di concedere a chaoskube le autorizzazioni appropriate utilizzando il ClusterRole fornito.
Per impostazione predefinita, chaoskube è innocuo e non termina nulla. Una volta convalidato il cluster target, puoi disattivare la modalità dry-run passando il flag --no-dry-run. Puoi anche specificare un intervallo più aggressivo e altri flag supportati per il tuo deployment.
Se stai eseguendo in un cluster Kubernetes e vuoi avere come target lo stesso cluster, tutto ciò che devi fare è questo.
Se vuoi avere come target un cluster diverso o eseguirlo in locale, specifica il cluster tramite il flag --master o fornisci un kubeconfig valido tramite il flag --kubeconfig. Per impostazione predefinita, utilizza il percorso kubeconfig standard nella tua home. Ciò significa che verrà preso di mira qualunque contesto sia attualmente presente lì.
Se vuoi aumentare o diminuire la quantità di caos, modifica l'intervallo tra le terminazioni con il flag --interval. In alternativa, puoi aumentare il numero di repliche del tuo deployment chaoskube.
Ricorda che chaoskube, per impostazione predefinita, termina qualsiasi pod in tutti i tuoi namespace, inclusi i pod di sistema e sé stesso.
chaoskube fornisce un semplice endpoint HTTP che può essere utilizzato per verificare che sia in esecuzione. Può essere usato per i probe di liveness e readiness di Kubernetes. Per impostazione predefinita, ascolta sulla porta 8080. Per disattivarlo, passa --metrics-address="" a chaoskube.
Tuttavia, puoi limitare lo spazio di ricerca di chaoskube fornendo selettori di label, annotazioni e namespace, pattern di inclusione/esclusione per i nomi dei pod, oltre a un'impostazione di età minima.
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter labels="app=mate,chaos,stage!=production"
Questo seleziona tutti i pod che hanno la label app impostata su mate, la label chaos impostata su qualsiasi valore e la label stage non impostata su production o non impostata.
Puoi filtrare i pod target anche tramite un selettore di namespace.
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter namespaces="default,staging,testing"
Questo filtrerà i pod nei tre namespace default, staging e testing.
I namespace possono inoltre essere filtrati tramite un selettore di label dei namespace.
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter namespaceLabels="!integration"
Questo escluderà tutti i pod dai namespace con la label integration.
Puoi filtrare i pod target tramite il selettore di kind degli OwnerReference.
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter kinds="!DaemonSet,!StatefulSet"
Questo escluderà qualsiasi pod DaemonSet e StatefulSet.
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter kinds="DaemonSet"
Questo includerà solo i pod DaemonSet.
Nota: qualsiasi filtro di inclusione escluderà automaticamente tutti i pod senza un OwnerReference definito.
Puoi filtrare i pod per nome:
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter excludedPodNames=prod includedPodNames="foo|bar"
Ciò farà sì che vengano presi di mira solo i pod il cui nome contiene 'foo' o 'bar' e non contiene 'prod'.
Puoi anche escludere namespace e combinarli con i selettori di label e annotazioni.
$ 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"
Questo limita ulteriormente lo spazio di ricerca del selettore di label precedente, escludendo anche i pod nei namespace kube-system e production e ignorando tutti i pod contrassegnati come critici.
Il selettore di annotazioni può essere utilizzato anche per eseguire chaoskube come componente aggiuntivo del cluster e consentire ai pod di aderire volontariamente alla terminazione come meglio credi. Ad esempio, potresti eseguire chaoskube in questo modo:
$ 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