概要
Chaos Monkeyを触りたかったのですが、Chaos Monkey単体では動作せずSpinnakerが必要らしかったので、ローカルマシンで動作させました。Spinnakerはすぐ動いたのですが、Chaos Monkeyが全く動かず気が狂いかけたのでメモとして残しておきます。
環境
- Windows 10 Pro 20H2 19042.685
- Hyper-V
- VMのOSはUbuntu 18.04.5
- VM上で動作させる:minikube version: v1.16.0
- Spinnakerの要求最低スペックがメモリ12GB以上のため、VMのメモリを積んでください。私はメモリ16GB・仮想CPU*2で動作させました。
- Spinnaker 1.20.7
- 最新バージョンだとfront50が起動しないので諦めました。再挑戦したいところではあります。
前提条件
- VMをHyper-V上に用意しておいてください。
- minikubeはあらかじめ導入しておいてください。
Halyard, Spinnakerの導入
VM上で操作します。
Spinnakerのインストール手順に沿ってインストールします。
-
SpinnakerのインストールにHalyardが必要なのでInstall on Debian/Ubuntu and macOSの手順に従ってLocally Install用のスクリプトを実行してください
-
Choose Cloud ProvidersでKubernetes V1 providerを選択します。Kubernetes V2 providerだとChaos Monkeyが動きません。Spinnkerのバージョンが1.20.7より上なら動くんですかね…?
-
Kubernetes V1 providerではdocker loginが必要なので、docker-registry用のセットアップを行ってください。私はDocker Hubのアカウントを使ってセットアップしました。
- docker-registry用のアカウントを作成したら
hal config provider kubernetes account edit my-k8s-account --docker-registries my-docker-registry --provider-version V1
でKubernetes V1 provider用のアカウントを追加します。
- docker-registry用のアカウントを作成したら
-
Spinnakerのインストール先をLocal Debianに設定します
-
External Storageを選択します。私は面倒なのでRedisにしました。
-
VMがデスクトップ版ではない場合は、 Exposing Spinnaker to End Users. の、
Opening Gate and Deck
とMap to your DNS address
の手順で、ホストVMのブラウザからSpinnakerのUI(deck)とAPI(gate)にアクセスできるようにしておきます。デフォルトはlocalhostでアドレスが設定されているため、このままだとホストVMのlocalhostにアクセスしてしまい、SpinnakerのUIに接続できません。bash echo "host: 0.0.0.0" | tee \ ~/.hal/default/service-settings/gate.yml \ ~/.hal/default/service-settings/deck.yml hal config security ui edit --override-base-url http://example.org:9000 hal config security api edit --override-base-url http://example.org:8084
-
hal config features edit --chaos true
でSpinnakerからChaos Monkeyを操作できるようにします。 -
sudo hal deploy apply
からsudo hal deploy connect
でSpinnakerを起動します。すべてのサービスが起動するまで2・3分かかるので待ちます。
こんな画面になっていればOK
初期状態でも、kube-dns等のアプリは取得できるはずです。k8sに配備されているアプリが取得できない場合は、VM上でkubectlコマンドが実行できるか確認してください。
Chaos Monkeyの導入
Chaos Monkey AWS Tutorial – Step-by-Step Guide to Create Failure の手順でセットアップできたため、こちらを参照してください(丸投げ)。なお公式ドキュメントの手順でもセットアップはできますが説明がめちゃめちゃ雑です。
導入にMySQL 5.6以上が必要です。
Chaos Monkeyの動作確認
chaosmonkey eligible <落としたいアプリの名前> <V1アカウント>
で落としたいアプリを選択します。
xxx@spin:~$ chaosmonkey eligible chaos my-k8s-account
chaos-v000-6msvd
xxx@spin:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
chaos-v000-6msvd 1/1 Running 0 76s
echo-deployment-db56d78f6-67776 1/1 Running 0 23m
echo-deployment-db56d78f6-x489m 1/1 Running 0 118m
echo-deployment-db56d78f6-xrbvc 1/1 Running 0 118m
chaosmonkey terminate <落としたいアプリの名前> <V1アカウント>
でアプリを落とします。
xxx@spin:~$ chaosmonkey terminate chaos my-k8s-account
[22118] 2021/01/02 09:52:19 Picked: {chaos my-k8s-account default chaos chaos-v000 chaos-v000-6msvd kubernetes}
xxx@spin:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
chaos-v000-9jhrf 1/1 Running 0 6s
echo-deployment-db56d78f6-67776 1/1 Running 0 23m
echo-deployment-db56d78f6-x489m 1/1 Running 0 119m
echo-deployment-db56d78f6-xrbvc 1/1 Running 0 119m
chaos-v000-6msvd
がTerminateしてchaos-v000-9jhrf
が立ち上がりました。
普段はcronでChaos Monkeyが動作するので、落ちるのを待つ感じです。
所感
全然動かなくて気が狂いそうになりました。1.20.7より上のSpinnakerを使いたかったのですが、Spring Bootがバグってfront50が起動せず、調べても何も出てこないので諦めています。kube-monkey のほうが設定楽だしきれいに動作するので、可能ならこっちか、他のプロダクトを探すことをおすすめします。