
Termine périodiquement des pods Kubernetes aléatoires pour tester le comportement des systèmes face à des pannes de pods arbitraires, avec prise en charge des filtres par namespace, label, annotation et planification pour des expériences de chaos contrôlées.
chaoskube tue périodiquement des pods aléatoires dans votre cluster Kubernetes.

Tester comment votre système se comporte lors de défaillances de pods arbitraires.
Par défaut, son exécution tue un pod dans chaque namespace toutes les 10 minutes.
$ 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 permet de filtrer les pods cibles par namespaces, labels, annotations et âge ainsi que d'exclure certains jours de la semaine, certaines heures de la journée et certains jours de l'année du chaos.
Vous pouvez installer chaoskube avec Helm. Suivez le Guide de démarrage rapide de Helm puis installez le chart chaoskube.
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace
Référez-vous à chaoskube sur kubeapps.com pour apprendre comment le configurer et pour trouver d'autres charts Helm utiles.
Référez-vous au manifest d'exemple. Assurez-vous de donner à chaoskube les permissions appropriées en utilisant le ClusterRole fourni.
Par défaut, chaoskube est inoffensif et ne tue rien. Lorsque vous avez validé votre cluster cible, vous pouvez désactiver le mode dry-run en passant l'option --no-dry-run. Vous pouvez également spécifier un intervalle plus agressif et d'autres options prises en charge pour votre déploiement.
Si vous exécutez dans un cluster Kubernetes et que vous voulez cibler ce même cluster, c'est tout ce que vous avez à faire.
Si vous voulez cibler un autre cluster ou l'exécuter localement, spécifiez votre cluster via l'option --master ou fournissez un kubeconfig valide via l'option --kubeconfig. Par défaut, il utilise le chemin standard de votre kubeconfig dans votre répertoire personnel. Cela signifie que le contexte actuel qui s'y trouve sera ciblé.
Si vous voulez augmenter ou diminuer la quantité de chaos, modifiez l'intervalle entre les mises à mort avec l'option --interval. Vous pouvez également augmenter le nombre de réplicas de votre déploiement chaoskube.
Rappelez-vous que chaoskube, par défaut, tue tous les pods dans tous vos namespaces, y compris les pods système et lui-même.
chaoskube fournit un simple point de terminaison HTTP qui peut être utilisé pour vérifier qu'il est en cours d'exécution. Cela peut être utilisé pour les sondes de liveness et de readiness Kubernetes. Par défaut, il écoute sur le port 8080. Pour le désactiver, passez --metrics-address="" à chaoskube.
Cependant, vous pouvez limiter l'espace de recherche de chaoskube en fournissant des sélecteurs de labels, d'annotations et de namespaces, des motifs d'inclusion/exclusion de noms de pods, ainsi qu'un réglage d'âge minimum.
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter labels="app=mate,chaos,stage!=production"
Cela sélectionne tous les pods qui ont le label app défini sur mate, le label chaos défini sur n'importe quelle valeur et le label stage non défini sur production ou non défini.
Vous pouvez également filtrer les pods cibles par sélecteur de namespaces.
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter namespaces="default,staging,testing"
Cela filtrera les pods dans les trois namespaces default, staging et testing.
Les namespaces peuvent en outre être filtrés par un sélecteur de labels sur les namespaces.
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter namespaceLabels="!integration"
Cela exclura tous les pods des namespaces ayant le label integration.
Vous pouvez filtrer les pods cibles par un sélecteur de type d'OwnerReference.
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter kinds="!DaemonSet,!StatefulSet"
Cela exclura tous les pods de DaemonSet et StatefulSet.
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter kinds="DaemonSet"
Cela n'inclura que les pods de DaemonSet.
Veuillez noter : tout filtre include exclura automatiquement tous les pods sans OwnerReference défini.
Vous pouvez filtrer les pods par nom :
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter excludedPodNames=prod includedPodNames="foo|bar"
Cela fera en sorte que seuls les pods dont le nom contient 'foo' ou 'bar' et ne contient pas 'prod' soient ciblés.
Vous pouvez également exclure des namespaces et combiner cela avec les sélecteurs de labels et d'annotations.
$ 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"
Cela limite davantage l'espace de recherche du sélecteur de labels ci-dessus en excluant également tous les pods des namespaces kube-system et production, ainsi qu'en ignorant tous les pods marqués comme critiques.
Le sélecteur d'annotations peut également être utilisé pour exécuter chaoskube en tant qu'addon de cluster et permettre aux pods de choisir d'être terminés comme bon vous semble. Par exemple, vous pourriez exécuter chaoskube comme ceci :
$ 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