2020年09月25日 ウェビナー「はじめてのカオスエンジニアリング:Gremlin」のQAを公開します!

2020.09.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2020年09月25日 クラスメソッド株式会社主催「はじめてのカオスエンジニアリング:Gremlin」 でご参加頂いた方から頂戴した質問とその回答を公開します。

【9/25(金)ウェビナー】「はじめてのカオスエンジニアリング:Gremlin」を開催します

Q. 攻撃でブラックホール(遮断)を選択してもエージェントとの通信は問題ないですよね?

A. デフォルトでGremlinへの通信は許可する設定が有効になっているので、問題ありません。

これらの設定を外すと動かなくなります。

Q. コンテナのCPU利用率を上げる試験は、コンテナ内に事前に仕掛け(エージェント等?)を仕込む必要があるのでしょうか。

A. いえ、コンテナに対してはエージェンをインストールする必要はありません。Docker, Kuberenetes へのエージェントのインストールが必要になります。

Q. (前の質問に続き) そうしますと、frontendのコンテナのCPU利用率はどのようにして上げているのでしょうか。

A. Gremlinの攻撃用コンテナを、攻撃対象となるコンテナのSidecar Containerとして起動して、攻撃を行います。

実際の攻撃ログは下記の様になっています。

2020-09-25 05:33:02 - Attacking container 'ed5039e6fc6529b6cd0c2c8b87a7bcd8fad6e568efbcd6fa7b5f76759a7b0e56' with command ["cpu", "-l", "120", "-c", "1", "-p", "90"] ...
2020-09-25 05:33:02 - Spawning sidecar container 'gremlin-ed5039e6fc6529b6cd0c2c8b87a7bcd8fad6e568efbcd6fa7b5f76759a7b0e56-283608958' based on 'gremlin/gremlin:latest' for attack ...
2020-09-25 05:33:02 - Target container is configured to be killed if it runs out of memory, this will affect the running Gremlin too
2020-09-25 05:33:04 - Setting up cpu gremlin with guid '90e67579-fef0-11ea-ba1a-363a614b974a' for 120 seconds on 90% of 1 core
2020-09-25 05:33:04 - Setup successfully completed
2020-09-25 05:33:04 - Running cpu gremlin with guid '90e67579-fef0-11ea-ba1a-363a614b974a' for 120 seconds on 90% of 1 core
2020-09-25 05:35:04 - Attack on cpu_1 completed successfully

また、攻撃を行うためにはGremlinのDaemon Containerに強い権限が必要です。 下記の参考サイトをご確認ください。

Q. Gremlinを利用するためには、対象ノードへのエージェントインストールは必須でしょうか。エージェントレスでカオスエンジニアリングを実現できる手法があるかを伺いたいです。

A. GremlinをInfrastructure Layerで利用するのであればエージェントは必須になります。

Application Layerで利用するのであればエージェントではなくコードにライブラリを埋め込む形になります。 現在は Java のクライアントライブラリしか提供されていません。

Q. 攻撃が予想を超える影響が出た場合、緊急停止やロールバックの機能が用意されているということですが、例えばホストをシャットダウンするような攻撃をした場合、ロールバックが難しいかと思います。どのようにロールバックがなされるのでしょうか?

A. 説明不足でしたが、ロールバック≒緊急停止と考えて頂いていよいかと思います。

例えば、ホストOSがLinuxの場合ですと、Shutdown攻撃ではシステムコールrebootをGremlinが実行するような動きになります。 この際、緊急停止をおこなうと下記のようなログが出力されます。

2020-09-25 11:56:23 - Running shutdown gremlin with guid '1b36d5d7-ff26-11ea-917d-0a133f617302' after 1 minute
2020-09-25 11:57:14 - Interrupted by signal!
2020-09-25 11:57:14 - Rolling back 1b36d5d7-ff26-11ea-917d-0a133f617302
2020-09-25 11:57:14 - Rollback will stop the running attack and clean up its state

Rollback will stop the running attack and clean up its state

ここでのロールバックは、Gremlinエージェントに対する攻撃の停止と状態の巻き戻しを意味します。 システム自体のロールバックはあくまでシステム側の責任になります。

Q. ご紹介いただいた中でCircleCIでなくCodepipelineでは力不足ですか?CircleCIでないとダメな理由はありますか?

A. デモで紹介した限りでは、CodepipelineやCodeBuildを使うことも十分に可能です。

マルチクラウドを検討される場合は、CircleCIの方が優位となります。

Q. カオスエンジニアリングへの理解を深める上でおすすめの資料や書籍はありますでしょうか

A. 参考になったサイトをいくつか載せておきます。