
Operador de Kubernetes para inyectar experimentos de caos en cargas de trabajo nativas de la nube, automatizando las pruebas de resiliencia y el endurecimiento de cargas de trabajo mediante CRDs declarativas.
El operador de caos de Litmus es utilizado por desarrolladores de aplicaciones Kubernetes y SREs para inyectar caos en las aplicaciones y en la infraestructura Kubernetes de forma gestionada. Su objetivo es hacer que el proceso de validación y endurecimiento de las cargas de trabajo de aplicaciones en Kubernetes sea fácil mediante la automatización de la ejecución de experimentos de caos. Un flujo de trabajo de inyección de caos de ejemplo podría ser tan simple como:
Los beneficios proporcionados por el Chaos Operator incluyen:
El Operador de Caos es un Operador de Kubernetes, que no son más que controladores personalizados con acceso directo a la API de Kubernetes que pueden gestionar el ciclo de vida de ciertos recursos o aplicaciones, intentando siempre asegurar que el recurso se encuentre en el "estado deseado". La lógica que garantiza esto se denomina comúnmente función "reconcile".
El Operador de Caos está construido utilizando el popular framework Operator-SDK, que proporciona soporte de arranque para nuevos proyectos de operadores, permitiendo a los equipos centrarse en la lógica de negocio/operativa.
El Operador de Caos de Litmus ayuda a reconciliar el estado del ChaosEngine, un recurso personalizado que contiene la intención de caos especificada por un desarrollador/ingeniero devops sobre un despliegue Kubernetes específico sin estado o con estado. El operador realiza acciones específicas ante el CRUD del ChaosEngine, su recurso principal. El operador también define un recurso secundario (el pod runner del engine), que es creado y gestionado por él para implementar las funciones de reconciliación.
El ChaosEngine es el esquema central que define el flujo de trabajo de caos para una aplicación determinada. Actualmente, define lo siguiente:
El ChaosEngine se referencia como el propietario del recurso secundario (de reconciliación), y la deletePropagation de Kubernetes asegura que estos también se eliminen al borrar el CR del ChaosEngine.
Aquí hay un ejemplo de ChaosEngineSpec como referencia: https://v1-docs.litmuschaos.io/docs/getstarted/#prepare-chaosengine
Los Litmus Chaos Charts se utilizan para instalar "Paquetes de Experimentos de Caos" y se categorizan según la naturaleza de los experimentos (caos general de Kubernetes, caos específico de proveedor/vendedor - como OpenEBS o caos específico de aplicación, por ejemplo NuoDB). Consisten en recursos personalizados que contienen parámetros de caos (prueba) de bajo nivel que el operador consulta para ejecutar los experimentos. Los fields de spec.definition y sus correspondientes values se utilizan para construir el artefacto de ejecución final que ejecuta el experimento de caos (normalmente, el litmusbook, que es un recurso de trabajo de K8s). También define los permisos necesarios para ejecutar el experimento.
Aquí hay un ejemplo de ChaosEngineSpec como referencia:
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
Consulte la documentación de LitmusChaos litmus docs
Puedes contribuir reportando problemas, mejorando la documentación, contribuyendo al framework central y a las herramientas, etc.
Dirígete a la guía de contribución