Рубрики
Uncategorized

Chaos Engineering 101: Принципы, процесс и примеры

Поскольку в Интернете выросло все более сложные наряду с технологиями, такими как облачные вычисления, распределенные … с меченым докером, Куберанесом, дежоптом.

Поскольку в Интернете выросло все более сложные наряду с технологиями, такими как облачные вычисления, распределенные системы и микросервисы, сбои системы сложнее прогнозировать. Для предотвращения отключений компаний большие и маленькие повернулись к Хаос Инжиниринг как решение.

Chaos Engineering позволяет вам предсказать и определять потенциальные сбои нарушать вещи нарочно . Таким образом, вы можете найти и исправить неудачи, прежде чем они станут отключениями. Chaos Engineering — это растущая тенденция к деформациям и ИТ-командам. Даже компании, как Netflix и Amazon, используют эти принципы в разработке продукта.

Если вы новичок в Chaos Engineering, вы находитесь в нужном месте. Сегодня мы подробно представим его принципы и покажем вам, как начать с Куберанетами.

Мы узнаем:

  • Что такое хаос инжиниринг?
  • Инженерные инструменты Chaos
  • Принципы и процесс инженерии хаоса
  • Хаос Инжиниринг Пример: Kubernetes Применение
  • Что узнать дальше

Узнайте, как продуктивно уничтожить свои системы.

Узнайте принципы проектирования хаоса с Kubernetes с этим глубоким погружением в хаос эксперименты, такие как уничтожение сети, дренажные узлы, наличие тестирования и многое другое.

DEVOPS Toolkit: Kubernetes Chaos Engineering

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

Chaos Engineering — это Дисциплина экспериментов на системе Чтобы построить доверие к возможности системы выдерживать турбулентные условия в производстве. С Chaos Engineering, мы намеренно пытайтесь сломать нашу систему При определенных подсах, чтобы определить потенциальные отключения, найти слабость и улучшить устойчивость.

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

С Engineering Chaos мы пытаемся узнать, как реагирует целая система, когда отдельный компонент не удается.

Например, Chaos Engineering может помочь ответить на вопросы функциональности, как эти:

  • Что происходит, когда служба недоступна, так или иначе?
  • Каков результат отключений, когда приложение получает слишком много трафика или когда он не доступен?
  • Буду ли мы испытать ошибки каскадных ошибок, когда одна точка сбоя сбивает приложение?
  • Что происходит, когда ваше приложение снизится?
  • Что происходит, когда есть что-то не так с сетью?

История: Chaos Engineering была впервые разработана в Netflix в 2008 году, когда их поток подписки был передан в общественное облако. Инженеры Netflix отметили, что им нужны новые способы тестирования этой системы для устойчивости.

Обезьяна Хаоса была создана в 2010 году для этой цели. С тех пор Chaos Engineering выросла, а компании, как Google, Facebook, Amazon и Microsoft, внедрили аналогичные модели тестирования.

Преимущества HAOS Engineering

Chaos Engineering предлагает множество преимуществ, что другие формы тестирования программного обеспечения или тестирования сбоев не могут. Испытания с отказом могут осмотреть только одно условие в двоичном поломке. Это не позволяет нам проверить систему при беспрецедентных или неожиданных стрессах.

Chaos Engineering, с другой стороны, может объяснить Комплексные, разнообразные и реальные проблемы или отключения Отказ С Engineering Chaos мы можем исправить проблемы и получить новые идеи о приложении для будущих улучшений.

Эксперименты Chaos помогают Уменьшить неудачи и отходы, улучшая наше понимание нашего дизайна системы. CHAOS Engineering улучшает доступность и долговечность услуг, поэтому клиенты менее нарушены отключениями. Chaos Engineering также может помочь предотвратить потери доходов и Нижние затраты на обслуживание на уровне бизнеса.

Инженерные инструменты Chaos

Прежде чем мы начнем определение и управлять экспериментами Chaos, нам нужно выбрать инструмент. Chaos Engineering еще не является сегментом рынка, который хорошо установлен и разработан. Тем не менее, есть несколько инструментов, от которых мы можем выбрать.

