#chaos #litmus #kubernetes
## What is Litmus?
[Litmus 101 - Chaos Engineering Framework - Qiita](https://qiita.com/iaoiui/items/00369f232a23d2e30b2c) 11/2020 Kubecon NA 20
## API
[Litmus API Documentation | API Reference](https://litmuschaos.github.io/litmus/api.html)
Litmus Portalは、カオスワークフローの管理、監視、イベントのためのコンソールとUIを提供します。カオスワークフローは、アプリケーションやKubernetesプラットフォームに何らかの障害を導入するという目的を達成するために実行される一連の実験で構成されています。
- Experimentsは Name, CSV, Descプロパティを取得できるようなので、CSVにほしいデータが入っているかも。
## Monitoring
[Monitoring · Litmus Docs](https://docs.litmuschaos.io/docs/next/monitoring/)
> LitmusChaosは、リトマスのイベントルータを使ったイベントのリアルタイムモニタリングや、ネイティブのカオスエクスポータを使ったメトリクスのモニタリングを可能にします。これらのイベントやメトリクスは、任意のTSDB(時系列データベース)にエクスポートすることができ、アプリケーションのパフォーマンスグラフの上に重ねて表示したり、カオステストの統計情報を追加で可視化したりすることができます。リトマスのカオスイベントとメトリクスをサポートするための監視インフラを設定するために、サービスエンドポイントとサービスモニターのセットアップ、およびカオスイベントとカオス実験の統計のためのゲージをオーバーレイしたGrafanaダッシュボードを事前に設定しています。アプリケーションダッシュボードのインターリーブは、リトマスのメトリクスとイベント用に設定されたTSDBデータソースを使用することで実現できます。
## Litmus 2.0 beta
[Litmus Introduction | Litmus Docs](https://litmusdocs-beta.netlify.app/docs/introduction/)
[[Litmus 2.0 Betaインストール]]
[[Litmus 2.0 ワークフロー作成]]
What is a Chaos Workflow?
カオスワークフローは、単純なカオス実験以上のものです。期待される結果を定義し、結果を観察し、システム全体の挙動を分析し、レジリエンスを向上させるためにシステムをチューニングする必要があるかどうかの意思決定プロセスにおいてユーザーをサポートします。LitmusChaosは、一般的な開発チームや運用チームがカオスワークフローを開発、使用、管理するために必要なインフラを提供します。Litmusのチーム機能とGitOps機能は、チームやソフトウェア組織内でのカオスワークフロー管理の共同作業に大いに役立ちます。
![[Pasted image 20210609170330.png|300]]
### Architecture
![[Pasted image 20210609170402.png|600]]
1. Portal: Cross Cloud Chaos Control plane (Web UI)として動作する。Agents上のChaosワークフローをオーケストレートして、観測する。
2. Agents: k8s clusterコンポーネント上のchaosワークフローを使用してChaosを誘発するコンポーネント。
#### Portal Components
- Litsmus WebUI: ユーザインターフェイス。
- Litmus Server: APIリクエストをハンドルし、コンフィグと詳細結果をDBに保存する。
- Litmus DB: カオスワークフローとその結果のためのconfig store。
#### Agent Components
- Chaos Operator
- litmus namespaceで動作する。
- CRDs
- chapsexperiments, chaosengines, chaosresults
- Chaos Experiment
- YAML files on Chaos Hub
- Chaos Engine
- Chaos Results
- ChaosResultリソースは、名前空間のスコープを持つChaosExperimentの結果を保持します。これは、実験自体によってランタイムに作成または更新されます。ChaosEngine リファレンス,Experiment State,Experiment の Verdict(完了時),顕著なアプリケーション/結果属性などの重要な情報を保持しています.メトリクス収集のためのソースでもあります。これは、実験の実行状況に応じて更新/パッチされます。これは、拡張された参照を可能にするために、デフォルトのクリーンアップ手順の一部として削除されません。
- Chaos Probes
- ChaosEngine内で定義できるカオス実験用のプラグイン式チェックです。実験ポッドは、定義されたモードに基づいてこれらのチェックを実行し、その成功を実験の評決を決定するための必要条件として考慮します(標準的な「内蔵」チェックと一緒に)。
- Chaos Exporter
- オプションとして、メトリクスをPrometheusデータベースにエクスポートすることができます。Chaos-Exporterは、Prometheusのメトリクス・エンドポイントを実装しています。
- Subscriber
- SubscriberはAgent側で使用されるコンポーネントで、Chaosのワークフローの詳細を取得し、結果を返信するためにLitmus Serverコンポーネントと相互作用します。
## Litmus Portal
[Litmus Portal · Litmus Docs](https://docs.litmuschaos.io/docs/portal/)
> リトマスポータルは、カオスワークフローの作成、スケジューリング、モニタリングを行うための一元化されたWebポータルです。リトマスポータルは、以下のような複数の機能を提供することで、ユーザーのカオスエンジニアリング体験を簡素化します。1.13.5リリース時点ではbeta-6フェーズであり、活発な開発が行われています。
>
> - ポータルに「ターゲット」として接続されたKubernetesクラスター全体でのカオスの起動と管理機能
- 実験を共同で行うための組織のチーミングをサポートする基本認証
- 公開されているChaosHubまたは別のChaosExperimentソース(同様の構造、すなわち、基本的にはカスタム実験を持つ公開ソースのフォーク)から実験を選択、調整、注文することでワークフローを構築するウィザード
- ワークフロー内のカオス実験に対する重み付けと、各ワークフロー実行に対するResilience Scoreの導出
- ワークフロースケジュールによる繰り返し実行のサポート
- 個々のカオスポッド/リソースのログをオンデマンドで検索することによる、カオスワークフローの可視化
- カオス・ワークフローの状態と履歴を表示するダッシュボード
- カスタムタイムラインに基づくワークフロー実行間のレジリエンス・スコアを比較する分析機能
また、このポータルでは、オンデマンドでアップロード可能な「定義済みカオスワークフロー」を実行することができ、特にワークフローがカオス実験以外のKubernetesのアクション(ロード生成など)を含む場合には、よりカスタマイズしやすくなります。
[[Litmus Portal]GUIのみでカオスエンジニアリングを始めてみる](https://zenn.dev/iaoiui/articles/0f04655f6b59c7088bb9) 01/2021
> 既に YAML を書かずに、カオスエンジニアリングを試せる状態まで Litmus Chaos が進んでいることがわかった。
> Litmus Portal はまだ途上であり、workflow の edit 機能がないなどプロダクションで担ぐというよりは、開発環境のテスト向けに試行を初めてみるくらいの温度感が良さそうに見える。
> コミュニティによると、workflow の edit 機能も 2021/1 月 3 週目に予定されている 1.12.1 のリリースにて追加される見込み。
[Litmus Portal design specification · litmuschaos/litmus Wiki](https://github.com/litmuschaos/litmus/wiki/Litmus-Portal-design-specification)
## FIまでの流れ
### memory hog failureの例
[litmus-go/pod-memory-hog.go at master · litmuschaos/litmus-go](https://github.com/litmuschaos/litmus-go/blob/master/experiments/generic/pod-memory-hog/experiment/pod-memory-hog.go)
- [litmus-go/pod-memory-hog.go at c323334c61495deada9462ff8cdb4d30e976c47a · litmuschaos/litmus-go](https://github.com/litmuschaos/litmus-go/blob/c323334c61495deada9462ff8cdb4d30e976c47a/chaoslib/litmus/pod-memory-hog/lib/pod-memory-hog.go#L232)
- [litmus-go/pod-memory-hog.go at c323334c61495deada9462ff8cdb4d30e976c47a · litmuschaos/litmus-go](https://github.com/litmuschaos/litmus-go/blob/c323334c61495deada9462ff8cdb4d30e976c47a/chaoslib/litmus/pod-memory-hog/lib/pod-memory-hog.go#L45)
- //experimentMemory function orchestrates the experiment by calling the StressMemory function, of every container, of every pod that is targeted
- [litmus-go/pod-memory-hog.go at c323334c61495deada9462ff8cdb4d30e976c47a · litmuschaos/litmus-go](https://github.com/litmuschaos/litmus-go/blob/c323334c61495deada9462ff8cdb4d30e976c47a/chaoslib/litmus/pod-memory-hog/lib/pod-memory-hog.go#L88)
- [litmus-go/pod-memory-hog.go at c323334c61495deada9462ff8cdb4d30e976c47a · litmuschaos/litmus-go](https://github.com/litmuschaos/litmus-go/blob/c323334c61495deada9462ff8cdb4d30e976c47a/chaoslib/litmus/pod-memory-hog/lib/pod-memory-hog.go#L28)
- dd コマンドを発行しているだけ