Рубрики
Uncategorized

K8S Хаос Погружение: Шаос-сетка Часть 1

В этой серии я прохожу несколько различных предложений с открытым исходным кодом для проведения тестирования хаоса /… Помечено Kubernetes, тестирование, учебник, DevOps.

K8S хаос дайв (3 серии части)

В этой серии я прохожу несколько различных предложений с открытым исходным кодом для проведения тестирования/инженерии хаоса в ваших кластерах Kubernetes.

В K8s хаос ныряет: Kube-Monkey Я покрыл Kube-Monkey , простая реализация Netflix Chaos Monkey Для Kubernetes, который позволяет случайным образом убивать стручков.

K8s хаос ныряет: Kube-Monkey

Крейг Мортен ・ 19 августа 20 ・ 10 мин читать

Этот инструмент отлично подходит для того, чтобы выйти из земли с тестированием хаоса в Kubernetes, но имеет пару недостатков:

  1. Он может убить стручки, он не может повлиять на кластер каким -либо другим способом.
  2. Это требует, чтобы вы изменили тестируемую систему (SUT), добавив этикетки. Это добавляет дополнительные накладные расходы перед тестированием для команды инженеров и означает, что вам нужно перераспределить приложения, чтобы включить/отключить тестирование хаоса.

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

Вступление

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

Инструмент работает как два основных развертывания в кластере:

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

Для некоторых экспериментов контроллер-менеджер также использует Прием Webhooks динамически вводить хаос-сидекар Например, в капсулы, чтобы захватить ввод/вывода контейнера приложения.

Сами тесты определяются с использованием манифестов Kubernetes на основе одного из шести Пользовательские определения ресурсов эта сетка хаоса дает:

  1. Подчаос
    • Pod-Kill — Убивание стручков.
    • Pod-Failure — стручки становятся недоступными.
    • контейнер-Kill — Убивание контейнеров стручков.
  2. NetworkChaos
    • Netem Chaos — Создать сетевую задержку, дублирование, убыток или коррупцию.
    • сетевая часть — Моделируйте разделение сети через разделение стручков на несколько независимых подсетей, блокируя связь между ними.
  3. Iochaos — Моделируйте ошибки файловой системы, такие как задержка ввода/вывода или ошибки чтения/записи.
  4. TimeChaos — Включите часы в стручки.
  5. Стресс
    • ЦП-сжигание — Моделируйте напряжение процессора POD.
    • память-бон — Моделируйте напряжение памяти POD.
  6. Kernelchaos — Введите ошибки ядра в стручки.

Чтобы создать и запустить эксперимент, вы создаете манифестный файл Kubernetes и развертываете в кластере. Затем контроллер-менеджер обнаружит новый объект эксперимента и проведет эксперимент с определенным хаосом.

В дополнение к развертыванию экспериментов по хаосу с использованием Kubectl/Helm, Chaos -Mesh также поставляется с собственной панелью, через которую вы можете создавать и контролировать эксперименты — полезны, если вы предпочитаете графический интерфейс!

См. Ниже обзор настройки высокого уровня:

Прохождение

Более подробную информацию о хаосной сетке можно найти на его Репозиторий GitHub и в Документация Анкет

Здесь мы пойдем через настройку первого из трех тестов:

  1. Тест на убийство стручков с использованием панели приборной панели Chaos Mesh — Похоже на тот, который покрыт в K8S Chaos Dive: Kube-Monkey для сравнения.
  2. Стресс -тест процессора с использованием манифестных файлов Kubernetes — описано в K8S Chaos Dive: Chaos-Mesh Часть 2 Анкет
  3. Тест на стресс памяти с использованием файлов Manifest Kubernetes — описано в K8S Chaos Dive: Chaos-Mesh Часть 2 Анкет

Настройка кластера

Я рассмотрел локальную настройку кластера Minikube Kubernetes в предыдущем учебнике, поэтому не будет повторно посещать здесь в полном объеме, пожалуйста, обратитесь к ссылке для получения подробной информации.

Как только вы будете готовы, запустите свой кластер:

minikube start --driver=virtualbox

И на этот раз мы также включим Kubernetes Metrics Server Таким образом, мы можем отслеживать ресурсы POD позже:

minikube addons enable metrics-server

Развертывание целевого приложения

Давайте разместим несколько каплей Hello-World, такие как Nginx Pods для нацеливания в наших экспериментах (но не стесняйтесь использовать свои собственные приложения!). Для этого мы собираемся использовать Хелм — CLI, который обеспечивает управление репозиториями, шаблонами и развертыванием для Kubernetes.

Если вы собственные MacOS, вы можете установить, используя Homebrew , установка для другой ОС ‘доступна на Хелм установка документов Анкет

brew install helm

Теперь мы можем создать новую диаграмму Helm (манифеста на коллекцию шаблонов Kubernetes), которая позвонит nginx :

helm create nginx