Один из самых заметных инструментов для Chaos Engineering — Симианская армия Разработано Netflix. Симианская армия лучше всего подходит для услуг в облаке и AWS. Это может генерировать сбои и обнаруживать аномалии. Хаос обезьяна Из Netflix является инструмент устойчивости для случаев случайных сбоев.

Мощный Мощный инструмент для тестирования кластеров Kubernetes и Литм Может использоваться для закладных нагрузок на Кубейнетах. Памба используется с Docker для тестирования хаоса и эмуляции сети. Гремлин Предлагает инженерную платформу CHAOS, которая сейчас поддерживает тестирование на кластерах Kubernetes.

Chaos Dingo обычно используется для Microsoft Azure, а Chaos HTTP Proxy Может использоваться для введения сбоев в HTTP-запросы.

Принципы и процесс инженерии хаоса

Поскольку больше команд провели эксперименты на протяжении многих лет, они научились наиболее эффективно применять инженерные подходы CHAOS к их системам. Эти лучшие практики стали Основные принципы Хаоса Инжиниринг Отказ Давайте обсудим основные принципы проектирования Chaos, что каждая команда должна реализовать в их экспериментах.

Построить гипотезу вокруг устойчивого состояния

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

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

Имитация реальных событий

Вы хотите сделать Chaos Engineering на основе Реальные события Отказ Другими словами, только репликация событий, которые могут произойти в нашей системе. Это включает в себя сбой приложения, нарушение сетевых сбоев будет снижаться или сбой узла.

Проводить эксперименты по производству

Вы хотите запустить эксперименты Chaos в производство . Вы хотите поэкспериментировать в производстве, так как это «реальная» система. Если вы выполняете эксперименты ChaOS только во время промежутки или интеграции, вы не можете получить реальную картину того, как ведет себя систему производства.

Автоматизировать эксперименты и проводить их непрерывно

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

Минимизировать радиус взрыва

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

Краткое изложение принципов

  • Построить гипотезу вокруг устойчивого состояния
  • Имитация реальных событий
  • Проводить эксперименты по производству
  • Автоматизировать эксперименты и проводить их непрерывно
  • Минимизировать радиус взрыва

Процесс инженерии Chaos

Общий процесс для инженерии Chaos выглядит следующим образом:

  • Определите устойчивую гипотезу: Вам нужно начать с идеи того, что может пойти на нее. Начните с неспособности ввести и предсказать результат, когда он работает.
  • Подтвердите устойчивое состояние и смоделируйте некоторые реальные события: Выполните тесты с использованием реальных сценариев, чтобы увидеть, как ваша система ведет себя в соответствии с особыми условиями стресса или обстоятельств.
  • Подтвердите устойчивое состояние снова: Нам нужно подтвердить, какие изменения произошли, поэтому проверка его снова дает нам представление о поведении системы.
  • Соберите метрики и соблюдайте приборные панели: Вам необходимо измерить долговечность и доступность вашей системы. Лучше всего использовать ключевые показатели производительности, которые соотносится с успехом или использованием клиентов. Мы хотим измерить неудачу против нашей гипотезы, глядя на такие факторы, как влияние на задержку или запросы в секунду.
  • Внести изменения и исправить проблемы: После проведения эксперимента вы должны иметь хорошее представление о том, что работает и что нужно изменять. Теперь мы можем определить, что приведет к отключению, и мы точно знаем, что нарушает систему. Итак, посмотрите это и попробуйте снова с новым экспериментом.

Хаос Инжиниринг примера

Теперь давайте применим всю эту теорию к простому реальному примеру, чтобы лучше понять инженеров Хаоса. Мы будем использовать Кубернаны. Для начала мы создаем кластер Kubernetes. Затем мы будем развернуть наше простое приложение и уничтожить его. Затем мы покажем вам, как определить устойчивые государства, которые имеют решающее значение для HAOS Engineering.

Примечание: Если вы новичок в Kubernetes, мы рекомендуем курс Практическое руководство по Кубернетикам Перед продолжением Chaos Engineering. Или вы можете следить за тем, чтобы получить представление о том, как выглядит основной инженерной инженеров Chaos.

