🌊

k8s(GKE) + locustで負荷テスト

2020/11/28に公開

概要

locust はpython製の負荷テストツールです
シンプルでスケールするため人気の負荷テストツールの一つです

workerを簡単に増減できるのでk8s等を使う場合が多いと思うのですが、
GCPドキュメント だと少し古い部分があるので補足記事です
(自分が使いやすいように独自に変更している部分もあります)

アップデート版リポジトリを使用してコンテナを展開します

git clone git@github.com:yaasita/distributed-load-testing-using-kubernetes.git

クラスタの作成

VPCネィテイブクラスタとして作成します
あと プリエンプティブル オプションをつけると安くなるので付けています

    CLUSTER=gke-load-test
    gcloud container clusters create gke-load-test \
        --enable-autoprovisioning \
        --enable-autoupgrade \
        --enable-ip-alias \
        --enable-shielded-nodes \
        --enable-vertical-pod-autoscaling \
        --image-type "COS" \
        --max-cpu=20 \
        --max-memory=20 \
        --network=default \
        --no-enable-basic-auth \
        --preemptible \
        --subnetwork=default

作成されたらkubectlで使えるようにします

gcloud container clusters get-credentials $CLUSTER

Dockerイメージのビルド

GCPのドキュメントで使用しているlocustは少し古いので
現時点(2022/08/24)で最新の2.11.0までアップデートしています

(taskfileの書き方と起動オプションも変わっているので変更しています)

以下のようにbuildします

export PROJECT=$(gcloud config get-value project)
gcloud builds submit \
    --tag asia-northeast1-docker.pkg.dev/$PROJECT/utils/locust:latest docker-image

locust taskの更新

kustomize と統合された kubectlが必要なので 1.14 以上をインストールしておきます
テストスクリプト更新の度にdocker buildからやり直さないで済むように locustfile.py はconfigmapにしました
(リソースLimitはテストに合わせて適宜調整下さい)

cd kubernetes-config/
export PROJECT=$(gcloud config get-value project)
envsubst < locust-master-controller.yaml.template > locust-master-controller.yaml
envsubst < locust-worker-controller.yaml.template > locust-worker-controller.yaml
kubectl apply -k .

locustfile.pyを更新したら、再度 kubectl apply -k .を実行すれば反映されます

実行

対象ホストは起動時に指定できるようになりました

以下のコマンドで、masterのEXTERNAL-IPを確認して
http://(EXTERNAL-IP):8089/ を開きます

kubectl get svc

start

うまく動いています

locust2

locust1

Discussion