179
174

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker + Google Container Engine でドカドカ負荷テスト

Last updated at Posted at 2015-01-14

まずは結論

こんな環境が Google Container Engine 上に一発で作れるスクリプトとDocker Imageを作った。

overview

要素技術

Locust

Python製OSSの負荷テストツール。分散テストモードがあって、簡単に複数台から負荷をかけるクラスタを構築することができる。今回は、環境変数で master, slave を切り替えられる Docker Image をベースにしている。

Docker Private Registry

Google Container Engine で private repository を利用する方法を参照してください。

使い方

事前準備

  • ビルドサーバに gcloud SDK をインストールし、認証が終わっていること
  • gcloud コマンドでデフォルトの GCP の PROJECT_ID が設定してあること(下記のコマンドでは --projectId オプションを全て省略しているため)
  • GCS に Docker registry 用のバケットを作成していること

テストシナリオの準備

上記のリポジトリを clone(または fork) して、test/locustfile.py を書き換えて、テストユーザの作成やテストデータ(DB)の作成処理なども必要に応じて追加します。

Docker Image の build & push

IMAGE_ID と GCS_BUCKET を設定して、./script/cluster push するだけ。

$ IMAGE_ID=locust-gke \
  GCS_BUCKET=<your-bucket> \
  ./script/cluster push

共通の環境変数の設定

クラスタ名と作成する GCP の zone を設定します。

$ export GKE_CLUSTER=<your-cluster>
$ export GKE_ZONE=<your-zone>

なお余談ですが、現状、Google Container Engine は region はもとより、zone もまたげないので、multi region とかやりたい場合は、cluster を複数作る必要があります。

Google Container Engine 上に cluster を構築

$ IMAGE_ID=locust-gke \
  GCS_BUCKET=<your-bucket> \
  GKE_NETWORK=<your-network> ]
  TARGET_URL=<your-load-test-target-url> \
  LOCUST_SLAVE_COUNT=3 \
  ./script/cluster start

LOCUST_SLAVE_COUNT で負荷をかける側のサーバを増減させることができます。

作成が完了したら、kubernetes の web console を開いて、pod/service の配置を確認しましょう。残念ながら現状 SSL の警告がでます。きちんと確認した上で開きましょう。

$ ./script/cluster open-kubernetes

kubernetes.png

podの名前がGUIDになっているやつがslaveです。

なお、現状 open-X 系のコマンドはMac OS X でしか動きません。すみません。

Locust Web コンソールを開く

$ ./script/cluster open-locust

ちゃんと SLAVES 3 で起動していますね。

スクリーンショット 2015-01-14 10.08.39.png

後片付け

負荷テストが終わったら、cluster を停止して終了です。

$ ./script/cluster stop

この環境を作った動機

この構成、もともと AWS CLI + ansible で AWS上で実現していた環境を移植したものです。AWS でも負荷テストという意味では実現できていたのですが、以下の問題がありました。概ね解決できたと思います。

ネットワーク帯域がサチる

負荷をかける側はCPU/メモリはそんなに利用しないので、小さいインスタンスを利用したいが、EC2はインスタンスが小さいとネットワーク帯域もせまいので、そこで負荷がかけきれない問題があった。結局大きいインスタンスを利用していたけど、コスト的になんとかしたいという思いがあった。

GKEというか、GCE はネットワークがインスタンスサイズに依存しない(してるかもしれないけど、小さいインスタンスでも同等サイズの AWS EC2 よりネットワークが速い)ので、ネットワーク帯域を大量に使用する負荷テストには向いてると思いました。

起動速度が遅い

どうしても EC2 のインスタンスの起動は時間がかかり、更に ansible も流さないといけないので、複数パターンでテストする場合、どうしても時間がかかってイライラすることもあったのですが、GKEはGCEのインスタンスの起動が速いのと、Docker Imageで構築済みの環境をすぐに立ち上げることができるので、快適でした。Docker Image の build も初回以外は速いですし。

感想

GKE(Google Container Engine)はベータということもあり、実運用で使うにはまだ怖いですが、内部でテストなどで使う分にはとても便利だと思いました。

179
174
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
179
174

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?