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