Диаграмма по умолчанию, созданная Хелмом в Создать Команда для nginx Изображение, и мы будем использовать эту необоснованную настройку, так как она подходит для нас просто отлично!

Далее мы создаем новое пространство имен для нашего целевого приложения (ы):

kubectl create ns nginx

И, наконец, мы развертываем 10 реплик нашего приложения Nginx, используя Helm, для нашего nginx Пространство имен:

helm upgrade --install nginx ./nginx \
  -n nginx \
  --set replicaCount=10

Мы можем проверить, успешно ли развертывание с использованием Helm и Kubectl:

helm ls -n nginx
kubectl get pod -n nginx

Мы должны увидеть, как наш релиз развернут, и в кластере должно быть 10 стручков.

Развертывание хаосной сетки

Давайте теперь развертываем хаос-сетку. В этом уроке я собираюсь использовать последние прямые из Репозиторий Github Хаос-сетка Используя Helm, но вы также можете установить, используя сценарий установки, предоставленный командой Chaos -Mesh — Проверьте Установка документация Для получения более подробной информации.

Сначала мы клонируем репозиторий:

git clone https://github.com/chaos-mesh/chaos-mesh

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

$ kubectl apply -f ./chaos-mesh/manifests/crd.yaml

customresourcedefinition.apiextensions.k8s.io/iochaos.chaos-mesh.org created
customresourcedefinition.apiextensions.k8s.io/kernelchaos.chaos-mesh.org created
customresourcedefinition.apiextensions.k8s.io/networkchaos.chaos-mesh.org created
customresourcedefinition.apiextensions.k8s.io/podchaos.chaos-mesh.org created
customresourcedefinition.apiextensions.k8s.io/podnetworkchaos.chaos-mesh.org created
customresourcedefinition.apiextensions.k8s.io/stresschaos.chaos-mesh.org created
customresourcedefinition.apiextensions.k8s.io/timechaos.chaos-mesh.org created

Далее мы создаем пространство имен для развертывания сетки хаоса:

kubectl create ns chaos-mesh

И, наконец, установите сетку хаоса в кластер:

helm upgrade --install chaos-mesh ./chaos-mesh/helm/chaos-mesh \
  -n chaos-mesh \
  --set dashboard.create=true

Обратите внимание на -set Флаг, который Let’s Chaos-Mesh знает, что вы хотите использовать новую (экспериментальную) панель панели.

И это все! Мы можем проверить, что наша установка успешно сработала:

$ helm ls -n chaos-mesh

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
chaos-mesh      chaos-mesh      1               2020-08-20 17:02:34.347893 +0100 BST    deployed        chaos-mesh-v0.1.0       v1.0.0    

$ kubectl get pods -n chaos-mesh -l app.kubernetes.io/instance=chaos-mesh

NAME                                      READY   STATUS    RESTARTS   AGE
chaos-controller-manager-fd568948-qzvv2   1/1     Running   0          12s
chaos-daemon-sdkq6                        1/1     Running   0          12s
chaos-dashboard-6d8466f445-2dgk4          1/1     Running   0          12s

Панель панели панели хаоса

Давайте получим приборную панель, которую мы установили в браузере, и проведем исследование! Сначала мы можем заставить Minikube рассказать нам, где он работает, и запустить его:

minikube service chaos-dashboard -n chaos-mesh

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

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

Эксперимент 1: Убивание стручков

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

Сначала мы нажимаем кнопку «Новый эксперимент» на левой стороне.

Это открывает страницу «Создать новый эксперимент». Заполните имя своего эксперимента (например, kill-percentage-nginx-pods ) и выберите nginx Пространство имен.

Существуют также варианты добавления меток и аннотаций в ваш объект эксперимента в хаосе, которые мы оставим пустым в этом уроке, но вы можете найти полезным, если ваша настройка требует либо для аудита, автоматизации, либо для других целей.

Вы также заметите в правой части экрана, есть параметры для загрузки из предыдущих экспериментов, архивов (удаленных экспериментов), а также загрузку из файла YAML. Они могут быть полезны, если вы хотите повторно запустить старый тест или загрузить существующий манифест Kubernetes, чтобы вы могли изменить эксперимент, используя графический интерфейс.

После того, как вы заполнили форму, нажмите кнопку «Далее», чтобы продолжить.

Вторая страница создания эксперимента позволяет установить область применения вашего эксперимента, то есть на какие стручки следует затронуть. Здесь мы установим «Селекторы пространства имен» на nginx (Это уже может быть предварительно заполнено для вас!) и для второго поля «Selectors Selectors» мы выберем app.kubernetes.io/name: nginx Анкет

Эти селекторы гарантируют, что наш эксперимент будет нацелен только на nginx Пространство имен и стручки в этом пространстве имен, которые имеют nginx Имя метка. Для ваших будущих экспериментов вы можете ориентироваться на несколько пространств имен и/или метки для более сложных сценариев.

Для выпадения «режим» выберите Случайный максимальный процент — Это должно привести к появлению нового поля ввода «значение режима», в которое мы введем «100». Эти два поля настроят наш эксперимент, чтобы нацелиться на случайный процент подходящих стручков от 0 до 100%.

