Sehr schlechte Leistung auf Kubernetes mit 100GbE-Netzwerk

Sehr schlechte Leistung auf Kubernetes mit 100GbE-Netzwerk

Wir verwenden ConnectX-5 100GbE Ethernet-Karten auf unseren Servern, die über den Mellanox-Switch miteinander verbunden sind. Und wir verwenden das Weavenet CNI-Plugin auf unserem Kubernetes-Cluster. Wenn wir einige Tests mitiperfMit dem folgenden Befehl erhalten wir eine Verbindungsgeschwindigkeit von 100 Gbit/s im Host.

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

Auch wenn wir einige Tests mit demselben Tool und Befehl mit zwei Docker-Containern auf denselben Hosts durchführen, erhalten wir dieselben Ergebnisse.

# 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

Aber wenn wir zwei verschiedene Bereitstellungen in denselben Hosts (Host1, Host2) mit denselben Bildern erstellen und denselben Test über die Service-IP durchführen (wir haben einen K8S-Dienst mit dem folgenden YAML erstellt), der den Datenverkehr in den Server-Pod umleitet, erhalten wir das einzige2 Gbit/s. Wir führen den gleichen Test auch mit der Cluster-IP des Pods und der Cluster-Domäne des Dienstes durch, aber die Ergebnisse sind dieselben.

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; Die Szenarien, die wir getestet haben:

  • Host1 (Ubuntu 20.04, Mellanox-Treiber installiert) <--------> Host2 (Ubuntu 20.04, Mellanox-Treiber installiert) = 98,8 Gbit/s
  • Container1 auf Host1 <--------> Container2 auf Host2 = 98,8 Gbit/s
  • Pod1-auf-Host1 <-------> Pod2-auf-Host2 (unter Verwendung der Cluster-IP) = 2 Gbit/s
  • Pod1-auf-Host1 <-------> Pod2-auf-Host2 (unter Verwendung der Service-Cluster-IP) = 2 Gbit/s
  • Pod1-auf-Host1 <-------> Pod2-auf-Host2 (unter Verwendung der Serviceclusterdomäne) = 2 Gbit/s

Wir müssen bei der Pod-zu-Pod-Kommunikation eine Geschwindigkeit von 100 Gbit/s erreichen. Was könnte also die Ursache dieses Problems sein?

Update 1:

  • Wenn ich während des Iperf-Tests das htop in den Pods überprüfe, sehe ich 112 CPU-Kerne und keiner davon hat Probleme mit der CPU.
  • hostNetwork: trueWenn ich den Schlüssel zu den Bereitstellungspods hinzufüge, können sie eine Bandbreite von bis zu 100 Gbit/s erreichen.

Antwort1

Wir haben das Problem gelöst, indem wir die Verschlüsselung im Weavenet deaktiviert haben. Aber ein Neustart des Servers hat geholfen. Danke dafürArtikel.

verwandte Informationen