5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者がChaos Engineeringの世界を探索してみた:ツール調査まとめ

Posted at

はじめに

こんにちは。

私は情報システムやサービスの運用の研究開発業務を担当するグループに所属している新人エンジニアです。
新卒として今年からITの世界に飛び込んでみたものの、覚えるべき用語や技術が非常に多く、右往左往する毎日を過ごしています。

今回も前回に引き続き、研究開発に必要な知識を得るためにCNCFのLandscapeに掲載されたツールについて調査しました。

その中でも今回は、障害対策の一つである「Chaos Engineering」の世界へ冒険に出かけようと思います。

本記事はIT知識ゼロの私が、CNCFのLandscapeに掲載されていたChaos Engineeringツールについて調査した内容をまとめたものになります。

まずは前提知識をおさらいし、各ツールの紹介をした後に調査して気づいたことについてまとめます。

前提知識が分からない...

前回同様に「Chaos Engineeringってなんだ?」となりましたので、ツールの紹介の前に、前提知識について説明していこうと思います。

OSSやCNCFについては前回記事である、
初心者がObservabilityの世界を探索してみた:ツール調査まとめ
で説明していますので、参考にしていただければと思います。

Chaos Engineeringって何?

Chaos Engineeringとは、システムの弱点を見つけるために意図的に障害を発生させ、レジリエンスを高める手法のことです。

以下にCNCFによるChaos Engineeringの定義を示します。

Chaos Engineeringの定義

カオスエンジニアリング(CE)とは、本番環境の分散システムに実験する学問分野です。 分散システムが乱雑で予期せぬ状況に耐えるシステムの能力に対する信頼を築くことを目指します。
引用元:Cloud Native Glossary

Chaos Engineeringのメリット

カオスエンジニアリングは、回復力の要件を満たすための技術です。 インフラストラクチャ、プラットフォーム、そしてアプリケーションの障害に対する回復力を達成するために使用されます。 カオスエンジニアは、アプリケーション、インフラストラクチャ、あるいはプラットフォームが自己修復でき障害が顧客に目立った影響を与えないことを検証するために、プロアクティブにランダムな障害を注入するカオス実験を行います。 カオス実験の目的は、盲点(例えば、モニタリングや自動スケーリング技術)を発見し、重大なインシデントの最中にチーム間のコミュニケーションを改善することです。 このアプローチは、特に本番環境において、複雑なシステムにおける回復力とチームの自信を高めるのに役立ちます。
引用元:Cloud Native Glossary

Chaos Engineeringの歴史

Chaos Engineeringは従来の単一サーバー中心のシステムから、クラウドやマイクロサービスによる分散システムが主流になったことにより、システムの信頼性を確保するための手法として進化してきました。
そんな、Chaos Engineeringの大まかな歴史について以下の図にまとめました。

参考文献①:カオスエンジニアリング入門
参考文献②:カオスエンジニアリングの過去と今

Chaos Engineeringの歴史.png

  • 2009年にNetflixはAWS Cloudへ移行を開始する
  • 2010年にChaosMonkeyの開発を開始する
  • 2011年にAWSのUS East Regionで大規模障害が発生したが、Netflixは影響を受けず
  • 2013年にChaosMonkeyをGitHubに公開する
  • 以降、多くの企業やエンジニアがChaos Engineeringツールを導入するようになる

Kubernetes(K8s)って何?

Kubernetesはコンテナオーケストレーションツールです。
コンテナオーケストレーションツールとはコンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのツールのことです。

Kubernetesの読み方は『クーバネティス』、『クバネティス』、『ケイエイツ』など様々です。

Kubernetesはギリシャ語で『操舵士』を意味する言葉が由来であり、アプリケーションを管理することを象徴しています。

特徴

  • コンテナの運用管理と自動化
  • 簡単なデプロイとロールバックが可能
  • 複数のマシンにわたってアプリケーションを分散

重要な用語

  • コンテナ:仮想化技術の一種
  • ポッド:コンテナの集合体
  • ノード:Kubernetesでポッドを実行するマシン
  • クラスタ:Kubernetesのリソースを管理する集合体

Chaos Engineeringツールの紹介

ここから本題のツール紹介に入ります。現在、CNCFのLandscapeに掲載されているChaos Engineeringツールは11ツールです(2024年11月時点)。その中でもGitHubにソースコードを公開している8ツールについて紹介していきます。

