
Operatore Kubernetes per iniettare esperimenti di chaos nei carichi di lavoro cloud-native, automatizzando i test di resilienza e l'hardening dei carichi di lavoro tramite CRD dichiarative.
Il Litmus chaos operator è utilizzato dagli sviluppatori di applicazioni Kubernetes e dagli SRE per iniettare chaos nelle applicazioni e nell'infrastruttura Kubernetes in modo controllato. Il suo obiettivo è rendere semplice il processo di validazione e hardening dei carichi di lavoro applicativi su Kubernetes automatizzando l'esecuzione di esperimenti di chaos. Un esempio di flusso di lavoro per l'iniezione di chaos potrebbe essere semplice come:
I vantaggi offerti dal Chaos Operator includono:
Il Chaos Operator è un Kubernetes Operator, che non sono altro che controller personalizzati con accesso diretto all'API di Kubernetes in grado di gestire il ciclo di vita di determinate risorse o applicazioni, cercando sempre di garantire che la risorsa sia nello "stato desiderato". La logica che garantisce questo viene comunemente chiamata funzione "reconcile".
Il Chaos Operator è costruito utilizzando il popolare framework Operator-SDK, che fornisce supporto di bootstrap per nuovi progetti operator, consentendo ai team di concentrarsi sulla logica di business/operativa.
Il Litmus Chaos Operator aiuta a riconciliare lo stato del ChaosEngine, una risorsa personalizzata che contiene l'intento di chaos specificato da uno sviluppatore/ingegnere devops nei confronti di un particolare deployment Kubernetes stateless/stateful. L'operator esegue azioni specifiche in seguito alle operazioni CRUD sul ChaosEngine, la sua risorsa primaria. L'operator definisce anche una risorsa secondaria (il pod engine runner), che viene creato e gestito da esso per implementare le funzioni di reconcile.
Il ChaosEngine è lo schema principale che definisce il flusso di lavoro di chaos per una data applicazione. Attualmente, definisce quanto segue:
Il ChaosEngine è indicato come proprietario della risorsa secondaria (di reconcile) con la deletePropagation di Kubernetes che garantisce che anche queste vengano rimosse all'eliminazione della CR ChaosEngine.
Ecco un esempio di ChaosEngineSpec per riferimento: https://v1-docs.litmuschaos.io/docs/getstarted/#prepare-chaosengine
I Litmus Chaos Charts vengono utilizzati per installare "Chaos Experiment Bundles" e sono categorizzati in base alla natura degli esperimenti (chaos Kubernetes generale, chaos specifico del fornitore/produttore - come OpenEBS o chaos specifico dell'applicazione, ad esempio NuoDB). Sono costituiti da risorse personalizzate che contengono parametri di chaos(test) di basso livello interrogati dall'operator per eseguire gli esperimenti. I fields di spec.definition e i corrispondenti values vengono utilizzati per costruire l'artefatto di esecuzione finale che esegue l'esperimento di chaos (tipicamente, il litmusbook, che è una risorsa job K8s). Definisce inoltre i permessi necessari per eseguire l'esperimento.
Ecco un esempio di ChaosEngineSpec per riferimento:
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
Consulta la documentazione LitmusChaos litmus docs
Puoi contribuire segnalando problemi, migliorando la documentazione, contribuendo al framework principale e agli strumenti, ecc.
Vai alla Guida ai contributi