2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LocustをLinode Kubernetes Engine(LKE)で構築して負荷試験をやってみた

Posted at

Linodeとは

Linodeについてはこちらを参照。

Locustとは

LocustはPython製のオープンソースの負荷試験ツールです。

特徴

  • 負荷試験のシナリオはPythonで記載できる。
  • リアルタイムダッシュボードが用意されており、試験結果の確認できる。
  • 並列化できるため、大きな負荷をかけることができる。

Linode Kubernetes Engine (LKE)とは

Linode Kubernetes Engine (LKE) は コンテナ化されたアプリケーションやワークロードを展開・管理するための、フルマネージドのKubernetes(K8s)コンテナオーケストレーションエンジンです。

特徴

  • LKEはコンソールから数クリックでプロビジョニングを管理できる。
  • Rancher、Helm、オペレーターなど、人気のあるK8s関連ツールとの統合をサポートしている。
  • コントロールプレーンは無料で利用することができ、オプションで冗長構成(HA)にもすることができる。
  • LKEが動作するインスタンスやネットワーク転送料は他クラウドと比べて断然安く、低コストで構築することができる。

LocustをLinode Kubernetes Engine(LKE)で構築する

今回はHelmを利用してLocustをLKEにインストールします。
Kubernetes上に構築することによって、負荷を行うWorkerを簡単に増やすことができ大規模な負荷試験を行うことができます。
また、Linodeはインスタンス費用が安いのはもちろんのこと、追加のネットワークのアウトバウンド転送料が $0.01 / GBと他クラウドと比べて安く、大規模なネットワークの負荷試験を他のクラウドサービスプロバイダーやオンプレミスへ行う場合でも低コストで実施することができます。

Linode Kubernetes Engine(LKE)の構築

今回は以下の構成でLKEを構築します。

image.png

LKEはLinodeコンソールから数クリックで作成することができます。
今回は以下のパラメーターで作成を行います。

  • Cluster Label : test
  • Region : Tokyo/JP
  • Kubernetes Version : 1.23
  • Node : Linode 2GB / 1 CPU / SSD50GB / Shared CPU x 3台
  • Enable Control Plane : None

本構成の場合には月額30$で運用を始めることができます。

image.png

Clusterの作成はTerraformでも行うことが可能です。
サンプルはこちらになります。

インスタンスの選び方についてはこちらを参考に選定してください。

ダッシュボードの確認とkubeconfigのダウンロード

LKEのダッシュボードからkubectlを利用するためにkubeconfigをダウンロードします。

image.png

Kubernetes Dashboardにもアクセスすることが可能で、Podの情報などの確認も行えます。

image.png

kubectl設定

ダウンロードしたConfigを配置し、KUBECONFIGに定義します。

export KUBECONFIG=test-kubeconfig.yaml

作成したnodeの一覧を取得し、接続確認します。

kubectl get node

NAME                           STATUS   ROLES    AGE   VERSION
lkexxxxx-xxxxxx-xxxxxxxxxxxx   Ready    <none>   22h   v1.23.6
lkexxxxx-xxxxxx-xxxxxxxxxxxx   Ready    <none>   22h   v1.23.6
lkexxxxx-xxxxxx-xxxxxxxxxxxx   Ready    <none>   22h   v1.23.6

LocustをKubernetes上に構築する

今回はHelmを利用してLocustをLKEにインストールします。

リポジトリを追加し、listで確認します。

helm repo add deliveryhero https://charts.deliveryhero.io/
helm repo list

ドキュメントを参考に、Locustの負荷試験で利用するシナリオを作成します。
今回は対象のエンドポイントの/にGETするのみのサンプルを利用します。

vim locustfile.py

from locust import HttpUser, task, between
default_headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'}
class WebsiteUser(HttpUser):
    @task
    def get_index(self):
        self.client.get("/", headers=default_headers)

Configmapを作成します。

kubectl create configmap my-loadtest-locustfile --from-file ./locustfile.py

helmを利用してlocustをkubernetes上にインストールします。

helm install locust deliveryhero/locust \
--set loadtest.locust_locustfile=locustfile.py \
--set loadtest.locust_locustfile_configmap=my-loadtest-locustfile

今回は、レプリカ数を3に変更します。
負荷試験に応じて変更してください。

kubectl scale deployment locust-worker --replicas=3

負荷試験を実施する

管理画面にアクセスするためにポートフォワーディングの設定をします。

kubectl --namespace default port-forward service/locust 8089:8089

http://0.0.0.0:8089 にアクセスし管理画面にアクセスします。

image.png

Number of users (peak concurrency):リクエストを投げるクライアントの最大数
Spawn rate (users started/second):1秒あたりに増加する秒間ユーザ数
Host (e.g. http://www.example.com ):リクエスト先のURL

試験結果をリアルタイムに確認することができます。

image.png

以上で構築は終了です。

さいごに

Linode Kubernetes Engine(LKE)はKubernetesを低コストで利用することができ、転送料も安いことから大規模の負荷試験などの利用方法にも適しています。
今回のLocustのテストシナリオをカスタマイズすることで様々な環境に合った試験が行えます。

関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?