本稿はJCB Tech Blog Advent Calendar 2022の12月2日の記事です。
JCB デジタルソリューション開発部 SREチームの鳩貝と申します。
今回は弊社における障害訓練(Gameday)の取り組みについて、実践部分を紹介します。
本稿は記事2本立てで構成されています。Gamedayの概要・運営に関しては前回記事を参照ください。
- Gameday概要・運営
- Gamedayで発生させた障害と学び ←今回の記事です。
また、今回説明する内容は今年開催のCloud Operators Days Tokyo 2022(外部サイト)にて 審査委員 特別賞(挑戦編) を受賞した発表をベースとしています。
登壇動画のアーカイブがYouTubeにて公開されていますので、よろしければ御覧ください。
では、早速本題の実践について、まずはGamedayを実現するための技術要素から紹介していきます。
カオスエンジニアリングツール"Gremlin"のご紹介
Gameday開催にあたっては、SaaSのカオスエンジニアリングツール"Gremlin"を活用しました。これは基盤上にエージェントを稼働させることで、WebUI経由で対象に各種Attackを実行できるツールです。
弊社基盤はGoogle Kubernetes Engine(GKE)を利用しているため、本ツールを利用しGKEノードやPodに対するAttackを行いました。もちろんKubernetesに限らず、仮想マシンやオンプレ上のOSへのAttackにも対応しています。
Attackの種類も以下例の通り数多く備えており、組み合わせることで各種要因が関連し発生する複雑な障害を再現できます。
次からは本ツールを利用し、Gameday本番でどのような障害を発生させたかについて説明します。
Gamedayケース1における障害内容
前回説明に記載したとおり、Gamedayでは1日に障害訓練を2ケース分実施しました。
まずはケース1です。
本ケースではパブリッククラウドのゾーン障害を模し、特定ゾーン上で稼働する複数のGKEノード(上図でいえばZone AのNode1,Node2)をGremlin経由で再起動しました。
「パブリッククラウド障害のパターンとして標準的なものを発生させ、設計通り障害対応運用が行われることを確認する」ことがケース設定の意図でしたが、実際に発生させたところ、やはり基盤障害は影響チーム数/人数が膨大となることから想定通りの運用が困難であることをあらためて実感しました。
現運用では本ケースで発見した複数の懸念を解消することで、障害対応の高度化を実現しています。
Gamedayケース2における障害内容
ケース2ではGKEのマネージドサービス部分に不具合があったと仮定したうえで、特定ゾーン上で稼働するGKEノード間通信機能(kube-proxy)へのCPUリソースAttack、およびパケットロスAttackを実行しました。
本ケースではGremlinのシナリオ機能を活用し、時間経過に応じ徐々に障害状況が悪化していく様を再現しました。
経過時間 | Attack内容 |
---|---|
開始〜10分 | kube-proxyへのCPUリソースAttack |
10分〜20分 | kube-proxyの送信受信パケット50%ロス |
20分〜30分 | kube-proxyの送信受信パケット60%ロス |
30分〜40分 | kube-proxyの送信受信パケット70%ロス |
30分〜40分 | kube-proxyの送信受信パケット80%ロス |
40分〜50分 | kube-proxyの送信受信パケット90%ロス |
35分〜60分 | kube-proxyの送信受信パケット100%ロス |
「障害に対する適切な緩和運用とトラブルシューティングとが両立できることを確認する」ことが本ケース設定の実施意図でした。
前ケースと比較しケース2は被疑箇所がGKEの内部コンポーネントであることから、対応難易度が高いものとなっていました。しかしながら参加者のみなさんにはケース1での経験・反省を踏まえ、むしろ前ケースよりもスムーズに障害対応を実施頂けました。
Gamedayを終えて
Gamedayを経験することで、プロジェクト全体としての障害対応レベルを向上できたと考えています。今後もJCBでは定期的な障害訓練の開催を通じてシステム品質を更に向上させていく予定です。
なお、本稿は2022年2月に私が運営側として実施したGamedayの経験を元に執筆致しましたが、実は先月2022年10月に第2回Gamedayが開催されています。
こちらでは私自身Gamedayのプレイヤーとして参加しましたので、次回投稿では参加者側から見たGamedayについても紹介できればと考えています。
最後になりますが、JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等については採用ページをご覧下さい。
本文および図表中では、「™」、「®」を明記しておりません。
Google Cloud, GCPならびにすべてのGoogleの商標およびロゴはGoogle LLCの商標または登録商標です。
記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。