LoginSignup
1
1

More than 1 year has passed since last update.

locustとGKEで負荷テストの実行とローカル実行環境

Last updated at Posted at 2022-03-29

Googleが公開しているGKE(Google Kubernetes Engine)を利用したlocustの負荷試験環境のDockerイメージを、
locust公式のDockerイメージを使うように変更しました。
ついでにローカルでテストできるようにdocker-compose.ymlも追加しました。

locust公式のDockerイメージを使うことでpipで必要なパッケージをインストールするだけなのでビルドが早くなり、Dockerイメージが軽量になりました。

ローカル環境

macOS
Docker Desktop for Mac

GitHub

参考

locust公式
locust公式DockerHub
locustドキュメント(Running in Docker)
Google Kubernetes Engine を使用した負荷分散テスト

ファイル構成

Googleの提供しているGitHubの環境をベースにlocust公式のDockerイメージを使えるように変更しています。

ドキュメントルート
  ├─ docker-locust
  │    ├─ Dockerfile
  │    ├─ run.sh
  │    └─ source ※locustの実行ファイル
  │       └ main.py
  ├─ kubernetes-config ※k8sの設定ファイル
  │  ├─ locust-master-controller.yaml
  │   ├─ locust-master-service.yaml
  │   └─ locust-worker-controller.yaml
  ├─ README.md
  └─ docker-compose.yml ※ローカル用の設定ファイル

主な変更点

Dockerfile変更
docker-locust/Dockerfile
FROM locustio/locust

ADD source /locust-source

ADD run.sh /home/locust/run.sh

EXPOSE 5557 5558 8089

USER root
RUN chown locust:locust /home/locust/run.sh

USER locust
RUN chmod 755 /home/locust/run.sh

ENTRYPOINT ["/home/locust/run.sh"]

イメージに「locustio/locust」をしようして「run.sh」のグループと所有者を変更するために一度rootユーザーになっています。

docker-compose.yml追加
docker-compose.yml
version: '3'

services:
    locust_master:
        build: ./docker-locust
        container_name: locust-master
        ports:
            - 8089:8089
        volumes:
            - ./docker-locust/source:/locust-source
        environment:
            - LOCUST_MODE=master
            - TARGET_HOST=http://localhost

    locust_worker:
        build: ./docker-locust
        volumes:
            - ./docker-locust/source:/locust-source
        environment:
            - LOCUST_MODE=worker
            - LOCUST_MASTER=locust-master
            - TARGET_HOST=http://localhost

environmentで指定している「TARGET_HOST」は必要に応じて修正

GKEでの実行方法

Google Kubernetes Engine を使用した負荷分散テスト」の「環境の設定」に出てくるgitリポジトリを「https://github.com/marv-kashiwabarak/locust_config」に変更して後は同じ。

変更内容は下記のとおりです。

環境の設定

1. GitHub からサンプル リポジトリのクローンを作成します。
git clone https://github.com/marv-kashiwabarak/locust_config
2. 作業ディレクトリをクローニングしたリポジトリに変更します。
cd locust_config

ローカルでの実行

https://github.com/marv-kashiwabarak/locust_configをクローンします。

Web UIで実行

$ cd [ドキュメントルート]
$ docker-compose up --scale locust_worker=[ワーカー数]

起動できたらWeb UIの「http://localhost:8089/」にアクセスします。

cliで実行

cliで実行するとWeb UIを使わなくても負荷試験が開始されるのでローカルでのテストが若干簡素化できます。

docker-compose.ymlを編集してcliで実行できるようにします。

docker-compose.yml
version: '3'

services:
    locust_master:
        build: ./docker-locust
        container_name: locust-master
        ports:
            - 8089:8089
        volumes:
            - ./docker-locust/source:/locust-source
        # コマンド事実行追加 -u:ユーザー数 -r:ユーザーの増加数/秒
        entrypoint: locust -f /locust-source/main.py --host=http://localhost --master --headless -u 1 -r 1

    locust_worker:
        build: ./docker-locust
        volumes:
            - ./docker-locust/source:/locust-source
        environment:
            - LOCUST_MODE=worker
            - LOCUST_MASTER=locust-master
            - TARGET_HOST=http://localhost

docker-compose.ymlのlocust_masterにentrypointを追加してコマンド実行できるようにします。
起動はWeb UIと同じ下記コマンドで起動します。

$ cd [ドキュメントルート]
$ docker-compose up --scale locust_worker=[ワーカー数]

起動したら負荷試験が開始され下記のように実行結果を随時出力してくれます。

locust-master    |  Name                                                                              # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s
locust-master    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------
locust-master    |  GET /                                                                                  4     0(0.00%)  |      46      37      53      44  |    0.33    0.00
locust-master    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------
locust-master    |  Aggregated                                                                             4     0(0.00%)  |      46      37      53      44  |    0.33    0.00
locust-master    |
locust-master    |  Name                                                                              # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s
locust-master    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------
locust-master    |  GET /                                                                                  5     0(0.00%)  |      48      37      53      52  |    0.38    0.00
locust-master    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------
locust-master    |  Aggregated                                                                             5     0(0.00%)  |      48      37      53      52  |    0.38    0.00
locust-master    |
locust-master    |  Name                                                                              # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s
locust-master    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------
locust-master    |  GET /                                                                                  5     0(0.00%)  |      48      37      53      52  |    0.38    0.00
locust-master    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------
locust-master    |  Aggregated                                                                             5     0(0.00%)  |      48      37      53      52  |    0.38    0.00
locust-master    |
1
1
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
1
1