第6章 iPerf
iPerf3 を使用しながら、リアルタイムのネットワークスループット測定を実行します。
この例は、Skupper を使用してクラウドプロバイダー、データセンター、エッジサイト間でサービスを接続できるさまざまな方法を紹介する 一連の例 の一部です。
概要
このチュートリアルでは、iperf3 ツールを使用して Kubernetes 全体でリアルタイムのネットワークスループット測定を実行する方法を説明します。このチュートリアルでは、次のことを行います。
- iperf3 を 3 つの別々のクラスターにデプロイする
- iperf3 クライアントテストインスタンスを実行する
前提条件
-
kubectl
コマンドラインツール、バージョン 1.15 以降 - パフォーマンスを確認するために 3 つのクラスターにアクセスできる。たとえば、3 つのクラスターは、以下のような構成になります。
- ローカルマシン上で実行されるプライベートクラウドクラスター (private1)
- パブリッククラウドプロバイダーで実行されている 2 つのパブリッククラウドクラスター (public1 と public2)
手順
- この例のリポジトリーのクローンを作成する
- Skupper コマンドラインツールをインストールする
- 個別のコンソールセッションを設定する
- クラスターにアクセスする
- 名前空間を設定する
- 名前空間に Skupper をインストールする
- 名前空間のステータスを確認する
- 名前空間をリンクする
- iperf3 サーバーをデプロイする
- 各名前空間から iperf3 を公開する
- この例のリポジトリーをクローンします。https://skupper.io/examples/index.html から適切な GitHub リポジトリーに移動し、リポジトリーをクローンします。
Skupper コマンドラインツールをインストールします。
skupper
コマンドラインツールは、Skupper をインストールおよび設定するためのエントリーポイントです。開発環境ごとにskupper
コマンドを 1 回だけインストールする必要があります。CLI のインストールの詳細は、インストール を参照してください。設定されたシステムの場合は、次のコマンドを使用します。
sudo dnf install skupper-cli
Windows およびその他のインストールオプションについては、Installing Skupper を参照してください。
個別のコンソールセッションを設定します。
Skupper は、通常は異なるクラスター上の複数の名前空間で使用するように設計されています。
skupper
コマンドとkubectl
コマンドは、kubeconfig と現在のコンテキストを使用して、動作する名前空間を選択します。kubeconfig はホームディレクトリーのファイルに保存されます。
skupper
およびkubectl
コマンドは、KUBECONFIG
環境変数を使用してこれを検索します。1 つの kubeconfig は、ユーザーごとにアクティブコンテキストを 1 つだけサポートします。この演習では複数のコンテキストを一度に使用するため、個別の kubeconfig を作成する必要があります。
各名前空間のコンソールセッションを開始します。各セッションで
KUBECONFIG
環境変数を異なるパスに設定します。public1 のコンソール:
export KUBECONFIG=~/.kube/config-public1
public2 のコンソール:
export KUBECONFIG=~/.kube/config-public2
private1 のコンソール:
export KUBECONFIG=~/.kube/config-private1
クラスターにアクセスします。
Kubernetes クラスターにアクセスする手順はプロバイダーによって異なります。選択したプロバイダーの手順 を確認し、それを使用して各コンソールセッションのアクセスを認証および設定します。
名前空間を設定します。
kubectl create namespace
を使用して、使用する名前空間を作成します (または既存の名前空間を使用します)。kubectl config set-context
を使用して、各セッションの現在の名前空間を設定します。public1 のコンソール:
kubectl create namespace public1 kubectl config set-context --current --namespace public1
public2 のコンソール:
kubectl create namespace public2 kubectl config set-context --current --namespace public2
private1 のコンソール:
kubectl create namespace private1 kubectl config set-context --current --namespace private1
名前空間に Skupper をインストールします。
skupper init
コマンドは、現在の名前空間に Skupper ルーターとコントローラーをインストールします。各 namespace でskupper init
コマンドを実行します。public1 のコンソール:
skupper init --enable-console --enable-flow-collector
public2 のコンソール:
skupper init
private1 のコンソール:
skupper init
出力サンプル
$ skupper init Waiting for LoadBalancer IP or hostname... Waiting for status... Skupper is now installed in namespace '<namespace>'. Use 'skupper status' to get more information.
名前空間のステータスを確認します。
各コンソールで
skupper status
を使用して、Skupper がインストールされていることを確認します。public1 のコンソール:
skupper status
public2 のコンソール:
skupper status
private1 のコンソール:
skupper status
出力サンプル
Skupper is enabled for namespace "<namespace>" in interior mode. It is connected to 1 other site. It has 1 exposed service. The site console url is: <console-url> The credentials for internal console-auth mode are held in secret: 'skupper-console-users'
以下の手順を実行する場合は、いつでも
skupper status
を使用して進捗状況を確認できます。名前空間をリンクします。
リンクを作成するには、
skupper token create
とskupper link create
の 2 つのskupper
コマンドを組み合わせて使用する必要があります。skupper token create
コマンドは、リンクを作成する権限を示す秘密トークンを生成します。トークンにはリンクの詳細も含まれます。次に、リモート名前空間で、skupper link create
コマンドを実行すると、トークンを使用して、トークンを生成した名前空間へのリンクを作成します。注記リンクトークンは実際にはシークレットです。トークンがある場合は、名前空間にリンクできます。信頼できる人だけがアクセスできるようにしてください。
まず、1 つの名前空間で
skupper token create
を使用してトークンを生成します。次に、もう 1 つでskupper link create
を使用してリンクを作成します。public1 のコンソール:
skupper token create ~/private1-to-public1-token.yaml skupper token create ~/public2-to-public1-token.yaml
public2 のコンソール:
skupper token create ~/private1-to-public2-token.yaml skupper link create ~/public2-to-public1-token.yaml skupper link status --wait 60
private1 のコンソール:
skupper link create ~/private1-to-public1-token.yaml skupper link create ~/private1-to-public2-token.yaml skupper link status --wait 60
コンソールセッションが異なるマシン上にある場合は、トークンを安全に転送するために
scp
または同様のツールを使用する必要がある場合があります。デフォルトでは、トークンは 1 回の使用後、または作成後 15 分後に期限切れになります。iperf3 サーバーをデプロイします。
アプリケーションルーターネットワークを作成したら、各名前空間に
iperf3
をデプロイします。private1 のコンソール:
kubectl apply -f deployment-iperf3-a.yaml
public1 のコンソール:
kubectl apply -f deployment-iperf3-b.yaml
public2 のコンソール:
kubectl apply -f deployment-iperf3-c.yaml
各名前空間から iperf3 を公開します。
名前空間間の接続を確立し、
iperf3
をデプロイしました。パフォーマンスをテストする前に、各 namespace からiperf3
にアクセスする必要があります。private1 のコンソール:
skupper expose deployment/iperf3-server-a --port 5201
public1 のコンソール:
skupper expose deployment/iperf3-server-b --port 5201
public2 のコンソール:
skupper expose deployment/iperf3-server-c --port 5201
クラスター全体でベンチマークテストを実行します。
iperf3 サーバーをプライベートクラウドクラスターとパブリッククラウドクラスターにデプロイすると、仮想アプリケーションネットワークでは、サーバーが別々のクラスターで実行されていても通信が可能になります。
private1 のコンソール:
kubectl exec $(kubectl get pod -l application=iperf3-server-a -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-a kubectl exec $(kubectl get pod -l application=iperf3-server-a -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-b kubectl exec $(kubectl get pod -l application=iperf3-server-a -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-c
public1 のコンソール:
kubectl exec $(kubectl get pod -l application=iperf3-server-b -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-a kubectl exec $(kubectl get pod -l application=iperf3-server-b -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-b kubectl exec $(kubectl get pod -l application=iperf3-server-b -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-c
public2 のコンソール:
kubectl exec $(kubectl get pod -l application=iperf3-server-c -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-a kubectl exec $(kubectl get pod -l application=iperf3-server-c -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-b kubectl exec $(kubectl get pod -l application=iperf3-server-c -o=jsonpath='{.items[0].metadata.name}') -- iperf3 -c iperf3-server-c