Rendimiento muy pobre en Kubernetes con red de 100GbE

Rendimiento muy pobre en Kubernetes con red de 100GbE

Estamos utilizando tarjetas Ethernet ConnectX-5 de 100 GbE en nuestros servidores que están conectadas entre sí a través del conmutador Mellanox. Y estamos usando el complemento weavenet cni en nuestro clúster de Kubernetes. Cuando hacemos algunas pruebas usandoiperfherramienta con el siguiente comando obtenemos la velocidad de conexión de 100 Gbps en el host.

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

Además, cuando realizamos algunas pruebas con la misma herramienta y comando usando dos contenedores acoplables en los mismos hosts, también obtenemos los mismos resultados.

# 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

Pero cuando creamos dos implementaciones diferentes en los mismos hosts (host1, host2) con las mismas imágenes y hacemos la misma prueba a través de la IP del servicio (creamos un servicio k8s usando el siguiente yaml) que redirige el tráfico al pod del servidor, obtenemos el único2Gbps. También hacemos la misma prueba utilizando la IP del clúster del pod y el dominio del clúster del servicio, pero los resultados son los mismos.

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; Los escenarios que probamos:

  • host1(ubuntu 20.04, controlador mellanox instalado) <--------> host2(ubuntu 20.04, controlador mellanox instalado) = 98,8 Gbps
  • contenedor1-en-host1 <--------> contenedor2-en-host2 = 98,8 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (usando IP del clúster) = 2 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (usando la IP del clúster de servicio) = 2 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (usando el dominio del clúster de servicio) = 2 Gbps

Necesitamos obtener la velocidad de 100 Gbps en la comunicación de pod a pod. Entonces, ¿qué podría estar causando este problema?

Actualización 1:

  • Cuando reviso los pods internos del htop durante la prueba de iperf, hay 112 núcleos de CPU y ninguno de ellos tiene problemas con la CPU.
  • Cuando agrego la hostNetwork: trueclave a las implementaciones, los pods pueden alcanzar un ancho de banda de hasta 100 Gbps.

Respuesta1

Resolvemos esto desactivando el cifrado en weavenet. Pero reiniciar el servidor funcionó. Gracias por estoartículo.

información relacionada