Desempenho muito ruim no Kubernetes com rede 100GbE

Desempenho muito ruim no Kubernetes com rede 100GbE

estamos usando placas Ethernet ConnectX-5 100GbE em nossos servidores, que são conectadas entre si por meio do switch mellanox. E estamos usando o plugin weavenet cni em nosso cluster Kubernetes. Quando fazemos alguns testes usandoperfeitoferramenta com o seguinte comando obtemos a velocidade de conexão de 100 Gbps no host.

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

Além disso, quando fazemos alguns testes com a mesma ferramenta e comando usando dois contêineres docker nos mesmos hosts, também obtemos os mesmos 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

Mas quando criamos duas implantações diferentes nos mesmos hosts (host1, host2) com as mesmas imagens e fazemos o mesmo teste através do ip do serviço (criamos um serviço k8s usando o seguinte yaml) que redireciona o tráfego para o pod do servidor, obtemos a única2Gbps. Também fazemos o mesmo teste usando o ip do cluster do pod e o domínio do cluster do serviço, mas os resultados são os mesmos.

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; Os cenários que testamos:

  • host1 (ubuntu 20.04, driver mellanox instalado) <--------> host2 (ubuntu 20.04, driver mellanox instalado) = 98,8 Gbps
  • container1-on-host1 <--------> container2-on-host2 = 98,8 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (usando ip do cluster) = 2 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (usando IP do cluster de serviço) = 2 Gbps
  • Pod1-on-host1 <-------> Pod2-on-host2 (usando domínio de cluster de serviço) = 2 Gbps

Precisamos obter a velocidade de 100 Gbps na comunicação pod-to-pod. Então, o que poderia estar causando esse problema?

Atualização1:

  • Quando verifico o htop dentro dos pods durante o teste iperf, há 112 núcleos de CPU e nenhum deles está lutando com a CPU.
  • Quando adiciono a hostNetwork: truechave aos pods de implantação, posso atingir largura de banda de até 100 Gbps.

Responder1

Descobrimos isso desativando a criptografia no weavenet. Mas reiniciar o servidor resolveu. Obrigado por issoartigo.

informação relacionada