Chaos Engineeringツール数は他ツールと比較して、少ない部類です。
(Observability:145ツール, Continuous Optimization:23ツール, etc.)

調査対象ツール

  • Chaos Mesh
  • Litmus
  • Chaos Toolkit
  • ChaosBlade
  • Krkn
  • Chaoskube
  • PowerSeal
  • Kubeinvaders

調査内容

  • 機能概要
  • 最新版バージョン
  • 初版リリース
  • CNCFによる成熟度の分類
  • 公式コンテナイメージ提供の有無
  • ツール開発に使用している言語とその比率
  • ライセンス
  • Contributor数
  • GitHubリポジトリURL

調査方法

  • WEB上(公式ホームページ等)

成熟度はCNCFの技術監査委員会に対して複数の組織からのコミットや健全な変更率を維持していることなどの持続可能性を示すことで高められます。
参考情報:CNCF Project Metrics

紹介するツールはこのブログ執筆時点(2024/11/15)のデータとなっています。

1. Chaos Mesh

Chaos MeshはKubernetesに特化したChaos Engineeringツールです。

特徴

  • CRDを活用してKubernetesと自然に統合
  • Kubernetesクラスタに簡単にデプロイ可能
  • ワークフローを使用して複雑な障害シナリオをオーケストレーション

ツール内で気になった用語

  • CRD(Custom Resource Definition):Kubernetesにカスタムリソースを作成できる機能
Chaos Mesh
開発元 PingCAP
最新版 v2.7.0(2024年9月)
初版リリース 2019年
成熟度 INCUBATING
公式コンテナイメージ 有り
開発言語 GO(66.0%), TypeScript(27.3%), Shell(4.3%)
ライセンス Apache-2.0
Contributor数 197
GitHubリポジトリURL https://github.com/chaos-mesh/chaos-mesh

コメント

成熟度がINCUBATINGであることから、利用が広まりつつあることが伺えます。

Chaos MeshはKubernetesの専用ツールであり、他のOSSと比較して複雑なシナリオを構築できます。
そのため、様々なパターンや特異なパターンでカオステストを実行したい場合に役立つと考えられます。

また、Chaos Meshが提供するカオスエンジニアリングツールである「Chaosd」はKubernetesを使用していない場合でもChaos Meshが提供する機能を利用できるため、Kubernetesに精通していない人でも利用が可能です。

2. Litmus

LitmusはKubernetesに特化したChaos Engineeringツールです。

特徴

  • 自分の環境に合わせて実験をカスタマイズ可能
  • Prometheusのメトリクスをエクスポートし、リアルタイムで定量化可能
  • 初心者でも数分でスケジュール可能

ツール内で気になった用語

  • Prometheus:メトリクスに基づく監視とアラート通知ツール
Litmus
開発元 ChaosNative(元MayaData)
最新版 v3.12.0(2024年10月)
初版リリース 2017年
成熟度 INCUBATING
公式コンテナイメージ 有り
開発言語 GO(85.8%), SCSS(12.4%)
ライセンス Apache-2.0
Contributor数 209
GitHubリポジトリURL https://github.com/litmuschaos/litmus

コメント

成熟度がINCUBATINGであることから、利用が広まりつつあることが伺えます。
今回調査したツールの中でContributors数が最大であるため、コミュニティが広く、活発に活動していることが確認できます。

Kubernetesに特化していることから、Kubernetes環境でアプリケーションを運用している人に適していると考えられます。
初心者でも数分でスケジュール可能なことから、Chaos Engineeringに触ったことない人でも利用しやすそうですね!

3. Chaos Toolkit

Chaos Toolkitはカオス実験の作成と実行を支援するCLI駆動ベースのツールです。

特徴

  • Open APIを通じて、どのシステムにも自由に拡張可能
  • シンプルなJSON/YAMLベースの宣言的な設定

ツール内で気になった用語

  • OpenAPI:APIを記述するためのフレームワーク
Chaos Toolkit
開発元 ChaosIQ
最新版 v1.19.0(2024年2月)
初版リリース 2017年
成熟度 記載なし
公式コンテナイメージ 有り
開発言語 Python(98.8%), Dockerfile(1.2%)
ライセンス Apache-2.0
Contributor数 18
GitHubリポジトリURL https://github.com/chaostoolkit/chaostoolkit

コメント

