[Azure] Chaos Studio で AKS の Pod にカオス注入実験してみた
Azure Chaos Studio がプレビュー提供されましたね!
AKS については Chaos Mesh が利用されるとのことで、チュートリアル+α を試してみました。
環境
- AKS 1.21.7
- Windows 10
- WSL2 (Ubuntu 20.04)
デプロイした素材
いつもの Azure Voting App を使いました。
チュートリアルの実施
基本的に、まずは Pod に障害を起こす実験であれば、チュートリアル通りに進めれば大丈夫だと思います。
- AKS クラスターの作成
- Chaos Mesh のインストール
- Chaos Studio への AKS のオンボード
- 実験の作成
- 実験リソースに AKS への権限を付与
- 実験の実行
こんな感じの順番ですね。
注意点 : Kubernetes のバージョン
チュートリアル内で Chaos Mesh をインストールする Helm コマンドの実行時、下記のような警告が出力されます。
MutatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration
上記の通り、Chaos Mesh (v2.0.3) 内部で利用されている実装の一部が Kubernetes の v1.22 以降では動作しない状態となっています。
このため、Kubernetes のバージョンは v1.21.x を利用するようにしましょう。
実際の結果
kubectl get po -w
NAME READY STATUS RESTARTS AGE
azure-vote-back-6c4dd64bdf-crdxw 1/1 Running 0 7s
azure-vote-front-85b4df594d-cj5dt 1/1 Running 0 28s
azure-vote-front-85b4df594d-l9xcl 1/1 Running 0 32s
azure-vote-front-85b4df594d-pbg62 1/1 Running 0 32s
azure-vote-front-85b4df594d-pbg62 1/1 Running 0 2m34s
azure-vote-front-85b4df594d-pbg62 1/1 Running 0 3m4s
azure-vote-front-85b4df594d-pbg62 1/1 Running 1 3m8s
azure-vote-front-85b4df594d-pbg62 1/1 Running 2 3m9s
kubectl get po -w
NAME READY STATUS RESTARTS AGE
azure-vote-back-6c4dd64bdf-crdxw 1/1 Running 0 7m30s
azure-vote-front-85b4df594d-bzkfk 1/1 Running 0 4m14s
azure-vote-front-85b4df594d-l9xcl 1/1 Running 0 7m30s
azure-vote-front-85b4df594d-pbg62 1/1 Running 2 7m30
このように、azure-vote-front-85b4df594d-pbg62
という Pod が 2 回 Restart されています。
Chaos Mesh のアクション pod-failuer
によって Pod が異常終了し、再起動が行われたことがわかります。
Pod Failure: injects fault into a specified Pod to make the Pod unavailable for a period of time.
再起動が 2 回行われているのは、実験の JSON ファイルの duration
で 30s
と指定していたため、継続した注入により複数回の異常終了が発生した、ということですね。
ちなみに、実行後の kubectl describe pods
における「Events」の状態は、下記のようになっていました。
$ kubectl describe pods azure-vote-front-85b4df594d-pbg62
Name: azure-vote-front-85b4df594d-pbg62
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 7m13s default-scheduler Successfully assigned default/azure-vote-front-85b4df594d-pbg62 to aks-agentpool-15067392-vmss000002
Normal Pulled 41s (x2 over 2m12s) kubelet Container image "mcr.microsoft.com/azuredocs/azure-vote-front:v1" already present on machine
Normal Killing 41s (x2 over 71s) kubelet Container azure-vote-front definition changed, will be restarted
Normal Pulled 41s kubelet Container image "gcr.io/google-containers/pause:latest" already present on machine
Normal Created 40s (x3 over 2m12s) kubelet Created container azure-vote-front
Normal Started 40s (x3 over 2m12s) kubelet Started container azure-vote-front
Pod の再起動じゃなくて削除をするには?
前述の通り、チュートリアルではアクションとして pod-failuer
が使われています。これは、下記の通り「指定された時間のあいだ、Pod が異常終了するよう注入する」というアクションです。
Pod Failure: injects fault into a specified Pod to make the Pod unavailable for a period of time.
Pod を削除した際の動きを確認するには、アクションとして pod-kill
を使えば OK です。
Pod Kill: kills a specified Pod.To ensure that the Pod can be successfully restarted, you need to configure ReplicaSet or similar mechanisms.
やってみた
実験の JSON ファイルを下記のように修正しました。
{"action":"pod-kill", "mode":"one", "duration":"30s", "selector":{"namespaces":["default"]}}
保存して実行した結果がこちら
$ kubectl get po -w
NAME READY STATUS RESTARTS AGE
azure-vote-back-6c4dd64bdf-84zmd 1/1 Running 0 4m39s
azure-vote-front-85b4df594d-q7hs9 1/1 Running 0 3m41s
azure-vote-front-85b4df594d-vgggh 1/1 Running 0 4m38s
azure-vote-front-85b4df594d-wdsbz 1/1 Running 0 4m38s
azure-vote-front-85b4df594d-wdsbz 1/1 Terminating 0 5m8s
azure-vote-front-85b4df594d-wdsbz 1/1 Terminating 0 5m8s
azure-vote-front-85b4df594d-gq8rq 0/1 Pending 0 0s
azure-vote-front-85b4df594d-gq8rq 0/1 Pending 0 0s
azure-vote-front-85b4df594d-gq8rq 0/1 ContainerCreating 0 0s
azure-vote-front-85b4df594d-gq8rq 1/1 Running 0 1s
azure-vote-front-85b4df594d-wdsbz
という Pod が Kill されて、新しく azure-vote-front-85b4df594d-gq8rq
という Pod が作成されました。
この通り、アクションとして pod-kill
を使えば、Pod が削除された時の動作を確認することができます。
おわりに
カオスエンジニアリングが簡単にできる…ということで、なかなか便利に使えそうです。
現時点では、実行結果のレポーティングや、実行結果を踏まえたロールバックアクション等の機能は充実していない印象でした。実行結果の画面は実にあっさり…
まだまだプレビュー段階ですが、今後に期待です!
(宣伝)
CodeZine さんにおいて、わたしも執筆に参加させていただいたカオスエンジニアリングの記事を公開済みです!
今回の Azure Chaos Studio ではなく Chaos Toolkit を使った記事ですが、カオスエンジニアリングの概要や考え方なども参考にしていただけるかなと思いますので、是非🤗
Discussion