Создать кластер Kubernetes

Во-первых, нам нужны кластер Куберовника для уничтожения. Вы можете выбрать Minikube, Docker Desktop, AKS, EKS и GKE. Ниже мы используем Docker Desktop создать кластер. Если вы хотите узнать, как создать кластер, используя другие инструменты, пожалуйста, обратитесь к курсу DEVOPS Toolkit: Kubernetes Chaos Engineering Отказ

# Source: https://gist.github.com/f753c0093a0893a1459da663949df618

####################
# Create A Cluster #
####################

# Open Docker Preferences, select the Kubernetes tab, and select the "Enable Kubernetes" checkbox

# Open Docker Preferences, select the Resources > Advanced tab, set CPUs to 4, and Memory to 6.0 GiB, and press the "Apply & Restart" button

#######################
# Destroy the cluster #
#######################

# Open Docker Troubleshoot, and select the "Reset Kubernetes cluster" button

# Select *Quit Docker Desktop*

От демонстрации Виктора Фарчика в воспитании Chaos Engineering курс

Клон и исследовать репозиторий

Нам нужно развернуть демонстрацию, которую мы подготовили ниже. Мы собираемся клонировать репозиторий VFarcic/Go-Demo-8 Создан Виктором Фарциком.

git clone https://github.com/vfarcic/go-demo-8.git

Далее мы входим в каталог, в котором мы клонировали репозиторий.

cd go-demo-8
git pull

Теперь создайте пространство имен под названием Go-Demo-8 Отказ

kubectl create namespace go-demo-8

Теперь давайте посмотрим на приложение, которое мы собираемся развернуть, расположен в Терминал-стручки каталог, в файле под названием Pod.yaml Отказ

---

apiVersion: v1
kind: Pod
metadata:
  name: go-demo-8
  labels:
    app: go-demo-8
spec:
  containers:
  - name: go-demo-8
    image: vfarcic/go-demo-8:0.0.1
    env:
    - name: DB
      value: go-demo-8-db
    ports:
    - containerPort: 8080
    livenessProbe:
      httpGet:
        path: /
        port: 8080
    readinessProbe:
      httpGet:
        path: /
        port: 8080
    resources:
        limits:
          cpu: 100m
          memory: 50Mi
        requests:
          cpu: 50m
          memory: 20Mi

Это приложение определяется как один POD с одним контейнером, называемым Go-Demo-8 Отказ Он включает в себя другие ресурсы, такие как ЛИЦИВНОЕ ПРОБРАЖА и readishprobe Отказ

Применение определения в кластер

Теперь мы применяем это определение нашему кластеру внутри Go-Demo-8 Пространство имен. Это получит наше приложение и работает как POD.

kubectl --namespace go-demo-8 apply --filename k8s/terminate-pods/pod.yaml

Теперь пришло время применить повреждение и уничтожить нашу приложение!

Установите плагин Toolkit Chaos Toolkit Kubernetes

Чтобы проводить эксперименты на хаос к нашей заявке, мы можем использовать плагин Toolkit Chaos для Kubernetes. Этот инструментарий не Поддержка kubernetes вне коробки. Нам нужен плагин для функций за пределами базовых функций вне коробки. Давайте установим плагин Kubernetes, используя Пип Отказ

pip install -U chaostoolkit-kubernetes

Примечание: Исследуйте плагин Toolkit Chaos, используя Откройте для себя Команда, чтобы увидеть все его функции, варианты и аргументы.

Захватывающие экземпляры приложений

Давайте начнем уничтожать вещи. Посмотрите на первое определение, которое мы будем использовать, расположен в Хаос каталог, в файле Terminate-Pod.yaml Отказ

cat chaos/terminate-pod.yaml

Это дает нам следующий вывод:

version: 1.0.0
title: What happens if we terminate a Pod?
description: If a Pod is terminated, a new one should be created in its places.
tags:
- k8s
- pod
method:
- type: action
  name: terminate-pod
  provider:
    type: python
    module: chaosk8s.pod.actions
    func: terminate_pods
    arguments:
      label_selector: app=go-demo-8
      rand: true
      ns: go-demo-8