Kubernetesだけでなく、クラウド(AWS、GCP)やオンプレミス環境でも利用可能なため、多様なインフラを扱うチームに適していると考えられます。

4. ChaosBlade

ChaosBladeは複数の環境、言語をサポートするChaos Engineeringツールです。

特徴

  • 豊富な実験シナリオを保有
  • ホスト、クラスタ上に自動で実験ツールを展開可能
  • 異なる環境に対して使用方法を気にせず、同じインターフェースで実験可能
ChaosBlade
開発元 Alibaba
最新版 v1.7.4(2024年7月)
初版リリース 2019年
成熟度 SANDBOX
公式コンテナイメージ 有り
開発言語 GO(91.3%), Makefile(5.3%)
ライセンス Apache-2.0
Contributor数 40
GitHubリポジトリURL https://github.com/chaosblade-io/chaosblade

コメント

ChaosBladeはLinux、Docker、Kubernetesクラスタなどの様々な環境でのデプロイをサポートしており、Kubernetesだけでなく、Linux等のそれ以外の環境下でカオステストを実行したい場合に役立つと考えられます。

豊富な実験シナリオを有しており、基本リソース(CPU、メモリ、ネットワーク、カーネル、ファイル、etc.)や多様なプログラミング言語(Java、C++、NodeJS、Golang、etc.)、Kubernetesプラットフォームに対するカオステストが可能です。

ドキュメントの一部には多言語に対応しておらず、中国語のみなっている箇所があります。

5. Krkn

KrknはKubernetesに特化したChaos Engineeringツールです。

特徴

  • ほとんどのKubernetesのカオスシナリオをサポート
  • OpenShiftとの深い結合
  • 主にエンタープライズ向け

ツール内で気になった用語

  • OpenShift:Red Hatが開発したエンタープライズ向けKubernetesプラットフォームで、コンテナ化されたアプリケーションのデプロイ、管理、自動化を支援するもの
Krkn
開発元 Red Hat
最新版 v2.0.6(2024年11月)
初版リリース 2020年
成熟度 SANDBOX
公式コンテナイメージ 有り
開発言語 Python(95.3%), Shell(3.4%)
ライセンス Apache-2.0
Contributor数 41
GitHubリポジトリURL https://github.com/krkn-chaos/krkn

コメント

Kubernetesに特化していることから、Kubernetes環境でアプリケーションを運用している人に適していると考えられます。

Krknと同じ開発元である「Red Hat」が開発した「OpenShift」と深い結合があるため、OpenShiftを導入している企業の方でカオステストを実施したい場合には、ぜひとも導入したいですね!

6. Chaoskube

ChaoskubeはKubernetesクラスタ内のランダムなポッドを終了させるツールです。

特徴

  • 指定された間隔でポッドをランダムに停止可能
  • Kubernetesクラスタに簡単にデプロイ可能
  • 非常にシンプルな機能構成
Chaoskube
開発元 Linki
最新版 v0.33.0(2024年8月)
初版リリース 2016年
成熟度 記載なし
公式コンテナイメージ 有り
開発言語 GO(97.2%), Smarty(2.0%)
ライセンス MIT license
Contributor数 34
GitHubリポジトリURL https://github.com/linki/chaoskube

コメント

Kubernetesに特化していることから、Kubernetes環境でアプリケーションを運用している人に適していると考えられます。

「ポッドを終了させる」というシンプルな機能のみを有しているため、小さなリソースで簡単に利用できます。
設定も非常にシンプルなため、短時間でテストを実行したい場合に便利だと考えられます。

7. PowerfulSeal

PowerfulSealはKubernetesに特化したChaos Engineeringツールです。

特徴

  • 複数のモードで異なるユースケースに対応
  • PrometheusおよびDatadogで障害が与える影響を監視可能

