Очень низкая производительность Kubernetes с сетью 100GbE

Очень низкая производительность Kubernetes с сетью 100GbE

мы используем карты Ethernet ConnectX-5 100GbE на наших серверах, которые подключены друг к другу через коммутатор mellanox. И мы используем плагин weavenet cni на нашем кластере Kubernetes. Когда мы делаем некоторые тесты с использованиемiperfс помощью следующей команды мы получаем скорость соединения 100 Гбит/с на хосте.

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

Кроме того, когда мы проводим несколько тестов с использованием того же инструмента и команды, используя два контейнера Docker на тех же хостах, мы также получаем те же результаты.

# 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

Но когда мы создаем два разных развертывания на одних и тех же хостах (хост1, хост2) с одними и теми же образами и проводим тот же тест через IP-адрес службы (мы создали службу k8s, используя следующий yaml-файл), который перенаправляет трафик в серверный модуль, мы получаем единственный2Гбит/с. Мы также проводим тот же тест, используя IP-адрес кластера модуля и домен кластера службы, но результаты те же.

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; Сценарии, которые мы протестировали:

  • host1(ubuntu 20.04, установлен драйвер mellanox) <--------> host2(ubuntu 20.04, установлен драйвер mellanox) = 98,8 Гбит/с
  • контейнер1-на-хосте1 <--------> контейнер2-на-хосте2 = 98,8 Гбит/с
  • Pod1-на-хосте1 <-------> Pod2-на-хосте2 (используя IP-адрес кластера) = 2 Гбит/с
  • Pod1-на-хосте1 <-------> Pod2-на-хосте2 (используя IP-адрес кластера служб) = 2 Гбит/с
  • Pod1-на-хосте1 <-------> Pod2-на-хосте2 (используя домен сервисного кластера) = 2 Гбит/с

Нам нужно получить скорость 100 Гбит/с на коммуникации pod-to-pod. Так что же может быть причиной этой проблемы?

Обновление1:

  • Когда я проверяю htop внутри модулей во время теста iperf, там есть 112 ядер ЦП, и ни одно из них не испытывает проблем с ЦП.
  • При добавлении hostNetwork: trueключа к развертываниям модули могут достигать пропускной способности до 100 Гбит/с.

решение1

Мы выяснили это, отключив шифрование на weavenet. Но перезагрузка сервера помогла. Спасибо за этостатья.

Связанный контент