Chaos Mesh обещает навести порядок в хаос-инженерии
Хаос и инженерия — два слова, которые вы никогда не встречали вместе до 2010 года. Возможно, потому, что инженерия обычно считается созидательной, а хаос — совсем наоборот. При этом, когда вы впервые читаете о Chaos Monkey от Netflix, оригинальном инструменте хаос-инженерии, заманчиво представить себе обезьяну, выдергивающую провода и бьющую по системам гаечным ключом наугад. Наоборот, хаос-инжиниринг — это дисциплинированный подход к поиску ошибок до того, как они перерастут в сбои. Это делается путем упреждающего тестирования отказов или контролируемого внедрения отказов, чтобы можно было измерить и улучшить способность системы реагировать. Эти сбои могут быть чем угодно: от введения задержки до сетевых сбоев и высокой загрузки ЦП и памяти. Вы даже можете имитировать DDoS-атаку (распределенный отказ в обслуживании) или любое другое событие, которое может привести к нарушению работы ваших служб. Цитируя Сета Элиота из AWS: «Вы не можете считать свою рабочую нагрузку устойчивой, пока не сделаете гипотезу о том, как ваша рабочая нагрузка будет реагировать на сбои». И это приводит нас к Chaos Mesh.
Создан для хаоса
Chaos Mesh 1.0 стала общедоступной ранее в этом месяце и представляет собой облачное решение для создания хаоса с открытым исходным кодом, размещенное на CNCF, которое организует внедрение ошибок для сложных систем в Kubernetes. Chaos Mesh был разработан в PingCAP для тестирования их системы баз данных с открытым исходным кодом TiDB. Это второй проект PingCAP, размещенный на CNCF, после TiKV, механизма распределенного хранилища ключей и значений. Технический директор PingCAP Эд Хуанг заявил, что «традиционного детерминированного тестирования» недостаточно для обеспечения устойчивости распределенных систем на Kubernetes.
Chaos Mesh, созданный специально для Kubernetes, охватывает эксперименты с хаосом во всем: от модулей до сетей, файловых систем и даже самого ядра. Chaos Mesh стремится стать «универсальной» и нейтральной платформой для тестирования хаоса, простой в использовании, а также масштабируемой до петабайтного уровня. Будучи родным для Kube, он не требует специальных зависимостей или модификаций и может быть развернут непосредственно на кластерах. Еще одним преимуществом является то, что он хорошо интегрируется с другими средами тестирования и может даже проводить эксперименты с хаосом в производственных средах.
Тестирование хаоса
В отличие от прошлого, когда работа серверов была показателем того, что все идет так, как должно быть, сегодня речь идет о функциональности и взаимодействии с пользователем. Подобно тому, как Netflix проверяет свой пульс, подсчитывая количество нажатий кнопки воспроизведения, Chaos Mesh работает, имитируя время простоя модуля с помощью TiKV, а затем анализируя, как это влияет на QPS (запросов в секунду). Если рассматриваемая кнопка не выполняет то, что должна, пользователи будут продолжать нажимать ее, что приведет к увеличению числа запросов в секунду и укажет на то, что что-то работает неправильно.
В таком случае, когда сбой модуля вызывает колебания QPS, а затем возвращается к приемлемым уровням в течение минуты, вы знаете, что ваша система устойчива, и вы можете перейти к следующему тесту. Однако в случае, когда восстановление нормального состояния занимает до девяти минут, как в этом примере, требуется дальнейшее расследование. Chaos Mesh предлагает два типа внедрения ошибок на уровне модуля, а именно: уничтожение модуля и сбой модуля. В то время как последний имитирует недоступность модуля, первый, как следует из названия, имитирует уничтожение модуля, вы также можете создавать собственные ошибки на уровне модуля, такие как PodNetworkChaos или PodIOChaos.
Категории хаоса
Теперь имейте в виду, что разбитый модуль — это только один пример внедрения ошибок, на который способна Chaos Mesh. Существует шесть типов хаоса: PodChaos, NetworkChaos, TimeChaos, StressChaos, IOChaos и KernelChaos. Что касается сетевых ошибок, в частности, у вас гораздо больше возможностей, чем у других типов хаоса. Есть сетевая задержка, сетевое повреждение, сетевая потеря, сетевое дублирование и сетевой раздел, все из которых влияют на сеть, как следует из их названий. Для хаоса файловой системы у вас есть только два, задержка ввода-вывода и ошибка ввода-вывода, которые имитируют задержки ввода-вывода файловой системы и ошибки соответственно.
Другие крупные эксперименты с хаосом включают в себя уничтожение контейнера, важное, потому что оно позволяет уничтожить конкретный контейнер в поде, прожигание ЦП, которое нагружает ЦП выбранного пода, и прожигание памяти, которое нагружает его память. TimeChaos также важен, особенно в распределенной среде, где очень важно поддерживать синхронизированные часы на всех узлах, чтобы соответствовать требованиям и обеспечивать безопасность. TimeChaos вводит ошибку, называемую «перекосом часов», которая в основном вводит разницу во времени между часами на разных узлах, чтобы увидеть, как реагируют ваши системы.
Индивидуальный хаос
Теперь CustomResourceDefinition или CRD — это мощная функция Kubernetes, которая в основном расширяет API Kubernetes, позволяя вам определять пользовательские ресурсы. Chaos Mesh использует эту возможность Kubernetes для определения пользовательских объектов хаоса, таких как 6 типов хаоса, о которых мы упоминали ранее. Chaos Mesh также использует существующие реализации CRD, где это применимо, и позволяет вам использовать существующие CRD для создания новых объектов, с которыми можно начинать эксперименты с хаосом. Можно создавать новые объекты или обновлять существующие CRD с помощью файла YAML или API Kubernetes.
Метод YAML является здесь предпочтительным методом, тем более что он может проводить эксперименты с хаосом после развертывания. Чтобы создать свой собственный эксперимент с хаосом, вам нужно создать собственный файл конфигурации YAML, хотя примеры в Интернете довольно легко найти. Кроме того, CRD можно манипулировать напрямую через Kubernetes API. Тот факт, что Chaos Mesh определяет объекты хаоса с помощью CRD, делает его естественным для Kubernetes для приложений на основе Kubernetes. Это также значительно упрощает установку, поскольку это так же просто, как применить набор CRD к кластеру.
Компоненты Chaos Mesh
На данный момент Chaos Mesh состоит из двух основных компонентов: Chaos Operator, который выполняет оркестровку (GA и полностью с открытым исходным кодом), и Chaos Dashboard, по сути, представляющий собой веб-интерфейс для создания, управления и мониторинга экспериментов с хаосом ( в разработке). Оператор Chaos также называется контроллером-менеджером и использует объектные контроллеры для управления CRD, а также контроллеры веб-перехватчиков доступа для вставки дополнительных прокси-серверов в контейнеры. В Chaos Operator также есть Chaos Daemon, работающий как агент, запускающий модуль на каждом узле.
Chaos Daemon здесь — это набор демонов, работающий с привилегированными разрешениями для определенного узла. Контроллер-менеджер передает необходимые действия набору демонов, который, в свою очередь, использует свои привилегии для манипулирования системой, чтобы воздействовать на целевые модули по мере необходимости. Admission Webhooks появляется в кадре, когда мы пытаемся имитировать более серьезные сбои типа ввода-вывода, которые достигаются за счет внедрения хаотических сайдкаров в поды во время развертывания приложения и, по сути, перехвата ввода-вывода путем перехвата вызовов файловой системы. В зависимости от того, как приведенный выше сценарий влияет на QPS, можно внести необходимые изменения, чтобы избежать простоев, вызванных похожими ситуациями.
Конкурс Chaos Mesh
Chaos Mesh ни в коем случае не является единственным вариантом для платформы хаос-инженерии, и еще один конкурент, размещенный на CNCF, который отмечает множество одинаковых флажков, называется Litmus или LitmusChaos. Мы говорим это потому, что, как и Chaos Mesh, Litmus является продуктом с открытым исходным кодом, облачным, использует CRD для управления хаосом и создан для Kubernetes. Другие популярные варианты включают оригинальный инструмент для создания хаоса Chaos Monkey, Gremlin, который предлагает создание хаоса как услугу, Chaos Toolkit и KubeInvader.
Преодоление хаоса с помощью хаос-инжиниринга
Хотя хаос-инжиниринг может звучать как новомодный оксюморон, а сломать что-то в продакшене — просто безумие, «продуктивное» сломать что-то быстро становится стандартом для тестирования устойчивости в Kubernetes.