Назад | Перейти на главную страницу

Прохождение через сетевые устройства RDMA в контейнеры докеров

Я хочу передать infiniband в контейнер докеров, чтобы я мог запускать некоторые высокопроизводительные приложения через ipoib и использовать rdma.

В настоящее время я делаю это с виртуальными машинами xen. Теперь я смотрю на использование CoreOS и docker как на гораздо более легкую и более простую в управлении альтернативу.

У меня есть IPoIB-устройство ib0 со статическим IP-адресом 10.10.10.10. Мне удалось получить это внутри контейнера докеров с помощью следующего:

docker run --net = host --device = / dev / infiniband / uverbs0 --device = / dev / infiniband / rdma_cm -t -i ubuntu: 14.04 / bin / bash

Отлично, это работает. ib0 доступен внутри контейнера докеров.

Теперь предположим, что у меня есть двухпортовый HCA. На хосте они отображаются как ib0 и ib1 и имеют два назначенных ip. 10.10.10.10/ib0 и 10.10.10.11/ib1

А теперь я хочу передать ib0 первому контейнеру, а ib1 - второму. При использовании описанного выше метода оба появятся в обоих контейнерах из-за параметра --net = host. Однако отсутствие указания означает, что устройства вообще не появляются.

Другой сценарий: у меня есть много машин, которые используют SR-IOV для передачи устройств Infiniband на виртуальные машины xen. Как я мог передать вместо этого виртуальное устройство Infiniband в контейнер докера и получить его?

Примечание. В этой ситуации конвейерная система не работает, но, если я лучше понимаю, ее можно взломать, чтобы она делала то, что я хочу. Я просто не совсем понимаю, что он делает ... пока.

И теперь я могу ответить на свой вопрос, как это сделать.

Использовать трубопровод который я только что исправил для работы с устройствами Infiniband или RDMA IPoIB.

Вы запускаете его вот так.

~ $ docker run --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm -d container 
~ $ pipework ib0 container-id ip/netmask

Поскольку устройства IPoIB не поддерживают мостовое соединение, все устройство ib0 скрывается от хоста после выполнения команды. т.е. перемещается в сетевое пространство имен контейнера.

Чтобы получить функциональность моста без моста, используйте SR-IOV и передайте виртуальную функцию через конвейер.

В последнем воплощении используется виртуальный IPoIB, который похож на macvlan. Поэтому реальный ib0 остается видимым на хосте. Он работает очень аналогично версии Ethernet.