Litmusを使ったカオスエンジニアリング:CNCFインキュベートプロジェクト

問題の声明:マイクロサービスベースのeコマースプラットフォームの弾力性を確保する。

システムの弾力性は、ユーザーに優れたパフォーマンスを提供し、サービスを稼働させ続けるために、eコマースプラットフォームにおいてスケーリング操作中に重要な要件となります。私たちは、マイクロサービスアーキテクチャのプラットフォームを開発しましたが、ピーク時のトラフィックイベントに直面する際に断続的なシステム障害に遭遇します。Kubernetesポッドのクラッシュ、リソースの枯渇、ネットワークの障害などが主な原因であり、これらがピークのショッピングシーズン中に起こり、サービス可用性の低下や収益への影響といった問題が生じます。

組織は、CNCFでインキュベートされたプロジェクトLitmusを利用して、プラットフォームの評価と弾力性の向上を行う予定です。Litmusを使用してシミュレートされた障害テストを実施することで、システムの弱点が明確になります。これにより、ポッドの終了イベントやネットワークの遅延、リソース使用量の制限など、実世界の障害状況を引き起こすことができます。これらの実験により、スケーラビリティの自動化システムを検証し、災害復旧手順をテストし、Kubernetesの設定を最適化して、システム全体の信頼性を向上させることができます。

このシステムは、障害状況に耐える堅固な基盤を作り、利用者の体験品質を損なうことなく、忙しいトラフィック期間を安全に分散させることができます。インフラストラクチャに予防的に適用されたカオスエンジニアリングにより、リスクを軽減し、観測性を向上させることができます。これにより、プラットフォームのeコマースの弾力性をあらゆる運用条件に対して向上させる自動回復手法の開発が可能となります。

カオス実験環境を設定する

KubernetesクラスターにLitmusChaosをインストールしてください:

Shell

 

インストールを確認:

Shell

 

注意: クラスターが混乱実験に対して準備ができていることを確認してください。

混乱実験を定義する

Podの削除シナリオをシミュレートするChaosExperiment YAMLファイルを作成する

例(pod-delete.yaml):

YAML

 

ChaosOperatorをインストールしてサービスアカウントを構成する

実験を管理するためにChaosOperatorをデプロイする:

Shell

 

注意: 必要な権限を付与するためにServiceAccountを作成してください。

ターゲットアプリケーションに混乱を注入する

混乱を引き起こすためにアプリケーションの名前空間にラベルを付ける

Shell

 

実験をトリガーするChaosEngineをデプロイする

例(chaosengine.yaml):

YAML

 

ChaosEngineを適用する

Shell

 

実験をモニタリングする

進捗状況を表示する

Shell

 

混乱ポッドのステータスを確認する

Shell

 

結果を分析する

実験後、ログとメトリクスを確認してアプリケーションが自動的に回復したか、ストレス下で失敗したかを判断する

モニタリングすべきいくつかのメトリクス:

  • アプリケーションの応答時間
  • 実験中および後のエラーレート
  • ポッドの回復にかかる時間

解決策

原因特定: 高トラフィック時に、デプロイメント内のレプリカ数が不十分であり、適切なリソース制限が不適切だったため、ポッドが失敗しました。

適用された修正:

  • デプロイメント内のレプリカ数を増やして、高トラフィックを処理できるようにしました
  • ポッド仕様書でCPUとメモリの適切なリソース要求と制限を設定しました
  • トラフィックの急増を動的に処理するHorizontal Pod Autoscaler(HPA)を実装しました

結論

LitmusChaosを使用してポッドの障害をシミュレートすることで、eコマースプラットフォームのKubernetesデプロイメントの主要な弱点を特定しました。カオス実験は、スケーリングとリソース割り当ての調整によって耐久性を大幅に向上させることが示されました。カオスエンジニアリングにより、積極的なシステムの強化が可能となり、より良い稼働時間と顧客満足度を実現しました。

Source:
https://dzone.com/articles/chaos-engineering-litmus-cncf-incubating-project