Pod障害のシミュレーション
概要
このラボでは、Kubernetes環境内でPod障害をシミュレーションして、システムがどのように応答し回復するかを観察します。この実験は、Podが予期せず障害が発生した場合に、アプリケーションの回復力を逆境下でテストするように設計されています。
pod-failure.shスクリプトは、KubernetesのパワフルなカオスエンジニアリングプラットフォームであるChaos Meshを使用してPod障害をシミュレーショ ンします。この制御された実験によって、以下が可能になります:
- Pod障害に対するシステムの即時対応を観察する
- 自動回復プロセスを監視する
- シミュレーションされた障害にもかかわらず、アプリケーションが利用可能であることを確認する
この実験は繰り返し実行可能であり、一貫した動作を確認したり、さまざまなシナリオや構成をテストしたりすることができます。これは私たちが使用するスクリプトです:
~/environment/eks-workshop/modules/observability/resiliency/scripts/pod-failure.sh
#!/bin/bash
# pod-failure.sh - Simulates pod failure using Chaos Mesh
# Generates a unique identifier for the pod failure experiment
unique_id=$(date +%s)
# Create a YAML configuration for the PodChaos resource
kubectl apply -f - <<EOF
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-failure-$unique_id
namespace: ui
spec:
action: pod-kill
mode: one
selector:
namespaces:
- ui
labelSelectors:
"app.kubernetes.io/name": "ui"
duration: "60s"
EOF
# Apply the PodChaos configuration to simulate the failure
#kubectl apply -f pod-failure.yaml
実験の実行
ステップ1:初期Pod状態の確認
まず、ui名前空間内のPodの初期状態を確認しましょう:
~$kubectl get pods -n ui -o wide
次のような出力が表示されるはずです:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ui-6dfb84cf67-44hc9 1/1 Running 0 46s 10.42.121.37 ip-10-42-119-94.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-6d5lq 1/1 Running 0 46s 10.42.121.36 ip-10-42-119-94.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-hqccq 1/1 Running 0 46s 10.42.154.216 ip-10-42-146-130.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-qqltz 1/1 Running 0 46s 10.42.185.149 ip-10-42-176-213.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-rzbvl 1/1 Running 0 46s 10.42.188.96 ip-10-42-176-213.us-west-2.compute.internal <none> <none>
すべてのPodが同様の開始時間(AGE列に表示)を持っていることに注意してください。
ステップ2:Pod障害のシミュレーション
次に、Pod障害をシミュレーションしましょう:
~$~/$SCRIPT_DIR/pod-failure.sh
このスクリプトはChaos Meshを使用してPodの1つを終了させます。
ステップ3:回復の観察
Kubernetesが障害を検出して回復を開始するのを待つために数秒待ってから、もう一度Pod状態を確認します:
~$kubectl get pods -n ui -o wide
次のような出力が表示されるはずです:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ui-6dfb84cf67-44hc9 1/1 Running 0 2m57s 10.42.121.37 ip-10-42-119-94.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-6d5lq 1/1 Running 0 2m57s 10.42.121.36 ip-10-42-119-94.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-ghp5z 1/1 Running 0 6s 10.42.185.150 ip-10-42-176-213.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-hqccq 1/1 Running 0 2m57s 10.42.154.216 ip-10-42-146-130.us-west-2.compute.internal <none> <none>
ui-6dfb84cf67-rzbvl 1/1 Running 0 2m57s 10.42.188.96 ip-10-42-176-213.us-west-2.compute.internal <none> <none>
[ec2-user@bc44085aafa9 environment]$
Podの1つ(この例では ui-6dfb84cf67-ghp5z)のAGE値が非常に低いことに注意してください。これはシミュレーションによって終了したPodを置き換えるために、Kubernetesが自動的に作成したPodです。
これにより、ui名前空間内の各Podの状態、IPアドレス、およびノードが表示されます。