chaosctl: инструмент для экспериментов с хаосом¶
Если вы читаете эту книгу, то вы уже знаете, что такое Chaos Engineering (сhaos по-русски произносится, как "кейос"). Это зрелая инженерная дисциплина, которая помогает нам создавать по-настоящему надежные системы. Мы намеренно создаем разные сбои, чтобы проверить, выживет ли наш сервис.
Но любой эксперимент, особенно в сложной распределенной системе, может пойти не по плану. Иногда мы ломаем систему, и она ожидаемо падает именно там и именно так, как мы задумывали. Но иногда мы ломаем систему, а она ведет себя странно, не так, как мы задумывали и ожидали. Или эксперимент просто не срабатывает вообще.
Вот здесь и появляется очень нужная и полезная штука - chaosctl.
Обратите внимание!
В свежайшей на момент написания этой главы Chaos Mesh версии 2.8.1 chaosctl "has been deprecated". Его использование в новых версиях не рекомендовано. Его функциональность была интегрирована непосредственно в Chaos Mesh Dashboard и API-сервер. Отладка теперь выполняется через веб-интерфейс и прямые запросы к API. Начиная с версии 2.8.1+, вся отладочная информация стала доступна прямо в веб-интерфейсе. Это даже удобнее для большинства сценариев: ```bash
Получить доступ к дашборду¶
kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333 ``` Есть еще очень интересная альтернатива - проект Krkn от Red Hat, с собственным CLI-инструментом [krknctl] (https://krkn-chaos.dev/docs/installation/krknctl/), но я еще не успел его попробовать.
chaosctl это официальный CLI-инструмент для платформы Chaos Mesh, который служит для отладки и управления хаос-экспериментами. Chaos Mesh это популярная open-source платформа для проведения chaos engineering экспериментов в Kubernetes.
Например, вот так можно удалить под в конкретном неймспейсе с нужными параметрами:
# pod deletion experiment
chaosctl delete pod --namespace app --percentage 10 --duration 5m
а вот так "замедлить" сеть:
# network latency experiment
chaosctl network --latency 100ms --namespace app --duration 10m
или "заполнить диск":
# disk fill experiment
chaosctl disk --fill-percent 80 --namespace system --duration 5m
Руководителю или продакт-менеджеру не нужно знать, как именно работает команда chaosctl debug, но нужно понимать, какие бизнес-выгоды мы получаем, используя такие инструменты.
Экономим время команды, значит, экономим деньги¶
Раньше, если эксперимент с хаосом давал сбой, инженеры начинали расследование "вручную": им приходилось заходить в каждый под, проверять логи, смотреть настройки сети. Это могло занимать часы, а то и дни.
сhaosctl делает это за считанные секунды. Одна команда - и инженер получает готовый дамп всей необходимой информации. Это означает, что дорогостоящие специалисты тратят время на улучшение продукта, а не на унылый copy-paste из логов.
2. Результаты экспериментов достоверны¶
Представьте, мы решили проверить, выдержит ли наш продукт отключение базы данных в одном дата-центре. Мы запустили эксперимент, продукт устоял. Все рады. Но так ли это на самом деле?
сhaosctl позволяет нам проверить, а действительно ли мы отключили базу? Может быть, из-за ошибки в конфигурации эксперимент просто не применился, и мы тестировали не то, что хотели. Chaosctl дает нам уверенность, что результаты наших тестов - правда. А значит, мы можем спать спокойно, зная, что система действительно надежна.
3. Скорость восстановления после сбоев¶
сhaosctl помогает не только во время экспериментов, но и при реальных авариях (инцидентах). Механика та же: если система ведет себя странно, инженер может с помощью chaosctl быстро собрать данные с больного узла и понять, что именно сломалось. Это напрямую влияет на MTTR. Чем меньше MTTR, тем дольше сервис приносит деньги, а не теряет их.
Реальный пример из жизни¶
Представьте отдел разработки, который запускает новый сервис. SRE решает провести эксперимент: внести задержку в сеть (например, 1000 мс) для проверки таймаутов.
Он запускает эксперимент через Chaos Mesh, но что-то идет не так: приложение начинает выдавать ошибки, но совсем не те, что ожидались. Вместо того чтобы тратить час на изучение документации и ручное подключение к подам, инженер просто пишет в терминале:
chaosctl debug networkchaos имя_эксперимента
Через секунду он получает на экране актуальные правила iptables и настройки сетевой задержки с целевого пода. Он мгновенно видит, что задержка была применена не к тому порту, и исправляет конфигурацию.
Вместо часа простоя и головной боли - 10 минут на поиск и исправление ошибки. Команда счастлива, бизнес не теряет деньги, а релиз выходит вовремя.
Тонкости: что нужно знать SRE¶
- Ctrlserver: Начиная с определенных версий,
chaosctlтребует, чтобы в кластере был включенctrlserver. При установке Chaos Mesh через Helm это делается параметромenableCtrlServer=true. - TLS: По умолчанию коммуникация в Chaos Mesh зашифрована (mTLS). Если вы отключаете TLS (не рекомендуется для прода), нужно использовать флаг
-iпри вызовеchaosctl debug. - Поддерживаемые типы: На данный момент
debugотлично работает дляIOChaos,NetworkChaosиStressChaos.
🚀 Коротко о возможностях chaosctl¶
1. Сбор логов компонентов (chaosctl logs)¶
Позволяет быстро получить логи всех компонентов Chaos Mesh (контроллер, daemon, dashboard) одной командой . Это критически важно для диагностики проблем в работе самой платформы хаоса.
# Последние 100 строк логов всех компонентов
chaosctl logs -t 100
2. Детальная отладка экспериментов (chaosctl debug)¶
Это "сердце" инструмента. Оно позволяет получить глубокую информацию о том, что происходит внутри пода во время конкретного хаос-эксперимента . Представьте, что вы запустили NetworkChaos (например, добавили задержку в сеть), но приложение ведет себя не так, как ожидалось. chaosctl позволяет проверить, действительно ли правила были применены на уровне ядра.
# Отладка эксперимента по задержке сети с именем web-show-network-delay
./chaosctl debug networkchaos web-show-network-delay
Что происходит под капотом? В новых версиях chaosctl работает как клиент к специальному API-серверу (ctrlserver), который безопасно собирает данные изнутри подов . Он может показать вам такие детали, как: - Для NetworkChaos: Актуальные правила iptables, настройки tc (traffic control) и ipset на целевом поде. - Для IOChaos: Список монтирований (/proc/mounts) в пространстве имен контейнера. - Для StressChaos: Информацию о cgroups и процессах, нагружающих CPU или память. - и т.д. и т.п.