通過 RDMA 網路設備傳遞給 docker 容器
我想通過 infiniband 到 docker 容器,以便我可以通過 ipoib 執行一些高性能應用程序並使用 rdma。
目前,我正在使用 xen 虛擬機執行此操作。現在我正在考慮使用 CoreOS 和 docker 作為更輕量級且更易於管理的替代方案。
我有一個分配給它的靜態 IP 為 10.10.10.10 的 IPoIB 設備 ib0。我已經設法通過以下方式將其暴露在 docker 容器中:
docker run –net=host –device=/dev/infiniband/uverbs0 –device=/dev/infiniband/rdma_cm -t -i ubuntu:14.04 /bin/bash
太好了,這行得通。ib0 在 docker 容器中可用。
現在讓我們假設我有一個雙埠 HCA。在主機上,它們顯示為 ib0 和 ib1,並分配了兩個 ip。10.10.10.10/ib0 和 10.10.10.11/ib1
現在我想將 ib0 傳遞給第一個容器,將 ib1 傳遞給第二個容器。由於 –net=host 選項,使用上述兩種方法都會出現在兩個容器中。但是,不指定它意味著設備根本不會出現。
另一種情況是我有很多機器使用 SR-IOV 將 infiniband 設備傳遞到 xen 虛擬機。我怎樣才能將虛擬功能 infiniband 設備傳遞給 docker 容器並讓它出現?
注意:管道在這種情況下不起作用,但如果我更好地理解它,它可能會被黑客入侵以做我想做的事。我只是不太明白它在做什麼……但是。
現在我可以回答我自己關於如何做到這一點的問題。
使用我剛剛修補的管道與 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 並通過管道傳遞虛擬功能。
最新版本使用類似於 macvlan 的虛擬 IPoIB。因此,真正的 ib0 在主機中仍然可見。它的工作方式與乙太網版本非常相似。