Passando por dispositivos de rede RDMA para contêineres docker

5

Eu estou querendo passar o infiniband para um contêiner do docker para que eu possa executar alguns aplicativos de alto desempenho sobre o ipoib e usar o rdma.

Atualmente, estou fazendo isso com máquinas virtuais xen. Agora, estou pensando em usar o CoreOS e o docker como um peso muito mais leve e mais fácil de gerenciar como alternativa.

Eu tenho um dispositivo IPoIB ib0 com um IP estático atribuído a ele de 10.10.10.10. Consegui expô-lo dentro de um contêiner docker com o seguinte:

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

Ótimo, isso funciona. ib0 está disponível dentro do contêiner docker.

Agora vamos supor que eu tenha uma porta dupla HCA. No host, eles aparecem como ib0 & ib1 e tem dois ip's atribuídos. 10.10.10.10/ib0 e 10.10.10.11/ib1

E agora eu quero passar ib0 para o primeiro container e ib1 para o segundo. Usando o método acima, ambos aparecerão em ambos os contêineres por causa da opção --net = host. No entanto, não especificar significa que os dispositivos não aparecem de forma alguma.

Outro cenário é que tenho muitas máquinas que usam SR-IOV para passar dispositivos infiniband para xen de máquinas virtuais. Como eu poderia passar um dispositivo infiniband de função virtual para um contêiner docker e ter isso aparecendo?

Observação: a tubulação não funciona nessa situação, mas se eu entendi melhor, talvez ela possa ser hackeada para fazer o que eu quero. Eu não entendo muito bem o que está fazendo ... ainda.

    
por Matt 22.10.2014 / 00:33

1 resposta

3

E agora posso responder minha própria pergunta sobre como fazer isso.

Use a canalização que acabei de corrigir para trabalhar com dispositivos IPoIB Infiniband ou RDMA.

Você o executa assim.

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

Como os dispositivos IPoIB não suportam bridging, todo o dispositivo ib0 é oculto do host após o comando ser emitido. Ou seja, ele é movido para o namespace de rede do contêiner.

Para obter uma funcionalidade semelhante a ponte sem ponte, use o SR-IOV e passe a função virtual através da canalização.

A última encarnação usa o IPoIB virtual, que é semelhante ao macvlan. Portanto, o ib0 real permanece visível no host. Funciona de forma muito semelhante à versão ethernet.

    
por 16.11.2014 / 19:27