1
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?

AWS Fault Injection ServiceでEKSクラスタにAZ障害を発生させてみる

Posted at

AWSの障害シミュレーション機能であるFault Injection Service(以降FIS)に、先日AZ障害を想定したシナリオがリリースされました。

これまでFISの事は知っていたものの触ったは無かったのですが、AZ障害は業務でもよく話に出てきますので今後のテストで使えるかもと思い試してみました。
現在EKSの管理を業務で行っている事もあり、EKSの障害という想定で試してみました!

FISの基礎知識

まずFISで使われるオブジェクトについて簡単に解説します。

実験
障害テスト自体を指します
実験テンプレート
どのリソースにどの様な障害を発生させるか等の仕様を定義したオブジェクトです
シナリオライブラリ
EC2インスタンス障害やEKS Pod削除等、AWSが用意しているプリセットの実験テンプレートです

障害テスト実施までの流れは以下になります。

  1. 実験テンプレートを作成する
  2. 実験を開始する

実験テンプレートは1から自分で作成も可能ですし、シナリオライブラリから作成する事も可能です。
今回は後者のシナリオライブラリを利用してテンプレート作成しました。

シナリオ1.EKSワーカーノード単一障害

まずはじめに、EKSワーカーノード(EC2)の単一障害のシナリオを作って実験してみます。

実験テンプレートを作成

FIS画面の左側にあるシナリオライブラリをクリックします。

1-1.png

AWSが用意している障害シナリオが一覧で表示されます。
EC2ストレス:インスタンス障害にチェックを付けて、Create template with scenarioボタンをクリックします。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_19-42-18_No-00.png

すると実験テンプレート作成画面に移ります。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-23-59_No-00.png

デフォルトの内容からほとんど修正する必要は無いのですが、リソースタグだけ修正します。

というのもEC2ストレス:インスタンス障害は障害を発生させる対象のEC2インスタンスを以下のインスタンスタグで識別する様になっています。

キー
Ec2InstanceFailure Allowed

もちろん対象EC2インスタンスにこのリソースタグを付与するでも良いのですが、今回は既に付与されている以下のリソースタグを指定する様に実験テンプレートの方を修正します。

キー
eks:nodegroup-name my-eks-nodegroup

ターゲットとして登録されているTaggedInstancesをクリックします。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-25-37_No-00.png

ターゲットを編集ポップアップが表示されます。
上述のリソースタグで修正して保存ボタンをクリックします。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-26-51_No-00.png

実験テンプレートの名前はNameタグで付ける事ができます。
ここまで設定したら実験テンプレートを作成ボタンをクリックします。これで実験テンプレート作成完了です。結構簡単ですね!

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-27-55_No-00.png

実験開始!

作成した実験テンプレートを使って早速実験してみます。
左側の実験テンプレートを選択して、今回作成した実験テンプレートを選択し、実験を開始ボタンをクリックします。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-28-51_No-00.png

すると実験を開始画面が表示されます。実験を開始ボタンをクリックします。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-30-4_No-00.png

今度は実験を開始ポップアップが表示されます。障害を発生させてサービスに影響を与えてしまうかもしれない事もあり、本当に実行するの?と何回も聞かれますね。。。
今回は検証環境ですので躊躇無く進めます。

フィールドに開始の文字を記載した後実験を開始ボタンをクリックします。
これでやっと実験開始です。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-30-20_No-00.png

実験が開始されました!実験テンプレート内で設定されたアクションであるStopActionRunningになっています。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-31-56_No-00.png

EKSワーカーノードの状態を見てみます。おぉ、ちゃんとワーカーノードが停止になっていますね!

SnapCrab_my-eks  クラスター  Elastic Kubernetes Service  ap-northeast-1 - Google Chrome_2024-3-15_20-33-6_No-00.png

しばらくしたら、ワーカーノードが1台起動してきました。EKSクラスタのノードグループがちゃんと仕事をしています。実験成功です!

SnapCrab_my-eks  クラスター  Elastic Kubernetes Service  ap-northeast-1 - Google Chrome_2024-3-15_20-33-59_No-00.png

シナリオ2.AZ障害

ではいよいよ本題のAZ障害を発生させてみます。
といっても流れはEC2障害とほぼ変らずです。

実験テンプレートを作成

シナリオライブラリから今回はAZの可用性:電源の中断にチェックを入れてCreate template with scenarioボタンをクリックします。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_20-41-36_No-00.png

実験テンプレート作成画面に移りますが、先程のEC2障害と比較してたくさんのアクションとターゲットが設定されています。
AZ障害時に発生するであろう複数リソースの障害を同時に発生させるシナリオになっています。
便利ですね~

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-18_16-19-38_No-00.png
SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-18_16-16-18_No-00.png
SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-18_16-16-29_No-00.png

デフォルトですと各ターゲットのリソースタグには以下が付与されていました。

キー
AzImpairmentPower IceAsg

障害対象のリソースとこのタグを合わせる必要がありますので、今回はEC2インスタンスとAutoScalingGroupのターゲットで以下に変更しました。

キー
eks:nodegroup-name my-eks-nodegroup

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-18_16-14-54_No-00.png

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-18_16-15-19_No-00.png

また属性パスで以下を設定が設定されていましたので、デフォルトではap-northeast-1aが停止になる様です。
これを設定変更すれば障害対象のAZを指定できますね。

キー
Placement.AvailabilityZone ap-northeast-1a

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-18_16-27-26_No-00.png

後はEC2障害と同様の際と同様に実験テンプレートを作成ボタンをクリックして実験テンプレートを作成します。

実験開始!

いよいよAZ障害発生させます。
実験開始の流れはEC2障害と同じなので割愛しますね。
実験テンプレート内に設定された複数のアクションが同時にRunningになっています。
RDSやElasticache等は今回作成していないのでSkippedになっています。

SnapCrab_AWS FIS  ap-northeast-1 - Google Chrome_2024-3-15_21-10-30_No-00.png

ap-northeast-1aで起動していたワーカーノードが2台落ちて、、

SnapCrab_my-eks  クラスター  Elastic Kubernetes Service  ap-northeast-1 - Google Chrome_2024-3-15_21-10-45_No-00.png

代りにap-northeast-1cで2台ワーカーノードが自動で起動してきました。
こちらも実験成功です!

SnapCrab_インスタンス  EC2  ap-northeast-1 - Google Chrome_2024-3-15_21-12-58_No-00.png

おわりに

今回はFISを用いてEKSクラスタのAZ障害のシミュレーションを実施してみました。
これまでAZ障害は当然基盤構成で考慮はしないといけないものの、中々テストが難しいと業務で常々思っていましたが、FISを使う事でそれがお手軽に行えましたので感動しています!
業務でも使っていきたいなと思いました!

1
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
1
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?