Теперь, когда мы видели определение, давайте запустим Термин-Pod.yaml. .

chaos run chaos/terminate-pod.yaml

Выход выглядит следующим образом:

[... INFO] Validating the experiment's syntax
[... INFO] Experiment looks valid
[... INFO] Running experiment: What happens if we terminate a Pod?
[... INFO] No steady state hypothesis defined. That's ok, just exploring.
[... INFO] Action: terminate-pod
[... INFO] No steady state hypothesis defined. That's ok, just exploring.
[... INFO] Let's rollback...
[... INFO] No declared rollbacks, let's move on.
[... INFO] Experiment ended with status: completed

После первоначальной проверки он пробежал эксперимент под названием Что произойдет, если мы прекратим POD? и обнаружил, что есть не определена устойчивая государственная гипотеза . Судя по выходу, есть одно действие Термин-стручок Отказ

Далее он вернулся к Устойчивая государственная гипотеза и решил, что нет ничего. Тогда он пробовал откат , И он узнал, что это не могло. Все, что мы сделали до сих пор, выполняют действие для прекращения стручка. Мы можем увидеть результат в последней строке: Эксперимент, закончившийся со статусом: полный Отказ

Теперь давайте выводим выходной код предыдущей команды. Если мы получим 0 Это означает успех в Linux. Эти выходные коды говорят системе, будь то неудача или успех!

Теперь давайте посмотрим на стручки в нашем пространстве имен.

kubectl --namespace go-demo-8 get pods

Вывод гласит, что Нет ресурсов были найден в пространстве имен Go-Demo-8 . Мы развернули одиночный POD и провели эксперимент, который его уничтожил. Мы не делали никаких валейций. Мы выполнили одно действие для прекращения стручка, который был успешным.

Определение устойчивых состояний

Выше все, что мы сделали, было уничтожить стручок. Однако цель Chaos Engineering — найти слабые точки в наших кластерах. Итак, мы обычно начинаем Определение устойчивого состояния что мы тестируем до и после эксперимента.

Если состояние одинаково до и после, мы можем сделать вывод, что наш кластер не является толерантным для этого случая. В случае Toolkit Chaos мы выполняем это, определив Устойчивая государственная гипотеза Отказ

Мы собираемся посмотреть на определение, которое определяет состояние, которое будет подтверждено до и после действия.

cat chaos/terminate-pod-ssh.yaml

Выход даст нам:

> steady-state-hypothesis:
>   title: Pod exists
>   probes:
>   - name: pod-exists
>     type: probe
>     tolerance: 1
>     provider:
>       type: python
>       func: count_pods
>       module: chaosk8s.pod.probes
>       arguments:
>         label_selector: app=go-demo-8
>         ns: go-demo-8

Новый раздел Устойчивая гипотеза Отказ Теперь мы можем запустить правильный эксперимент Chaos для проверки нашего устойчивого состояния.

Бег хаос эксперимент и проверка вывода

Давайте запустим эксперимент Chaos, чтобы увидеть правильный результат.

chaos run chaos/terminate-pod-ssh.yaml

Мы получаем следующее:

[... INFO] Validating the experiment's syntax
[... INFO] Experiment looks valid
[... INFO] Running experiment: What happens if we terminate a Pod?
[... INFO] Steady state hypothesis: Pod exists
[... INFO] Probe: pod-exists
[... CRITICAL] Steady state probe 'pod-exists' is not in the given tolerance so failing this experiment
[... INFO] Let's rollback...
[... INFO] No declared rollbacks, let's move on.
[... INFO] Experiment ended with status: failed

Здесь есть критическая проблема: Устойчивый государственный зонд «POD-существует» не в данной толерантности Отказ Зонд не удался, прежде чем мы выполнили действия, потому что мы уничтожили POD. Таким образом, наш эксперимент не удался и подтвердил, что исходное состояние не совпадает с тем, что мы хотим.

Итак, давайте применим Terminate-Pods/Pod.yaml Определение, чтобы воссоздать стручок. Тогда мы можем увидеть, что происходит, когда мы повторно проводим эксперимент с Устойчивая гипотеза Отказ

