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: true
Wenn 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.