3.11. コントロールプレーンノード間のネットワークジッターの測定
ハートビート間隔の値は、メンバー間の平均ラウンドトリップ時間(RTT)の最大値(通常はラウンドトリップ時間の約 1.5 倍)です。OpenShift Container Platform のデフォルトのハートビート間隔が 100 ミリ秒の場合、コントロールプレーンノード間の推奨される RTT は約 33 ミリ秒未満で、最大は 66 ミリ秒未満です(66 ミリ秒の 1.5 ミリ秒と 99 ミリ秒)。詳細については、etcd のチューニングパラメーターの設定を参照してください。より高いネットワーク遅延が発生すると、サービスに影響を与えるイベントやクラスターが不安定になる可能性があります。
ネットワーク遅延は、以下の要因に限定されるが、多くの要因の影響を受けます。
- copper、fiber、ワイヤレス、Satellite などのトランスポートネットワークのテクノロジー
- トランスポートネットワーク内のネットワークデバイスの数と品質
適切な評価リファレンスは、組織のネットワークレイテンシーと、毎月の IP レイテンシーの統計など、通信プロバイダーによって公開されている商用レイテンシーと比較することです。
より正確な計算を行うには、ネットワークジッターを使用したネットワークレイテンシーを考慮してください。ネットワークジッター は、ネットワークレイテンシーの差異、またはより具体的には、受信パケットの遅延の変動です。理想的なネットワークの状態では、ジッターは可能な限りゼロに近いものです。ネットワークジッターは、時間における実際のネットワークレイテンシーが RTT とマイナスのジッターになるため、etcd のネットワーク遅延の計算に影響します。たとえば、最大遅延が 80 ミリ秒でジッターが 30 ミリ秒のネットワークで、110 ミリ秒のレイテンシーが発生します。つまり、etcd はハートビートがなく、要求のタイムアウトと一時的なリーダーの損失が発生します。リーダーの喪失と再選出の間、Kubernetes API は、サービスに影響を与えるイベントやクラスターの不安定性を引き起こす要求を処理できません。
すべてのコントロールプレーンノード間でネットワークジッターを測定することが重要です。これを行うには、UDP モードで iPerf3
ツールを使用できます。
前提条件
独自の iPerf イメージをビルドしました。詳細は、次の Red Hat ナレッジベースの記事 を参照してください。
手順
コントロールプレーンノードの 1 つに接続し、ホストネットワークモードで iPerf サーバーとして iPerf コンテナーを実行します。サーバーモードで実行している場合、このツールは TCP テストおよび UDP テストを受け入れます。<
iperf_image> を iPerf イメージ
に置き換えるように注意し、次のコマンドを入力します。podman run -ti --rm --net host <iperf_image> iperf3 -s
# podman run -ti --rm --net host <iperf_image> iperf3 -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、別のコントロールプレーンノードに接続し、UDP クライアントモードで iPerf を実行します。
podman run -ti --rm --net host <iperf_image> iperf3 -u -c <node_iperf_server> -t 300
# podman run -ti --rm --net host <iperf_image> iperf3 -u -c <node_iperf_server> -t 300
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトのテストは 10 秒間実行され、最後にクライアント出力に、クライアントパースペクティブからの平均ジッターが表示されます。
次のコマンドを入力して、デバッグノードモードを実行します。
oc debug node/m1
# oc debug node/m1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Starting pod/m1-debug ... To use host binaries, run `chroot /host` Pod IP: 198.18.111.13 If you don't see a command prompt, try pressing enter.
Starting pod/m1-debug ... To use host binaries, run `chroot /host` Pod IP: 198.18.111.13 If you don't see a command prompt, try pressing enter.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力します。
chroot /host
sh-4.4# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman run -ti --rm --net host <iperf_image> iperf3 -u -c m0
sh-4.4# podman run -ti --rm --net host <iperf_image> iperf3 -u -c m0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow iPerf サーバーの出力には、間隔ごとにジッターが表示されます。平均は最後に示されています。このテストの目的上、テスト中に発生した最大ジッターを特定し、1 秒目の出力には無効な測定が含まれる可能性があるため、識別します。以下のコマンドを実行します。
oc debug node/m0
# oc debug node/m0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Starting pod/m0-debug ... To use host binaries, run `chroot /host` Pod IP: 198.18.111.12 If you don't see a command prompt, try pressing enter.
Starting pod/m0-debug ... To use host binaries, run `chroot /host` Pod IP: 198.18.111.12 If you don't see a command prompt, try pressing enter.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力します。
chroot /host
sh-4.4# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman run -ti --rm --net host <iperf_image> iperf3 -s
sh-4.4# podman run -ti --rm --net host <iperf_image> iperf3 -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 計算されたジッターをペナルティーとしてネットワークレイテンシーに追加します。たとえば、ネットワーク遅延が 80 ミリ秒で、ジッターが 30 ミリ秒の場合、コントロールプレーンの目的で有効なネットワーク遅延として 110 ミリ秒を検討してください。この例では、その値が 100 ミリ秒のしきい値を超え、システムはハートビートを見逃します。
etcd のネットワークレイテンシーを計算するときは、次の式の合計である有効なネットワークレイテンシーを使用します。
RTT + jitter
平均ジッター値を使用してペナルティを計算できる可能性がありますが、etcd ハートビートタイマーが次の方の合計よりも低い場合、クラスターはハートビートを偽造する可能性があります。
RTT + max (jitter)
代わりに、より回復力のあるデプロイメントに 99 パーセンタイルまたは最大ジッター値を使用することを検討してください。
effective Network Latency = RTT + max (jitter)