Очень низкая производительность в 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. Но перезагрузка сервера помогла. Спасибо за эту статью .