100GbE ネットワークを使用した Kubernetes のパフォーマンスが非常に低い

100GbE ネットワークを使用した Kubernetes のパフォーマンスが非常に低い

私たちはサーバー上でConnectX-5 100GbEイーサネットカードを使用しており、これらはMellanoxスイッチを介して相互に接続されています。また、Kubernetesクラスターではweavenet cniプラグインを使用しています。iperf次のコマンドでツールを実行すると、ホストで 100Gbps の接続速度が得られます。

# server host
host1 $ iperf -s -P8
# client host
host2 $ iperf -c <host_ip> -P8
Result: 98.8 Gbps transfer speed

また、同じホスト上の 2 つの Docker コンテナを使用して同じツールとコマンドでいくつかのテストを実行すると、同じ結果が得られます。

# server host
host1$ docker run -it -p 5001:5001 ubuntu:latest-with-iperf iperf -s -P8 
# client host
host2 $ docker run -it -p 5001:5001 ubuntu:latest-with-iperf iperf -c <host_ip> -P8
Result: 98.8 Gbps transfer speed

しかし、同じホスト(host1、host2)に同じイメージで2つの異なるデプロイメントを作成し、トラフィックをサーバーポッドにリダイレクトするサービスIP(次のyamlを使用してk8sサービスを作成しました)を介して同じテストを実行すると、次のようになります。2Gbpsポッドのクラスター IP とサービスのクラスター ドメインを使用して同じテストを実行しますが、結果は同じです。

kubectl create deployment iperf-server --image=ubuntu:latest-with-iperf  # after that we add affinity(host1) and container port sections to the yaml
kubectl create deployment iperf-client --image=ubuntu:latest-with-iperf  # after that we add affinity(host2) and container port sections to the yaml
kind: Service
apiVersion: v1
metadata:
  name: iperf-server
  namespace: default
spec:
  ports:
    - name: iperf
      protocol: TCP
      port: 5001
      targetPort: 5001
  selector:
    name: iperf-server
  clusterIP: 10.104.10.230
  type: ClusterIP
  sessionAffinity: None

TLDR; テストしたシナリオ:

  • ホスト1(ubuntu 20.04、mellanox ドライバーがインストール済み) <--------> ホスト2(ubuntu 20.04、mellanox ドライバーがインストール済み) = 98.8 Gbps
  • コンテナ1-on-host1 <--------> コンテナ2-on-host2 = 98.8 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (クラスター IP を使用) = 2Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (サービス クラスター IP を使用) = 2Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (サービス クラスタ ドメインを使用) = 2Gbps

ポッド間通信で 100Gbps の速度を実現する必要があります。この問題の原因は何でしょうか?

アップデート1:

  • iperf テスト中にポッド内の htop を確認すると、112 個の CPU コアがあり、いずれも CPU に問題はありません。
  • hostNetwork: trueデプロイメントにキーを追加すると、ポッドは最大 100Gbps の帯域幅に到達できます。

答え1

weavenet の暗号化を無効にすることでこの問題を解決しました。しかし、サーバーを再起動するとうまくいきました。ありがとうございます記事

関連情報