Kubernetes のスケーラビリティ モデル (水平および垂直) は、独立したリクエストのストリームを処理するアプリケーションのスケーリングに最適化されており、スケーラビリティ要件の変化に応じて Pod の動的な再起動を可能にします。さらに、水平モデルでは、Service によって外部に公開されている 1 つのポートの背後で複数の Pod を実行できます。これらのモデルは、Load Test のスケーラビリティ メカニズムには適していません。Load Test コントローラーは、負荷テストの開始時に特定のホストおよびポートでリモートマシンへの永続的な接続を確立します。この接続は、負荷テストの実行中ずっと開いたままにする必要があります。Load Test のリモート マシンで実行されている Pod が、スケーラビリティ要件の変更に応じて再起動されると、コントローラーとの接続が失われ、このマシン/Pod は現在の負荷テストに参加しなくなります。さらに、サービスの背後で複数の Pod が実行されている場合、永続的な接続はそのうちの 1 つの Pod に対してのみ確立され、負荷テストの実行中は他の Pod はアイドル状態になります。このため、Kubernetes の水平および垂直自動スケーリングを Load Test で使用することは推奨しません。ただし、このドキュメントで説明しているように、Kubernetes クラスターのコンピューティング リソースを使用して負荷テストをスケールアップすることは可能です。
Load Test サーバーを Kubernetes にデプロイするには、まず次の内容の YAML ファイルを作成します (この例では、loadtest-pod-1.yaml と呼びます)。
apiVersion: v1
kind: Pod
metadata:
name: loadtest-1
labels:
app: loadtest-1
spec:
containers:
- name: loadtest-1
image: parasoft/soavirt
imagePullPolicy: IfNotPresent
ports:
- name: loadtest-port-1
containerPort: 8189
command: [ "/usr/local/parasoft/soavirt/loadtest" ]
args: [ "-loadtestserver" ]
env:
- name: ACCEPT_EULA
value: "true"
# If you expect other Pods to be running on the same node, make sure to
# reserve permanent resources for the Load Test server. Assign the CPU
# and Memory amounts according to the expected load level.
# You do not have to do it if Load Test server is the only Pod on a
# Node – in this case all Node’s resource will be available to Load Test.
resources:
requests:
memory: "4Gi"
cpu: "4"
limits:
memory: "4Gi"
cpu: "4"
# Map each Load Test server to a specific Node, so that when
# you run a load test you can monitor each Node resource
# utilization and adjust the remote machine's load accordingly.
# Set the nodeName value to the actual name of the Node you selected
# for this Load Test server instance:
nodeName: YOUR_NODE_NAME
# If you expect other Pods to be running on the same Node use
# Guaranteed QoS class to insure availability of Node’s resources.
status:
qosClass: Guaranteed
---
kind: Service
apiVersion: v1
metadata:
name: loadtest-1
spec:
selector:
app: loadtest-1
type: NodePort
ports:
- name: loadtest-port-1
protocol: TCP
port: 8189
targetPort: 8189
nodePort: 30089 |
この YAML ファイルを使用して、次のコマンドを実行し、単一の Load Test サーバー用の Service と Pod を作成します (loadtest-pod-1.yaml の代わりに、ご使用の YAML ファイル名を指定します)。
kubectl apply -f loadtest-pod-1.yaml |
次の出力が表示されます。
pod/loadtest-1 created service/loadtest-1 created |
複数の Load Test サーバー インスタンスをデプロイするには:
loadtest-1 を loadtest-2 に、loadtest-port-1 を loadtest-port-2 に名前変更します。nodePort を別の値 (例: 30099) に設定します。8189 のポート値は変更しないでください。YAML ファイルを使用して、2 番目の Load Test Service/Pod インスタンスを作成します (loadtest-pod-2.yaml の代わりにご使用の YAML ファイル名を指定します)。
kubectl apply -f loadtest-pod-2.yaml |
さらに Load Test Pod が必要な場合は、このプロセスを繰り返します。
Kubernetes Load Test リモートマシンを負荷テスト構成に追加します (詳細については、「リモート マシンでの負荷テストの実行」を参照してください)。リモートマシンを右クリックして [検証] を選択すると、そのマシンの可用性を確認できます。
![]()
テスト対象アプリケーション (AUT) が Kubernetes クラスターの外部に公開されていない場合は、以下のスクリーンショットに示すように、コントローラーマシン (localhost) の負荷レベルをゼロに設定してください。Load Test コントローラーはクラスターの外部で実行されるため、AUT の内部 IP アドレスを参照できません。一方、負荷ジェネレーターはクラスター内で実行されるため、AUT の内部 IP アドレスにアクセスできます。

任意の Kubernetes モニタリング ツール (Prometheus/Graphana など) を使用して、Load Test サーバー ポッドを割り当てたノードの CPU とメモリの使用率を確認します。Load Test シナリオの実行とテスト実行時間の測定の精度を確保するには、CPU とメモリの使用率が平均で 75~80% を超えないようにする必要があります。