Chaos Mesh — это один из основных инструментов для хаос-инжиниринга, который позволяет описать и запустить эксперимент на отказоустойчивость системы.
Cloud Native Computing Foundation (CNCF) включили инструмент в свой перечень. Основная идея продукта проста: лучше найти проблемы в контролируемой среде, чем в продакшене, когда клиенты уже страдают.
Хаос-инжиниринг — это методология проведения управляемых стресс-тестирований над системой, с целью заранее изучить (и устранить) нештатное поведение при отказе одного или нескольких компонент.
Chaos Mesh позволяет тестировать:
- Отказы узлов и подов (в Kubernetes и с физическими машинами)
- Сетевые проблемы и задержки
- Проблемы с дисками и файловыми системами
- Сбои операционной системы
- Проблемы с JVM приложениями
- Имитацию сбоев облачных провайдеров (AWS/GCP)
Примеры экспериментов
Hello world - падение пода
Несвоевременное падение приложения (например, по середине долгого процесса) часто приводит к заметному для пользователя сбою. Хоть это и самое "простое", но при этом показывает множество проблем в системе:
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: service-failure-test
spec:
selector:
labelSelectors:
'app': 'payment-service'
mode: one
action: pod-failure
duration: '60s'
Работа при недостатке CPU
Чем ближе потребление CPU (обычно порог где-то на 75-80%), тем вероятнее проявление нештатного поведения: замедляется процессинг (вплоть до ошибок), снижается пропускная способность. Можно "вручную" довести систему до потребления CPU в 80%:
apiVersion: chaos-mesh.org/v1alpha1
kind: StressChaos
metadata:
name: cpu-stress-test
spec:
selector:
labelSelectors:
'app': 'api-gateway'
mode: one
stressors:
cpu:
workers: 2
load: 80
duration: '5m'
Работа при проблемах в сети
Что будет если база данных "не отвечает" или возникают иные проблемы с доступностью по сети?
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-partition
spec:
selector:
labelSelectors:
'app': 'database'
mode: all
action: partition
partition:
direction: both
mode: 'percent'
value: '50'
duration: '2m'
Начни практиковать хаос-инжиниринг уже сегодня
Хаос-инжиниринг — это не роскошь, а необходимость для современных систем. Chaos Mesh дает тебе все инструменты для того, чтобы сделать твою систему более надежной.
Помни: цель хаос-инжиниринга не в том, чтобы сломать систему, а в том, чтобы найти слабые места до того, как это сделают реальные проблемы.
Если ты хочешь научиться решать инциденты быстрее и эффективнее, попробуй наш тренажер Incidenta. Мы собрали коллекцию реальных сценариев сбоев, которые помогут тебе и твоей команде развить навыки диагностики и решения проблем.
Опыт использования Chaos Mesh
- Можно собирать эксперименты как через встроенный UI, так и в формате YAML. Сами эксперименты могут быть как линейными (шаг за шагом), так и параллельными (одновременное влияние двух экспериментов)
- Можно отслеживать статус эксперимента через UI (особенно полезно для долгоживущих экспериментов)
- Формат экспериментов позволяет собрать библиотеку повторяющихся секций и потом через Copy-paste переиспользовать.
- Шаг эксперимента - это k8s pod, который можно кастомизировать. Например, в конкретный момент времени отправить API запрос в свою систему.
Польза chaos engineering
1. Проактивное выявление проблем
Вместо того чтобы ждать, когда что-то сломается в продакшене, ты находишь проблемы заранее в контролируемой среде.
2. Снижение времени восстановления
Команда, которая регулярно практикуется в решении инцидентов, быстрее справляется с реальными проблемами.
3. Документирование поведения системы
Эксперименты создают документацию о том, как система ведет себя в различных условиях.
4. Улучшение архитектуры
Обнаружение слабых мест заставляет пересматривать архитектурные решения и делать систему более надежной.
FAQ
Что такое хаос-инжиниринг?
Хаос-инжиниринг — это дисциплина экспериментирования над системой для повышения уверенности в её способности выдерживать турбулентные условия в продакшене. Основная идея в том, чтобы намеренно вызывать сбои в контролируемой среде и наблюдать, как система реагирует.
Какие типы сбоев можно симулировать с помощью Chaos Mesh?
Chaos Mesh поддерживает множество типов экспериментов: отказы подов и узлов, сетевые проблемы (задержки, потеря пакетов), проблемы с дисками, нагрузочное тестирование, сбои JVM приложений и даже имитацию проблем облачных провайдеров.
Можно ли использовать Chaos Mesh без Kubernetes?
Да, Chaos Mesh предлагает Chaosd — инструмент для физических машин. С его помощью можно проводить эксперименты на обычных серверах, не только в Kubernetes кластерах.