Chaos Engineering — это способ проверить надежность системы производственного программного обеспечения, имитируя необычные или разрушительные условия. Однако для многих людей переход от изучения Хаос Инжиниринг к практическим занятиям на собственных системах является пугающим. Это звучит как одна из тех больших идей, которые требуют полностью оснащенной команды, чтобы планировать заранее. Ну, это не должно быть. Чтобы начать экспериментировать с хаосом, вы можете быть всего лишь одной подходящей платформой.
Chaos Mesh является простой в использовании облачной платформой Chaos Engineering с открытым исходным кодом, которая управляет хаосом в среде Kubernetes. Этот 10-минутный учебник поможет вам быстро начать работу с Chaos Engineering и провести свой первый эксперимент с Chaos Mesh.
Предварительный просмотр нашего маленького эксперимента
Эксперименты хаоса подобны экспериментам, которые мы проводим на уроках науки. Идеально стимулировать турбулентные ситуации в контролируемой среде. В нашем случае мы будем моделировать сетевой хаос в небольшом веб-приложении, которое называется веб-шоу . Чтобы визуализировать эффект хаоса, веб-шоу регистрирует задержку от своего модуля до модуля контроллера Kube (в пространстве имен kube-system
) каждые 10 секунд.
Следующий клип показывает процесс установки Chaos Mesh, развертывания веб-шоу и создания эксперимента хаоса с помощью нескольких команд:
Теперь твоя очередь! Пришло время пачкать руки.
Давайте начнем!
Для нашего простого эксперимента мы используем Kubernetes в Docker ( Kind ) для разработки Kubernetes. Вы можете свободно использовать Minikube или любые существующие кластеры Kubernetes, чтобы следовать за ними.
Подготовить окружающую среду
Прежде чем двигаться вперед, убедитесь, что на вашем локальном компьютере установлены Git и Docker , а Docker запущен и работает. Для macOS рекомендуется выделить как минимум 6 ядер ЦП для Docker. Для получения дополнительной информации см. Конфигурация Docker для Mac .
Получите Chaos Mesh:
git clone https://github.com/pingcap/chaos-mesh.git cd
chaos-mesh/
Установите Chaos Mesh с помощью install.sh
скрипта:
./install.sh --local kind
install.sh
Это автоматический сценарий оболочки, который проверяет вашу среду, устанавливает Kind, локально запускает кластеры Kubernetes и развертывает Chaos Mesh. Чтобы увидеть подробное описание install.sh
, вы можете включить --help
опцию.
Примечание.
Если ваш локальный компьютер не может извлекать изображения из docker.io
или gcr.io
, используйте локальное зеркало gcr.io и выполните команду
./install.sh --local kind --docker-mirror
вместо.
Установите системную переменную среды:
source ~/.bash_profile
Примечание:
-
В зависимости от вашей сети эти шаги могут занять несколько минут.
-
Если вы видите сообщение об ошибке, подобное этому:
Простой текст
xxxxxxxxxx
1
1
ERROR: failed to create cluster: failed to generate kubeadm config content: failed to get kubernetes version from node: failed to get file: command "docker exec --privileged kind-control-plane cat /kind/version" failed with error: exit status 1
Увеличьте доступные ресурсы для Docker на локальном компьютере и выполните следующую команду:
./install.sh --local kind --force-local-kube
Когда процесс завершится, вы увидите сообщение о том, что Chaos Mesh успешно установлена.
Разверните приложение
Следующим шагом является развертывание приложения для тестирования. В нашем случае мы выбираем веб-шоу, потому что оно позволяет нам непосредственно наблюдать эффект сетевого хаоса. Вы также можете развернуть собственное приложение для тестирования.
Разверните веб-шоу с помощью deploy.sh
скрипта:
Простой текст
xxxxxxxxxx
1
# Make sure you are in the Chaos Mesh directory
2
cd examples/web-show &&
3
./deploy.sh
Примечание.
Если ваш локальный компьютер не может извлекать изображения docker.io
, используйте local gcr.io
зеркало и выполните его ./deploy.sh --docker-mirror
.
Доступ к приложению веб-шоу. Из вашего веб-браузера перейдите на http://localhost:8081
.
Создайте эксперимент Хаоса
Теперь, когда все готово, пришло время провести эксперимент с хаосом!
Chaos Mesh использует CustomResourceDefinitions (CRD) для определения экспериментов хаоса. Объекты CRD разрабатываются отдельно на основе различных сценариев эксперимента, что значительно упрощает определение объектов CRD. В настоящее время к объектам CRD, реализованным в Chaos Mesh, относятся PodChaos, NetworkChaos, IOChaos, TimeChaos и KernelChaos. Позже мы будем поддерживать больше типов ошибок.
В этом эксперименте мы используем NetworkChaos для эксперимента хаоса. Файл конфигурации NetworkChaos, написанный на YAML, показан ниже:
YAML
xxxxxxxxxx
1
apiVersion pingcap.com/v1alpha1
2
kind NetworkChaos
3
metadata
4
name network-delay-example
5
spec
6
action delay
7
mode one
8
selector
9
namespaces
10
default
11
labelSelectors
12
"app""web-show"
13
delay
14
latency"10ms"
15
correlation"100"
16
jitter"0ms"
17
duration"30s"
18
scheduler
19
cron"@every 60s"
Подробное описание действий NetworkChaos см. В вики Chaos Mesh . Здесь мы просто перефразируем конфигурацию как:
- Цель:
web-show
- Миссия: вводить
10ms
сетевую задержку каждый60s
- Продолжительность атаки:
30s
каждый раз
Чтобы запустить NetworkChaos, сделайте следующее:
Выполнить network-delay.yaml
:
YAML
xxxxxxxxxx
1
# Make sure you are in the chaos-mesh/examples/web-show directory
2
kubectl apply -f network-delay.yaml
Доступ к приложению веб-шоу.
В вашем веб-браузере перейдите на http://localhost:8081
.
По линейному графику вы можете сказать, что сетевая задержка составляет 10 мс каждые 60 секунд.
Поздравляем! Вы просто всколыхнули немного хаоса. Если вы заинтригованы и хотите попробовать больше экспериментов хаоса с Chaos Mesh, посмотрите примеры / веб-шоу .
Удалить эксперимент Хаоса
Как только вы закончите тестирование, прекратите эксперимент с хаосом.
Удалить network-delay.yaml
:
YAML
xxxxxxxxxx
1
# Make sure you are in the chaos-mesh/examples/web-show directory
2
kubectl delete -f network-delay.yaml
Доступ к приложению веб-шоу.
Из вашего веб-браузера перейдите на http://localhost:8081
.
На линейном графике видно, что уровень задержки в сети вернулся к норме.
Удалить Kubernetes Clusters
После завершения эксперимента с хаосом выполните следующую команду, чтобы удалить кластеры Kubernetes:
Джава
xxxxxxxxxx
1
kind delete cluster --name=kind
Примечание.
При возникновении kind: command not found
ошибки source ~/.bash_profile
сначала выполните команду, а затем удалите кластеры Kubernetes.
Прохладно! Что дальше?
Поздравляем с первым успешным путешествием в Chaos Engineering. Каково это? Хаос Инжиниринг — это просто, правда? Но, возможно, Chaos Mesh не так прост в использовании. Работа в командной строке неудобна, запись файлов YAML вручную немного утомительна, или проверка результатов эксперимента несколько неуклюжа?
Не волнуйтесь, Chaos Dashboard уже в пути! Проведение экспериментов с хаосом в сети действительно звучит захватывающе! Если вы хотите помочь нам разработать стандарты тестирования для облачных платформ или сделать Chaos Mesh лучше, мы будем рады услышать ваше мнение!
Если вы обнаружите ошибку или считаете, что чего-то не хватает, не стесняйтесь подать проблему, открыть запрос на включение (PR) или присоединиться к нам по каналу # sig-chaos-mesh в рабочей области TiDB Community slack .