ツール内で気になった用語

  • Datadog:クラウド上でシステムのメトリクス、ログ、トレースを一元管理する従量課金制のObservabilityサービス(DatadogHP
PowerfulSeal
開発元 Bloomberg
最新版 v3.3.0(2021年9月)
初版リリース 2017年
成熟度 記載なし
公式コンテナイメージ 有り
開発言語 Python(98.5%)
ライセンス Apache-2.0
Contributor数 30
GitHubリポジトリURL https://github.com/powerfulseal/powerfulseal

コメント

Kubernetesに特化していることから、Kubernetes環境でアプリケーションを運用している人に適していると考えられます。

PowerfulSealには以下に示す通り3つのモードがあり、用途に応じて使い分けることができそうです。

  • 自律モード:任意のシナリオを継続的に実行し、メトリクスを生成する主要なモード
  • インタラクティブモード:手動で障害注入するシンプルな機能をもつモード
  • ラベルモード:ラベルによってターゲットを絞り込むモード

8. Kubeinvaders

KubeinvadersはKubernetes用のゲーム化されたChaos Engineeringツールです。

特徴

  • インベーダーゲームのようなUIを使用
  • インベーダーを攻撃するとランダムでポッドが停止
  • 楽しくテストし、レジリエンスの確認が可能
  • ゲームモードとプログラミングモードが存在
Kubeinvaders
開発元 Eugenio Marzo(個人)
最新版 v1.9.7(2024年8月)
初版リリース 2019年
成熟度 記載なし
公式コンテナイメージ 有り
開発言語 JavaScript(78.3%), HTML(6.7%), Python(6.1%)
Contributor数 Apache-2.0
GitHubリポジトリURL https://github.com/lucky-sideburn/kubeinvaders

コメント

Kubernetesに特化していることから、Kubernetes環境でアプリケーションを運用している人に適していると考えられます。

ゲームモードでは、「インベーダーを攻撃するとポッドを停止させる」という設計になっており、ゲーム感覚で楽しくカオステストを体感することができます。
しかし、複雑なシナリオは実行できないため、実運用には不向きかもしれません。

シンプルな機能かつ直感的な操作でカオステストの実行ができるため、Chaos Engineering初心者におすすめです!!

まとめ

以上の8ツールについて調査してみました。
調査してみた感想として、かなり似た内容のツールが多いなと感じました。
その中でも、「Kubeinvaders」は一風変わった特徴を有しており、興味を持ちました。
私自身ゲームが好きなので、最初はKubeinvadersを用いてカオステストしてみたいと思います!!

また、多くのツールはドキュメントが整っており、どのツールを導入する場合でもそれほど困ることはないと感じました。

以下に、Chaos Engineeringの分類、近年の傾向を示します。

Chaos Engineeringの分類

Chaos Engineeringツールは大きく2種類に分けられると考えました。下図に調査ツールの分類を示します。
基本的にKubernetesに特化したツールが多いため、Kubernetesを利用している方だとツール選択の幅が広がりそうです!

しかし、Kubernetes自体の学習コストが高いため、初心者には設定が複雑だと感じられる場合があるかもしれません...。
Kubernetes以外のプラットフォームでカオステストを実行したい場合には「ChaosBlade」や「Chaos Toolkit」を利用することをおすすめします!!

Chaos Engineeringの分類.png

近年の傾向

新規ツールの初版リリースが4年前(2020年)であることから、近年はあまり開発されていない分野であることがわかります。
また、感覚的な話にはなってしまうのですが、Observabilityツールに比べて追加機能や修正の頻度も遅く感じました。
その理由として以下のようなことが考えられます。

  • 必要性が比較的低い
  • 1つのツールで完結する

Chaos Engineeringはあくまでもレジリエンスを向上させるためのツールであるため、必須となるものではなく、需要が比較的低いと考えます。
さらに、近年のインフラストラクチャは障害が発生しても自動的に回復する機能をもつシステムもあり、カオステストの実行頻度が減少した可能性もあります。

また、Observabilityツールはいくつかのツールを掛け合わせて利用しますが、Chaos Engineeringツールは1つのツールでカオステストの実行が可能です。
そのため、ツールごとに特徴を持たせづらく、新規ツールの開発がそこまでなされていないのかもしれません。

しかし、1つのツールで完結しているということはそれだけ導入、学習のコストが下がるということですので、利用者からするととっつきやすい分野であるとも言えます!

おわりに

今回はIT初学者がCNCFのLandscapeに掲載されているChaos Engineeringツールについて調査し、その概要についてまとめました。
私と同じ初学者の方や、Chaos Engineeringについてこれから触っていこうと考えている方の参考になれば幸いです。

Chaos Engineeringツールの調査を通じて感じたこととして、Observabilityツールと統合することで、起きやすい障害の傾向を把握し、適切な障害を自動で注入できたりとかしたらおもしろいな~と感じました。

今後は興味を持ったツールを実際に触ってみての具体的な機能や感想、他のツール群の調査まとめを投稿する予定です。

最後までお読みいただき、ありがとうございました。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?