Chaos Meshチームは、2020年7月にCNCFサンドボックスプロジェクトとして承認された後、Chaos Mesh 1.0の一般提供 (GA) を発表した。Chaos Meshは、Kubernetesアプリケーションでカオスエンジニアリング実験を実行するためのツールである。
Chaos Meshは、オブジェクト定義に標準のCRDを使用し、カオスエンジニアリング実験を管理および監視するためのダッシュボードも付属している。ダッシュボードは「カオス実験の範囲を定義し、カオス注入のタイプを指定し、スケジューリングルールを定義し、カオス実験の結果を観察する」ために使用できる。Chaos Meshには、カオスエンジニアリング実験からのリアルタイムメトリックを表示するためのGrafanaプラグインも付属している。このツールは「ポッド、ネットワーク、システムI/O、およびカーネル」へのフォールトインジェクションを対象としている。
InfoQは、Chaos Meshのメンテナ兼フルタイム開発者であるKeao Yang氏に詳細を問い合わせた。
カオス実験は、Chaos MeshのYAMLとして指定できます。注入される可能性のある障害の種類には、ポッド障害、ネットワークパーティション障害、仮想メモリ負荷、システムコールで見られるシステム時間の変更、およびI/O遅延が含まれます。Chaos Meshを使用して、複数のデータセンタにわたるネットワーク遅延をシミュレートすることもできます。内部的には、Chaos Meshは2つの主要コンポーネントとして実行されます。中央コントローラマネージャと、エージェントとして機能する各ノードでポッドを実行するDaemonSetです。テスト中に影響を受けるアプリケーションを制限し、カオス実験により、重要なアプリケーションに影響を与えるのを防ぐために、名前空間レベルのアクセス許可と保護された名前空間のリストを提供できます。
画像提供: https://raw.githubusercontent.com/chaos-mesh/chaos-mesh/master/static/chaos-mesh.svg (Used with permission)
Chaos Meshはもともと、分散データベースであるTiDBのテストフレームワークから生まれた。Yang氏は次のように説明する。「以前のプラクティス (TiDBテスト) での経験は、TiDBを安定させるだけでなく、Chaos Meshを作成した理由でもあります。Chaos Meshは汎用として生まれ、あらゆるクラウドプラットフォームで動作するように設計されています。クラウド上のあらゆるソフトウェアをテストします。」
Chaos Meshは、特定のクラウド機能に依存しない。「Kubernetes APIとLinuxカーネルの基本機能のみ」を使用しているとYang氏は言い、次のように付け加えた:
ユーザからの報告によると、Chaos Meshは、ベアメタルクラスタとほとんどのクラウドプラットフォームで当然のように機能します。ただし、一部のクラウドプラットフォーム (OpenShiftなど) では、特別な権限設定が必要です。これらの構成を記録するためのドキュメントに取り組んでいます。
Chaos Meshが内部でどのように障害を注入するかについての質問に答えて、Yangは次のように説明した:
インプリメンテーションは「障害」の種類によって異なります。それらのいくつかはとても単純です。たとえば、Chaos MeshはKubernetes APIを使用してPodを強制終了し、PodChaosを実装します。他の種類のカオスの場合、Chaos Meshは関連ノードのデーモンにgrpcリクエストを送信し、デーモンは対応するnetwork/pid/mnt/… 名前空間とcgroupに入り、いくつかのコマンド (iptablesなど) を実行して障害を注入します。
さらに、Yang氏は「実行時に障害を注入し、カオスの範囲を制限することは困難な場合があります。たとえば、Linux 5.6より前にはtime名前空間のようなものはなく、すべてのプロセスが同じクロックを共有していました。このカオスでは、実装はそれほど単純ではなく、短い答えで結論付けるのは本当に難しいです」。別の投稿で、クロックのゆがみをシミュレートするTimeChaosの実装について説明している。
Chaos Meshの近い将来のロードマップについて、Yang氏は言う:
Chaos Meshの機能を「プラットフォーム」として拡張しようとしています。つまり、カオス実験をオーケストレーションし、複雑なカオスシナリオを定義し、カオスのレポートを生成できることが期待されています。ロードマップ上のもう1つの重要な機能は、ダッシュボードでのアクセス制御をサポートすることです。
Kubernetesにある、他のChaosエンジニアリングフレームワークには、Litmus、Gremlin、およびKubeInvadersである。この記事の執筆時点では、Chaos MeshにはKubernetes v1.12以降が必要であり、提供されているシェルスクリプトまたはHelmチャートを使用してインストールできる。Chaos Meshのソースコードは、GitHubで入手できる。