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変更
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追加
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で実行できるようにします。
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 |