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