Chaos Mesh — это один из основных инструментов для хаос-инжиниринга, который позволяет описать и запустить эксперимент на отказоустойчивость системы.

Cloud Native Computing Foundation (CNCF) включили инструмент в свой перечень. Основная идея продукта проста: лучше найти проблемы в контролируемой среде, чем в продакшене, когда клиенты уже страдают.

Хаос-инжиниринг — это методология проведения управляемых стресс-тестирований над системой, с целью заранее изучить (и устранить) нештатное поведение при отказе одного или нескольких компонент.

Chaos Mesh позволяет тестировать:

  • Отказы узлов и подов (в Kubernetes и с физическими машинами)
  • Сетевые проблемы и задержки
  • Проблемы с дисками и файловыми системами
  • Сбои операционной системы
  • Проблемы с JVM приложениями
  • Имитацию сбоев облачных провайдеров (AWS/GCP)

Chaos Mesh интерфейс

Примеры экспериментов

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

  1. Можно собирать эксперименты как через встроенный UI, так и в формате YAML. Сами эксперименты могут быть как линейными (шаг за шагом), так и параллельными (одновременное влияние двух экспериментов)
  2. Можно отслеживать статус эксперимента через UI (особенно полезно для долгоживущих экспериментов)
  3. Формат экспериментов позволяет собрать библиотеку повторяющихся секций и потом через Copy-paste переиспользовать.
  4. Шаг эксперимента - это k8s pod, который можно кастомизировать. Например, в конкретный момент времени отправить API запрос в свою систему.

Польза chaos engineering

1. Проактивное выявление проблем

Вместо того чтобы ждать, когда что-то сломается в продакшене, ты находишь проблемы заранее в контролируемой среде.

2. Снижение времени восстановления

Команда, которая регулярно практикуется в решении инцидентов, быстрее справляется с реальными проблемами.

3. Документирование поведения системы

Эксперименты создают документацию о том, как система ведет себя в различных условиях.

4. Улучшение архитектуры

Обнаружение слабых мест заставляет пересматривать архитектурные решения и делать систему более надежной.

FAQ

Что такое хаос-инжиниринг?

Хаос-инжиниринг — это дисциплина экспериментирования над системой для повышения уверенности в её способности выдерживать турбулентные условия в продакшене. Основная идея в том, чтобы намеренно вызывать сбои в контролируемой среде и наблюдать, как система реагирует.

Какие типы сбоев можно симулировать с помощью Chaos Mesh?

Chaos Mesh поддерживает множество типов экспериментов: отказы подов и узлов, сетевые проблемы (задержки, потеря пакетов), проблемы с дисками, нагрузочное тестирование, сбои JVM приложений и даже имитацию проблем облачных провайдеров.

Можно ли использовать Chaos Mesh без Kubernetes?

Да, Chaos Mesh предлагает Chaosd — инструмент для физических машин. С его помощью можно проводить эксперименты на обычных серверах, не только в Kubernetes кластерах.