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

на наших серверах мы используем сетевые карты 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

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

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

  • хост1(ubuntu 20.04, драйвер melanox установлен) <--------> хост2(ubuntu 20.04, драйвер melanox установлен) = 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 Гбит/с для связи между модулями. Так что же может быть причиной этой проблемы?

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

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

1 ответ

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

Другие вопросы по тегам