
クラウドネイティブなワークロードにカオス実験を注入し、宣言的なCRDを通じて耐障害性テストとワークロードの堅牢化を自動化するKubernetesオペレーター。
Litmus chaos operatorは、Kubernetesアプリケーション開発者やSREが、アプリケーションやKubernetesインフラストラクチャに対して管理された方法でカオスを注入するために使用されます。その目的は、カオス実験の実行を自動化することで、Kubernetes上のアプリケーションワークロードの検証と強化のプロセスを容易にすることです。カオス注入ワークフローの例は、次のようにシンプルです:
Chaos Operatorが提供する利点は次のとおりです:
Chaos OperatorはKubernetes Operatorです。Kubernetes Operatorは、Kubernetes APIに直接アクセスできるカスタムコントローラーに過ぎず、特定のリソースやアプリケーションのライフサイクルを管理し、常にリソースが「望ましい状態」にあることを保証しようとします。この保証を実現するロジックは、一般に「リコンサイル」関数と呼ばれます。
Chaos Operatorは、人気のあるOperator-SDKフレームワークを使用して構築されています。このフレームワークは、新しいオペレータープロジェクト向けのブートストラップサポートを提供し、チームがビジネス/運用ロジックに集中できるようにします。
Litmus Chaos Operatorは、ChaosEngineの状態をリコンサイルするのに役立ちます。ChaosEngineは、開発者/DevOpsエンジニアが特定のステートレス/ステートフルなKubernetesデプロイメントに対して指定したカオス意図を保持するカスタムリソースです。オペレーターは、その主要リソースであるChaosEngineのCRUD操作に応じて特定のアクションを実行します。また、オペレーターはセカンダリリソース(エンジンランナーポッド)も定義します。これは、リコンサイル関数を実装するためにオペレーターによって作成・管理されます。
ChaosEngineは、特定のアプリケーションのカオスワークフローを定義する中核となるスキーマです。現在、以下を定義しています:
ChaosEngineは、セカンダリ(リコンサイル)リソースの所有者として参照され、KubernetesのdeletePropagationにより、ChaosEngine CRの削除時にこれらのリソースも削除されることが保証されます。
参考用のサンプルChaosEngineSpecはこちら: https://v1-docs.litmuschaos.io/docs/getstarted/#prepare-chaosengine
Litmus Chaos Chartsは、「カオス実験バンドル」をインストールするために使用され、実験の性質(一般的なKubernetesカオス、ベンダー/プロバイダー固有のカオス(OpenEBSなど)、アプリケーション固有のカオス(NuoDBなど))に基づいて分類されます。これらは、オペレーターが実験を実行するために問い合わせる低レベルのカオス(テスト)パラメーターを保持するカスタムリソースで構成されています。spec.definition._fields_と対応する_values_は、カオス実験を実行する最終的な実行アーティファクト(通常はK8sジョブリソースであるlitmusbook)を構築するために使用されます。また、実験を実行するために必要な権限も定義します。
参考用のサンプル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を参照してください
問題の報告、ドキュメントの改善、コアフレームワークやツールへの貢献などを通じて貢献できます。
コントリビューションガイドをご覧ください