TL;DR
- Litmus Chaosとはなんぞや
- 自前のRKE2クラスタにLitmus Chaosをインストールしたよ
- Podを削除するカオス実験をしたよ
Litmus Chaosとは
オープンソースのカオスエンジニアリングツールです.
カオスエンジニアリングといえばNetflixのChaos Monkeyが有名ですが,特にKubernetesに特化したカオスエンジニアリングツールとしてChaos MeshやLitmus Chaosが挙げられます.
個人的にLitmus ChaosはChaos Meshよりも安定して動作する印象があります.
ちなみにクラウドネイティブを推進する財団 CNCF (Cloud Native Computing Foundation) のincubating projectsでもあります.
https://litmuschaos.io/
Litmus Chaosのインストール
おもむろにHelmでインストールします.
実装環境
- Ubuntu 22.04.1 LTS
- RKE2 v1.24.12(Kubernetes環境)
- Helm v3.12.0
- kubectl v1.25.3
Helm
リポジトリを追加
helm repo add litmuschaos https://litmuschaos.github.io/litmus-helm/
チャートを検索
helm search repo litmuschaos
NAME CHART VERSION APP VERSION DESCRIPTION
litmuschaos/kube-aws 2.14.0 2.14.0 A Helm chart to install litmus aws chaos experi...
litmuschaos/kube-azure 2.14.0 2.14.0 A Helm chart to install litmus Azure chaos expe...
litmuschaos/kube-gcp 2.14.0 2.14.0 A Helm chart to install litmus gcp chaos experi...
litmuschaos/kubernetes-chaos 2.28.0 2.14.0 A Helm chart to install litmus chaos experiment...
litmuschaos/litmus 2.15.10 2.14.0 A Helm chart to install ChaosCenter
litmuschaos/litmus-agent 0.1.4 0.1.4 A Helm chart to install litmus agent
litmuschaos/litmus-core 2.14.0 2.14.0 A Helm chart to install litmus infra components...
ネームスペースの作成
kubectl create ns litmus
作成したネームスペースでlitmusをインストール
helm install chaos litmuschaos/litmus -n litmus
NAME: chaos
LAST DEPLOYED: Sat Jul 1 14:36:45 2023
NAMESPACE: litmus
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing litmus 😀
Your release is named chaos and it's installed to namespace: litmus.
Visit https://docs.litmuschaos.io to find more info.
エラー対処
Podが立たない😇
kubectl get pod -n litmus
NAME READY STATUS RESTARTS AGE
chaos-litmus-auth-server-65bbc55ddf-45nqc 0/1 Init:0/1 0 86s
chaos-litmus-frontend-588f4c66cf-6cqn2 1/1 Running 0 86s
chaos-litmus-server-7fb7954696-2m7j2 0/1 Init:0/1 0 86s
chaos-mongodb-79b779578-hvmff 0/1 Pending 0 85s
なんだかデータベースのMongoDBがPendingになっている
永続ボリュームが怪しい🤨
kubectl get pvc -n litmus
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
chaos-mongodb Pending 2m12s
やっぱりPVCがPendingでした.
そこでPVCの詳細をkubectl describeで見てみます.
kubectl describe pvc chaos-mongodb -n litmus
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal FailedBinding 95s (x26 over 7m37s) persistentvolume-controller no persistent volumes available for this claim and no storage class is set
利用可能なPVが無い!ストレージクラスがセットされていない!と怒られている気がします.
そこでPVCに既存のストレージクラスを追加してみます.
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path rancher.io/local-path Delete WaitForFirstConsumer false 36d
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: chaos-mongodb
namespace: litmus
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
volumeMode: Filesystem
#下記を追記
storageClassName: local-path
PVCを消して新しくapplyしてみます.
kubectl delete pvc chaos-mongodb -n litmus
kubectl apply -f pvc.yaml
新しいPVCを使用するためにpodを削除
kubectl delete pod --all -n litmus
pod "chaos-litmus-auth-server-65bbc55ddf-45nqc" deleted
pod "chaos-litmus-frontend-588f4c66cf-6cqn2" deleted
pod "chaos-litmus-server-7fb7954696-2m7j2" deleted
pod "chaos-mongodb-79b779578-hvmff" deleted
確認
kubectl get pod -n litmus
NAME READY STATUS RESTARTS AGE
chaos-litmus-auth-server-65bbc55ddf-8zsqd 1/1 Running 0 46s
chaos-litmus-frontend-588f4c66cf-zn2ww 1/1 Running 0 46s
chaos-litmus-server-7fb7954696-dvhs4 1/1 Running 0 46s
chaos-mongodb-79b779578-kxvnt 1/1 Running 0 46s
全てのPodが起動しました!
Litmus Chaosを使ってみる
アクセス
kubectl port-forwardを使ってfrontendにアクセスしてみます.
kubectl get svc -n litmus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
chaos-litmus-auth-server-service ClusterIP 10.43.240.149 <none> 9003/TCP,3030/TCP 18m
chaos-litmus-frontend-service ClusterIP 10.43.16.75 <none> 9091/TCP 18m
chaos-litmus-server-service ClusterIP 10.43.158.78 <none> 9002/TCP,8000/TCP 18m
chaos-mongodb ClusterIP 10.43.66.109 <none> 27017/TCP 18m
kubectlを実行しているノードの9091番ポートをfrontendサービスに転送
kubectl -n litmus port-forward svc/chaos-litmus-frontend-service 9091:9091 --address 0.0.0.0 &
ブラウザからアクセスすると次のような画面が出てきます.(デフォルトではユーザ名:admin,パスワード:litmus)
カオス実験
メニューのChaos Scenariosを選択し,右上のSchedule a Chaos Scenarioからカオス実験をスケジュールすることができます.
今回はChaosHubsからKubernetesクラスタ内の任意のPodを削除するpod-deleteを試してみたいと思います.
下記のgeneric/pod-deleteを選択
設定が終わると先ほどのchaos Scenariosに実行中のカオス実験が表示されます.
実験が終了すると結果の詳細を確認することができます.
終わりに
Litmus Chaosのインストールから簡単なカオス実験までをまとめてみました.
個人的にはカオス実験のシナリオをGUIを使って直感的に操作できるのがとっても良いと思いました!
それでは良いカオス体験を!