kubectl --namespace go-demo-8 apply --filename k8s/terminate-pods/pod.yaml

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

С нашим стручком назад и может повторно провести эксперимент.

chaos run chaos/terminate-pod-ssh.yaml

Выход выглядит следующим образом:

[... INFO] Validating the experiment's syntax
[... INFO] Experiment looks valid
[... INFO] Running experiment: What happens if we terminate a Pod?
[... INFO] Steady state hypothesis: Pod exists
[... INFO] Probe: pod-exists
[... INFO] Steady state hypothesis is met!
[... INFO] Action: terminate-pod
[... INFO] Steady state hypothesis: Pod exists
[... INFO] Probe: pod-exists
[... INFO] Steady state hypothesis is met!
[... INFO] Let's rollback...
[... INFO] No declared rollbacks, let's move on.
[... INFO] Experiment ended with status: completed

Nowe, мы видим, что зонд POD-существует подтвердил правильное состояние и действие Термин-стручок был казнен. Мы также можем увидеть, что устойчивое состояние было переоценено. POD существовала до действия, и СООД существовал после действия. Но вау может ли стручок существовать, если мы уничтожили его?

Добавление паузы

Эксперимент не потерпел неудачу, потому что наши зонды и действия были выполнено сразу после одного друга Отказ Kubernetes не было достаточно времени, чтобы полностью удалить стручок. Итак, нам нужно добавить паузу, чтобы сделать эксперимент более полезным. Давайте посмотрим на яхл.

cat chaos/terminate-pod-pause.yaml

Это дает нам следующий вывод:

>   pauses: 
>     after: 10

Мы видим здесь, что мы добавили паузы раздел после Действие Это прекращает стручок. Теперь, когда мы выполняем действие для завершения POD, система будет ждать 10 секунд до подтверждения нашего состояния.

Запустите эксперимент с паузой

Посмотрим, что мы получаем, если мы выполним этот эксперимент с нашей паузой.

chaos run chaos/terminate-pod-pause.yaml

Это дает нам следующий вывод:

[... INFO] Validating the experiment's syntax
[... INFO] Experiment looks valid
[... INFO] Running experiment: What happens if we terminate a Pod?
[... INFO] Steady state hypothesis: Pod exists
[... INFO] Probe: pod-exists
[... INFO] Steady state hypothesis is met!
[... INFO] Action: terminate-pod
[... INFO] Pausing after activity for 10s...
[... INFO] Steady state hypothesis: Pod exists
[... INFO] Probe: pod-exists
[... CRITICAL] Steady state probe 'pod-exists' is not in the given tolerance so failing this experiment
[... INFO] Let's rollback...
[... INFO] No declared rollbacks, let's move on.
[... INFO] Experiment ended with status: deviated
[... INFO] The steady-state has deviated, a weakness may have been discovered

На этот раз зонд не удался и сказал, что Устойчивый государственный зонд «POD-существует» не в данной терпимости, поэтому не в состоянии этого эксперимента . Теперь мы дали Kubernetes достаточно времени, чтобы удалить стручок, а затем мы подтвердили, если POD все еще там.

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

Что узнать дальше

Потрясающий! Мы эффективно уничтожили наше приложение, используя устойчивое состояние и узнали основы хаоса. Далее мы хотели бы исправить ошибки, которые мы создали, чтобы сделать его неисправным.

Оттуда мы можем сделать все виды разрушения и тестирования на наше приложение, такие как:

  • Зодящие фазы и условия
  • Экспериментируя с доступностью
  • Сливные узлы
  • Выполнение случайных хаос
  • и более

Чтобы узнать, как реализовать больше экспериментов Chaos, курс обучения DEVOPS Toolkit: Kubernetes Chaos Engineering самый лучший следующий шаг. Вы будете введены в различные типы экспериментов, которые вы можете запустить в Хаосе Инжиниринг. К концу курса вы узнаете, как запустить эксперименты в кластере Кубератеса. К концу вы будете уверенно инженер Chaos.

Счастливое обучение!

Продолжайте читать о Кубернетах и дежопах

Оригинал: «https://dev.to/educative/chaos-engineering-101-principles-process-and-examples-3dmi»