🌊
k8s(GKE) + locustで負荷テスト
概要
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
うまく動いています
Discussion