
Оператор Kubernetes для внедрения хаос-экспериментов в cloud-native нагрузки, автоматизации тестирования отказоустойчивости и укрепления рабочих нагрузок с помощью декларативных CRD.
Litmus chaos operator используется разработчиками приложений Kubernetes и SRE-инженерами для внедрения хаоса в приложения и инфраструктуру Kubernetes управляемым образом. Его цель — упростить процесс проверки и укрепления рабочих нагрузок приложений на Kubernetes за счёт автоматизации выполнения хаос-экспериментов. Пример рабочего процесса внедрения хаоса может быть таким:
Преимущества, предоставляемые Chaos Operator, включают:
Chaos Operator — это Kubernetes Operator, которые представляют собой не что иное, как пользовательские контроллеры с прямым доступом к API Kubernetes, способные управлять жизненным циклом определённых ресурсов или приложений, всегда стремясь обеспечить нахождение ресурса в «желаемом состоянии». Логика, которая это обеспечивает, обычно называется функцией «reconcile».
Chaos Operator построен с использованием популярного фреймворка Operator-SDK, который обеспечивает начальную поддержку новых операторных проектов, позволяя командам сосредоточиться на бизнес- и операционной логике.
Litmus Chaos Operator помогает согласовывать состояние ChaosEngine — пользовательского ресурса, который содержит намерение по хаосу, заданное разработчиком/devops-инженером для конкретного stateless/stateful развёртывания Kubernetes. Оператор выполняет определённые действия при CRUD-операциях с ChaosEngine, своим основным ресурсом. Оператор также определяет вторичный ресурс (pod запуска движка), который создаётся и управляется им для реализации функций reconcile.
ChaosEngine — это базовая схема, которая определяет рабочий процесс хаоса для конкретного приложения. В настоящее время она определяет следующее:
ChaosEngine указывается как владелец вторичного (reconcile) ресурса, при этом deletePropagation в Kubernetes гарантирует, что эти ресурсы также будут удалены при удалении CR ChaosEngine.
Вот пример ChaosEngineSpec для справки: https://v1-docs.litmuschaos.io/docs/getstarted/#prepare-chaosengine
Litmus Chaos Charts используются для установки «пакетов хаос-экспериментов» и категоризируются по характеру экспериментов (общий Kubernetes-хаос, вендор-/провайдер-специфичный хаос — например, OpenEBS или специфичный для приложений хаос, скажем, NuoDB). Они состоят из пользовательских ресурсов, содержащих низкоуровневые параметры хаоса (теста), которые запрашиваются оператором для выполнения экспериментов. Поля из spec.definition и соответствующие им значения используются для создания конечного артефакта выполнения, который запускает хаос-эксперимент (обычно это litmusbook, представляющий собой ресурс K8s job). Он также определяет разрешения, необходимые для выполнения эксперимента.
Вот пример ChaosEngineSpec для справки:
apiVersion: litmuschaos.io/v1alpha1
description:
message: |
Deletes a pod belonging to a deployment/statefulset/daemonset
kind: ChaosExperiment
metadata:
name: pod-delete
labels:
name: pod-delete
app.kubernetes.io/part-of: litmus
app.kubernetes.io/component: chaosexperiment
app.kubernetes.io/version: latest
spec:
definition:
scope: Namespaced
permissions:
- apiGroups:
- ""
- "apps"
- "batch"
- "litmuschaos.io"
resources:
- "deployments"
- "jobs"
- "pods"
- "configmaps"
- "chaosengines"
- "chaosexperiments"
- "chaosresults"
verbs:
- "create"
- "list"
- "get"
- "patch"
- "update"
- "delete"
image: "litmuschaos/go-runner:latest"
imagePullPolicy: Always
args:
- -c
- ./experiments -name pod-delete
command:
- /bin/bash
env:
- name: TOTAL_CHAOS_DURATION
value: '15'
# Period to wait before/after injection of chaos in sec
- name: RAMP_TIME
value: ''
- name: FORCE
value: 'true'
- name: CHAOS_INTERVAL
value: '5'
## percentage of total pods to target
- name: PODS_AFFECTED_PERC
value: ''
- name: LIB
value: 'litmus'
- name: TARGET_PODS
value: ''
## it defines the sequence of chaos execution for multiple target pods
## supported values: serial, parallel
- name: SEQUENCE
value: 'parallel'
labels:
name: pod-delete
app.kubernetes.io/part-of: litmus
app.kubernetes.io/component: experiment-job
app.kubernetes.io/version: latest
Обратитесь к документации LitmusChaos: litmus docs
Вы можете внести вклад, создавая issues, улучшая документацию, внося изменения в базовый фреймворк и инструментарий и т.д.
Перейдите к руководству по внесению вклада