Windows 10 Pro, Hyper-V, minikube環境でSpinnakerからChaos Monkeyを動かす。

概要

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のインストール手順に沿ってインストールします。

  1. SpinnakerのインストールにHalyardが必要なのでInstall on Debian/Ubuntu and macOSの手順に従ってLocally Install用のスクリプトを実行してください
  2. Choose Cloud ProvidersでKubernetes V1 providerを選択します。Kubernetes V2 providerだとChaos Monkeyが動きません。Spinnkerのバージョンが1.20.7より上なら動くんですかね…?
  3. 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用のアカウントを追加します。
  4. Spinnakerのインストール先をLocal Debianに設定します
  5. External Storageを選択します。私は面倒なのでRedisにしました。
  6. VMがデスクトップ版ではない場合は、 Exposing Spinnaker to End Users. の、Opening Gate and DeckMap to your DNS addressの手順で、ホストVMのブラウザからSpinnakerのUI(deck)とAPI(gate)にアクセスできるようにしておきます。デフォルトはlocalhostでアドレスが設定されているため、このままだとホストVMのlocalhostにアクセスしてしまい、SpinnakerのUIに接続できません。
    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
  7. hal config features edit --chaos trueでSpinnakerからChaos Monkeyを操作できるようにします。
  8. sudo hal deploy apply から sudo hal deploy connectでSpinnakerを起動します。すべてのサービスが起動するまで2・3分かかるので待ちます。

こんな画面になっていればOK

file

file

初期状態でも、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 のほうが設定楽だしきれいに動作するので、可能ならこっちか、他のプロダクトを探すことをおすすめします。