Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

まずは結論

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

https://github.com/hakobera/docker-locust-gke

overview

要素技術

Locust

http://locust.io/

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

Docker Private Registry

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

使い方

事前準備

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

テストシナリオの準備

https://github.com/hakobera/docker-locust-gke

上記のリポジトリを 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)はベータということもあり、実運用で使うにはまだ怖いですが、内部でテストなどで使う分にはとても便利だと思いました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした