まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

Google Container EngineとLocustを使って負荷テスト環境をさくっと作る

GKE+Locustの負荷テスト環境を作ろうと思った背景

f:id:masato47744:20171106233759p:plain

GKEとLocustを選んでみた理由としては以下のようなポイントでした。

  • インスタンスは秒課金なので気軽に利用できる
  • GKE(k8s)なので動的ポートマッピングの設定などが簡単
  • Locustは単なるpythonのスクリプトのため、urlでアクセスする以外にbotoを使ったKinesisへのアクセスなどの負荷テストも再現できる
  • Node数10ぐらいにすれば1000req/sも再現できた

負荷テストのキモはシナリオを作るところにあるので、どうせなら、他の人も気軽に環境を作れるようにしとこうと思って作りました。

kinesisに対して実行するLocustとGKE上の構成図

f:id:masato47744:20171106234241p:plain

  • Locustはバッタやイナゴという意味で大量に虫の大群が襲ってくるイメージだと思う
  • MasterとSlave構成をとることができてZeroMQを使って協調動作する
  • k8sのReplica SetでSlaveの増減は簡単
  • k8sだから動的ポートマッピング、サービスディスカバリなど自動的にやってくれる
  • ClusterのNode数も簡単に増やせるし、実行してすぐに消せば課金も$1いかないぐらい
  • k8sのyamlを書いてhelm(k8sのパッケージマネージャ的なやつ)で簡単にinstallできるようにしといた

Locustの実行中のイメージ

f:id:masato47744:20171106234731p:plain

使い方

github.com

コードなどはこちらにあります。Rakeタスクで色々セットアップできるようになっています。 GKE前提になってますが、その他はいろいろ読みかえれば使えるはず・・!

ざっくり言うと、こんな流れです。 1. シナリオを実行するlocustのtaskを作成 2. rake cluster:createでGKE作成 3. rake helm:installでデプロイ 4. web UIから実行

シナリオを作るところは、pythonでできた負荷テストツールであるLocustを参考になんでも書けます。

ただのpythonのスクリプトなので、webアクセス以外の負荷テストのシナリオを書くことも可能です。例として、kinesisにアクセスするexampleのtaskもおいてあります。

まとめ

k8sとhelm便利