チェックポイント
Get the sample code and build a Docker image for the application
/ 20
Deploy Web Application
/ 20
Deploy Kubernetes Cluster
/ 20
Load testing master
/ 20
Load testing workers
/ 20
Kubernetes を使用した負荷分散のテスト
GSP182
概要
このラボでは、Kubernetes Engine を使用して負荷分散テスト フレームワークをデプロイする方法を学習します。このフレームワークでは、複数のコンテナを使用して、REST ベースのシンプルな API の負荷テスト トラフィックを作成します。このソリューションでは、シンプルなウェブ アプリケーションをテストしますが、同じパターンを使用してゲーム アプリケーションやモノのインターネット(IoT)アプリケーションなどの複雑な負荷テストシナリオを作成することもできます。ここでは、コンテナベースの負荷テスト フレームワークの一般的なアーキテクチャについて説明します。
テスト対象システム
このラボのテスト対象システムは、Google App Engine にデプロイされているシンプルなウェブ アプリケーションです。このアプリケーションは、REST スタイルの基本的なエンドポイントを公開して、受信 HTTP POST リクエストをキャプチャします(受信データは永続化されません)。
サンプルのワークロード
デプロイするアプリケーションは、モノのインターネット(IoT)の多くのデプロイで見られるバックエンド サービス コンポーネントをモデルにして作成されています。まずデバイスがサービスに登録し、次に指標やセンサー測定値の報告を開始するとともに、定期的にサービスに再登録するという一連のインタラクションが行われます。
次の図は、一般的なバックエンド サービス コンポーネントのインタラクションを示しています。
このインタラクションをモデル化するために、Locust
を使用します。これは、複数のターゲットパスにまたがってリクエストを分散できる Python ベースの負荷テストツールです。たとえば Locust は、リクエストを /login
と /metrics
のターゲットパスに分散できます。
ワークロードは前述のインタラクションに基づいており、Locust で一連のタスクとしてモデル化されます。実際のクライアントに近づけるために、各 Locust タスクが重み付けされます。たとえば、クライアント リクエストが 1,000 個ごとに登録が 1 回発生します。
コンテナベースのコンピューティング
-
Locust コンテナ イメージとは、Locust ソフトウェアに含まれている Docker イメージです。
-
コンテナ クラスタ
は、少なくとも 1 つのクラスタ マスターマシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。このマスターマシンとノードマシンが、Kubernetes クラスタのオーケストレーション システムを実行します。 クラスタの詳細については、Kubernetes Engine のドキュメントをご覧ください。 -
ポッド
とは、1 つのホストに同時にデプロイされる 1 つ以上のコンテナであり、定義、デプロイ、そして管理が可能な最小のコンピューティング単位です。一部のポッドには、コンテナが 1 つしか含まれていません。たとえば、このラボでは、各 Locust コンテナが各々のポッドで実行されます。 -
Deployment コントローラ
では、ポッドと ReplicaSet に宣言型の更新が行われます。このラボには、locust-master
用とlocust-worker
用の 2 つの Deployment があります。
サービス
ノードの障害または更新やメンテナンスのための意図的なノードの中断などのさまざまな理由で、特定のポッドが表示されないことがあります。このような場合、ポッドの IP アドレスが、そのポッドに信頼できるインターフェースを提供していません。より信頼性の高いアプローチでは、インターフェースの変更されない抽象表現を使用し、基になるポッドが表示されず、IP アドレスが異なる新しいポッドに置き換えられる場合でも、インターフェースが提供されるようにしています。Kubernetes Engine のサービス
では、ポッドの論理セットとポッドへのアクセスに使われるポリシーを定義することで、このタイプの抽象インターフェースを提供します。
このラボでは、ポッドやポッドのセットを表すいくつかのサービスを使用します。たとえば、DNS サーバーポッドのサービス、Locust マスターポッドのサービス、10 個すべての Locust ワーカーポッドを表すサービスがあります。
次の図は、マスターノードとワーカーノードの内容を示しています。
学習内容
- テスト対象システム、つまり Google App Engine にデプロイされるシンプルなウェブ アプリケーションを作成する。
- Kubernetes Engine を使用して負荷分散テスト フレームワークをデプロイする。
- シンプルな REST ベースの API の負荷テスト トラフィックを作成する。
前提条件
- Google Cloud の App Engine サービスと Kubernetes Engine サービスの基本知識。
- Linux の標準的なテキスト エディタ(Vim、Emacs、Nano など)を使い慣れていること。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. プロジェクトとゾーンを設定する
- ラボに使用する
project id
、region
、zone
の環境変数を定義します。
タスク 2. サンプルコードを入手してアプリケーション用の Docker イメージを作成する
- 次のコマンドを実行してリポジトリからソースコードを取得します。
- 作成したディレクトリに移動します。
- Docker イメージを作成してコンテナ レジストリに保存します。
出力例:
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 3. ウェブ アプリケーションをデプロイする
sample-webapp
フォルダには、「テスト対象システム」としてシンプルな Google App Engine の Python アプリケーションが含まれています。
- このアプリケーションをプロジェクトにデプロイするには、
gcloud app deploy
コマンドを使用します。
コマンドの実行後、次の操作を行うよう求められます。
このプロジェクトのリージョンとして us-central
を選択するには、プロンプトに対して「10」を入力します。
TARGET
変数に格納されている locust-master
および locust-worker
の Deployment をデプロイするときに、デプロイされたサンプル ウェブ アプリケーションの URL が必要になります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 4. Kubernetes クラスタをデプロイする
- まず、以下の
gcloud
コマンドを使用して Google Kubernetes Engine クラスタを作成します。
出力例:
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 5. 負荷テストのマスター
Deployment の最初のコンポーネントは、Locust マスターです。このマスターは、前述の負荷テストのタスクを実行するためのエントリ ポイントです。必要となるマスターは 1 つだけであるため、Locust マスターは、レプリカが 1 つでデプロイされます。
マスター Deployment の構成で、コンテナによって公開される必要があるポート(ウェブ インターフェースの場合は 8089
、ワーカーとの通信の場合は 5557
と 5558
)などのいくつかの要素を指定します。この情報は、Locust ワーカーを構成するために後で使用されます。
次のスニペットには、ポートの構成が含まれています。
タスク 6. locust-master をデプロイする
-
locust-master-controller.yaml
とlocust-worker-controller.yaml
の中の[TARGET_HOST]
と[PROJECT_ID]
をそれぞれデプロイされたエンドポイントとプロジェクト ID に置き換えます。
- Locust マスターを以下のようにデプロイします。
-
locust-master
ポッドが作成されたことを確認するには、次のコマンドを実行します。
- 次に、
locust-master-service
をデプロイします。
このステップで、内部の DNS 名(locust-master
)とポート 8089
、5557
、5558
を使用するポッドが公開されます。このステップの一環として、locust-master-service.yaml
の type: LoadBalancer
ディレクティブが、一般公開されている IP アドレスから locust-master
ポッドへの Google Compute Engine 転送ルールを作成するように Google Kubernetes Engine に指示します。
- 新しく作成した転送ルールを表示するには、次のコマンドを実行します。
出力例:
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 7. 負荷テストのワーカー
Deployment の次のコンポーネントは、前述の負荷テストのタスクを実行する Locust ワーカーです。Locust ワーカーは、複数のポッドを作成する 1 つの Deployment によってデプロイされます。ポッドは、Kubernetes クラスタ全体に分散されます。各ポッドでは、環境変数を使用して、テスト対象システムのホスト名、Locust マスターのホスト名などの重要な構成情報を制御します。
Locust ワーカーがデプロイされ、Locust マスターのウェブ インターフェースに戻ると、デプロイされたワーカー数にスレーブ数が対応していることを確認できます。
次のスニペットには、名前、ラベル、レプリカ数に関する Deployment の構成が含まれています。
locust-worker をデプロイする
- 次に
locust-worker-controller
をデプロイします。
-
locust-worker-controller
は、5 つのlocust-worker
ポッドをデプロイするように設定されています。ポッドがデプロイされたことを確認するために、以下のコマンドを実行します。
シミュレート対象のユーザー数をスケールアップする場合は、Locust ワーカーポッド数を増やす必要があります。Deployment によってデプロイされるポッドの数を増やす場合、Kubernetes では再デプロイすることなく Deployment のサイズを変更できる機能が用意されています。
- 次のコマンドを指定すると、Locust ワーカーポッドのプールが
20
に拡張されます。
- ポッドが起動済みで準備されていることを確認するには、次のコマンドで
locust-worker
ポッドのリストを取得します。
次の図は、Locust マスターと Locust ワーカー間の関係を示しています。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 8. テストを実行する
- Locust テストを実行するには、次のコマンドで外部 IP アドレスを取得します。
- リンクをクリックして、Locust マスターのウェブ インターフェースに移動します。
Locust マスターのウェブ インターフェースを使用すると、テスト中のシステムに対して負荷テストのタスクを実行できます。
-
開始するには、シミュレートするユーザーの合計数と各ユーザーの生成速度を指定します。
-
次に、[Start swarming] をクリックしてシミュレーションを開始します。たとえば、ユーザー数を 300、速度を 10 に指定できます。
-
[Start swarming] をクリックします。
時間が経過しユーザーが生成されるにつれて、リクエスト数や 1 秒あたりのリクエスト数などのシミュレーション指標が集計されます。
- シミュレーションを停止するには、[Stop] をクリックすると、テストが終了します。全体の結果は、スプレッドシートにダウンロードできます。
お疲れさまでした
Kubernetes Engine を使用して負荷分散テスト フレームワークをデプロイしました。
クエストを完了する
このセルフペース ラボは、「Google Cloud Solutions I: Scaling Your Infrastructure」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のラボを受講する
次のラボに進んでクエストを続けるか、Google Cloud Skills Boost のラボをご確認ください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2023 年 10 月 12 日
ラボの最終テスト日: 2023 年 10 月 12 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。