ども、かっぱです。
tl;dr
タイトルは面倒臭い感じですが、要は Docker Compose と Locust を組み合わせてみようという試みです。
参考
hakobera.hatenablog.com
qiita.com
有難うございます。
考察
最終的にはこんなイメージ
になります。
教材
github.com
Locust という負荷テストツール
すっかり書いたことを忘れていましたが、以下のような記事を書いていました。
cloudpack.media
- Python で書かれた負荷テストツール
- お手軽にクラスタを構成出来る
- テストシナリオを Python DSL で記載出来る
Dockerfile
Docker イメージのサイズを出来る限り抑えることが出来ると謳われていて、Docker のオフィシャルイメージにも採用されるという Alpine Linux を利用してイメージを作成してみます。
FROM python:2.7.11-alpine RUN apk update && apk add python-dev build-base && pip install locustio pyzmq && apk del python-dev && rm -f /var/cache/apk/* && mkdir /locust ADD test.py /locust/test.py EXPOSE 5557 5558 8089 ENTRYPOINT ["/usr/local/bin/locust", "-f", "/locust/test.py"]
レイヤーも抑える努力も少しやってみる。Alpine Linux について引き続き勉強していかん。
docker-compose.yml
以下のようにシンプルに。
version: "2" services: master: build: . command: -H http://example.inokara.com --master ports: - "8080:8089" slave: build: . command: --slave --master-host=master depends_on: - master
マスターとスレーブのそれぞれの起動方法についても上記の参考記事をご覧ください。
docker-compose up
$ docker-compose up
Locust のマスターとスレーブが一台ずつ起動されて以下のように出力されます。
$ docker-compose up Starting dockerlocustsample_master_1 Starting dockerlocustsample_slave_1 Attaching to dockerlocustsample_master_1, dockerlocustsample_slave_1 master_1 | [2016-03-11 17:30:51,096] 2b816ee3af3f/INFO/locust.main: Starting web monitor at *:8089 master_1 | [2016-03-11 17:30:51,099] 2b816ee3af3f/INFO/locust.main: Starting Locust 0.7.3 slave_1 | [2016-03-11 17:30:51,153] aff9eddb5f26/INFO/locust.main: Starting Locust 0.7.3 master_1 | [2016-03-11 17:30:51,156] 2b816ee3af3f/INFO/locust.runners: Client 'aff9eddb5f26_6d0fce57bf760b972b4482f1701db688' reported as ready. Currently 1 clients ready to swarm.
ブラウザからもアクセスしてみます。
スケールアップ&ダウン
Docker Compose ならばスケールアップ、ダウンもお手の物です。
$ docker-compose scale slave=2
スケールアップしてみると…以下のように Slave が 2 になる。
スケールダウンも以下のように実行すると Slave が 1 になる。
$ docker-compose scale slave=1
簡単。
しかし…
この状態だと Docker Engine が動いている単一のホスト上でスケールアップ、スケールダウンするだけなのでつまらないし、そもそもホストの性能限界に達してしまい負荷をかけ続けることが出来なくなりますな。これを解決する方法を次回は考察してみます。
ということで
Alpine Linux は
ホントにちっちゃい。pull がめっちゃ速く感じました。
Locust についても
試験結果の読み方等を復習する必要があります。