
Периодически завершает случайные поды Kubernetes, чтобы проверить, как системы ведут себя при произвольных сбоях подов; поддерживает фильтры по namespace, label, annotation и расписанию для контролируемых хаос-экспериментов.
chaoskube периодически убивает случайные поды в вашем кластере Kubernetes.

Проверьте, как ваша система ведёт себя при произвольных сбоях подов.
При запуске он по умолчанию убивает под в любом namespace каждые 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 позволяет фильтровать целевые поды по namespaces, меткам, аннотациям и возрасту, а также исключать определённые дни недели, время суток и дни года из хаоса.
Вы можете установить chaoskube с помощью Helm. Следуйте краткому руководству Helm и затем установите чарт chaoskube.
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace
Обратитесь к chaoskube на kubeapps.com, чтобы узнать, как его настроить, и найти другие полезные Helm-чарты.
Обратитесь к примеру манифеста. Убедитесь, что вы предоставили chaoskube соответствующие разрешения с помощью предоставленного ClusterRole.
По умолчанию chaoskube ведёт себя дружелюбно и ничего не убивает. Когда вы проверите целевой кластер, вы можете отключить режим dry-run, передав флаг --no-dry-run. Вы также можете указать более агрессивный интервал и другие поддерживаемые флаги для вашего развёртывания.
Если вы работаете в кластере Kubernetes и хотите воздействовать на тот же кластер, то этого достаточно.
Если вы хотите воздействовать на другой кластер или запустить его локально, укажите ваш кластер через флаг --master или предоставьте действующий kubeconfig через флаг --kubeconfig. По умолчанию используется стандартный путь kubeconfig в вашем домашнем каталоге. Это означает, что будет выбран текущий контекст.
Если вы хотите увеличить или уменьшить количество хаоса, измените интервал между убийствами с помощью флага --interval. Кроме того, вы можете увеличить количество реплик вашего развёртывания chaoskube.
Помните, что chaoskube по умолчанию убивает любой под во всех ваших namespaces, включая системные поды и сам себя.
chaoskube предоставляет простой HTTP-эндпоинт, который можно использовать для проверки его работы. Его можно использовать для проверок liveness и readiness в Kubernetes. По умолчанию он слушает порт 8080. Чтобы отключить, передайте --metrics-address="" в chaoskube.
Однако вы можете ограничить пространство поиска chaoskube, указав селекторы меток, аннотаций и namespaces, шаблоны включения/исключения имён подов, а также настройку минимального возраста.
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter labels="app=mate,chaos,stage!=production"
Это выбирает все поды, у которых метка app установлена в mate, метка chaos установлена в любое значение, а метка stage не установлена в production или не задана.
Вы также можете фильтровать целевые поды по селектору namespace.
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter namespaces="default,staging,testing"
Это отфильтрует поды в трёх namespaces: default, staging и testing.
Namespaces также можно фильтровать с помощью селектора меток namespace.
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter namespaceLabels="!integration"
Это исключит все поды из namespaces с меткой integration.
Вы можете фильтровать целевые поды по селектору kind 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'.
Вы также можете исключать namespaces и комбинировать их с селекторами меток и аннотаций.
$ 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"
Это дополнительно ограничивает пространство поиска вышеуказанного селектора меток, исключая также любые поды в namespaces 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
Если вы ещё нигде не используете эту аннотацию, сначала будут игнорироваться все ваши поды (вы можете увидеть количество кандидатов в режиме debug). Затем вы можете выборочно включать отдельные Deployment в режим хаоса, аннотируя их поды значением chaos.alpha.kubernetes.io/enabled=true.