Навигация по странице, вы можете заметить, что есть некоторые дополнительные параметры, которые позволяют также выбирать стручки на основе аннотации, а также на фазе, например, Только «бег» или «ожидающие» стручки. Существует также раздел, в котором вы можете вручную исключить подходящие стручки из эксперимента, который мы оставим как есть со всеми выбранными стручками.

Нажмите кнопку «Далее», чтобы перейти на страницу «Target». Здесь мы можем выбрать точный тип эксперимента по хаосу, который мы хотим запустить из шести доступных предложений.

Для этого эксперимента мы будем использовать выбранную опцию по умолчанию «Жизненный цикл POD», и в выпадении мы выберем «Убийство в капсулах» Podchaos действие. Это настроит эксперимент для нацеливания на ранее выбранные стручки для убийства. Нажмите кнопку «Далее».

Последняя страница позволяет нам определить график для нашего эксперимента по убийству стручков. Здесь мы будем набирать @Every 30s в поле «Крона», так что наш эксперимент планирует случайный стручок, убивая каждые 30 секунд. График принимает любой действительный синтаксис Cron, поддерживаемый Robfig/cron Go Библиотека.

Давайте завершим создание эксперимента и нажмите кнопку «Финиш»! Это откроет страницу подтверждения «Все шаги», с которой вы можете либо перейти к предыдущим шагам, сбросить конфигурацию или отправить. Давайте отправим наш эксперимент, нажав кнопку «Отправить» 🎉.

Если мы теперь перейдем на вкладку «Эксперименты» в левой стороне меню, мы увидим наш новый Podchaos эксперимент перечислен.

Нажав на эксперимент, который мы перенесем на страницу сведений, на которой мы можем увидеть конфигурацию ключевого эксперимента, временную шкалу, показывающую эксперимент, и таблицу событий, позволяющая просмотреть подробности о конкретном запланированном событии — в данном случае Анкет

Вверху есть также несколько вариантов приостановки эксперимента и архивирования его (который удалит эксперимент). В разделе «Конфигурация» есть также кнопка «Обновление», которая позволяет изменить эксперимент YAML в модале редактора.

Из временной шкалы мы видим, что наш эксперимент проводится каждые 30 секунд, и мы можем подтвердить это, наблюдая за нашими стручками Nginx в кластере, где мы можем видеть случайный процент стручков, убивают каждые 30 -е годы:

$ kubectl get pods -n nginx -w

NAME                     READY   STATUS    RESTARTS   AGE
nginx-5c96c8f58b-7cstm   1/1     Running   0          100s
nginx-5c96c8f58b-8f9n2   0/1     Running   0          10s
nginx-5c96c8f58b-8htvx   1/1     Running   0          100s
nginx-5c96c8f58b-9vw8v   1/1     Running   0          70s
nginx-5c96c8f58b-cczvx   1/1     Running   0          2m10s
nginx-5c96c8f58b-dnxbz   1/1     Running   0          100s
nginx-5c96c8f58b-p8svr   1/1     Running   0          10s
nginx-5c96c8f58b-plzf6   1/1     Running   0          10s
nginx-5c96c8f58b-ptlsz   1/1     Running   0          100s
nginx-5c96c8f58b-rk4ht   0/1     Running   0          10s

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

Вы все еще можете найти информацию о своем эксперименте, посетив вкладку «Архивы» в левой стороне меню, которая предоставляет вам полный отчет о каждом эксперименте по хаосу.

Уборка

Давайте очистим и удалите все, что мы создали сегодня (пропустите это, если вы переходите на часть 2 этого учебника!).

helm delete chaos-mesh -n chaos-mesh
kubectl delete ns chaos-mesh
kubectl delete crd iochaos.chaos-mesh.org
kubectl delete crd kernelchaos.chaos-mesh.org 
kubectl delete crd networkchaos.chaos-mesh.org
kubectl delete crd podchaos.chaos-mesh.org 
kubectl delete crd podnetworkchaos.chaos-mesh.org
kubectl delete crd stresschaos.chaos-mesh.org
kubectl delete crd timechaos.chaos-mesh.org
helm delete nginx -n nginx
kubectl delete ns nginx
minikube stop
minikube delete

Это все люди для этого урока!

Есть много, чтобы принять, поэтому решили разделить эксперименты на основе процессора и памяти на второе последующее после K8S Chaos Dive: Chaos-Mesh Part 2.

Наслаждайтесь учебником? Есть вопросы или комментарии? Или у вас есть отличный способ провести эксперименты по хаосу в ваших кластерах Kubernetes? Оставьте мне сообщение в разделе ниже или твитнуть мне @Craigmorten !

До следующего раза 💥

K8S хаос дайв (3 серии части)

Оригинал: «https://dev.to/craigmorten/k8s-chaos-dive-2-chaos-mesh-part-1-2i96»