Compartilhar discos através do NFS em um cluster CoreOS?

5

É possível que um cluster CoreOS compartilhe espaço em disco, por exemplo, usando o NFS? Se sim, como alguém faria isso? (por exemplo, no cenário em que um nó tem muito espaço em disco). Isso seria útil para evitar que cada nó tenha que baixar e armazenar sua própria biblioteca de imagens do docker, por exemplo, ou compartilhar o espaço do diretório inicial nos nós.

Como não podemos instalar software adicional diretamente no CoreOS, imagino que seria necessário criar um contêiner apenas para instalar o NFS (por exemplo, nfs-kernel-server em um contêiner baseado em Ubuntu).

Eu não tenho ideia se isso é possível, mas espero que haja alguma maneira estabelecida de compartilhar o espaço em disco em um cluster CoreOS (afinal, parece uma expectativa comum para um cluster, e talvez minha proposta abaixo seja mais complicada do que o necessário). Apenas para fornecer algum feedback, aqui está o que eu estou pensando até agora:

Fornecer o lado do host do NFS parece ser uma tarefa de janela de encaixe razoável, e. Eu imagino um Dockerfile como:

FROM ubuntu:14.04
ENV CLIENT_IP 11.111.111.111          
RUN apt-get update && apt-get install -y nfs-kernel-server supervisor
RUN mkdir /var/nfs && chown nobody:nogroup /var/nfs
RUN echo "/home       ${CLIENT_IP}(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
RUN echo "/var/nfs    ${CLIENT_IP}(rw,sync,no_subtree_check)" >> /etc/exports
RUN exportfs -a
CMD service nfs-kernel-server start

Onde CLIENT_IP foi preenchido adequadamente (e talvez seja necessário substituir o CMD por uma chamada para supervisord ou semelhante para tornar isso persistente, mas você tem a ideia)

Então, como poderíamos vincular volumes adequadamente ao executar esse contêiner? Qual volume nós conectaríamos a partir do host CoreOS? Ou preciso adicionar algo como --net="host" para disponibilizar o cliente?

docker run -v /home:/home nfs-server

Não está claro para mim como poderíamos implementar o lado do cliente, já que mais uma vez precisaríamos de um contêiner para fornecer nfs-common e, de alguma forma, descobrir como outros contêineres poderiam compartilhar esse recurso (talvez alguns uso de --volumes-from ?) Eu adoraria ver um esboço de como fazer isso, ou porque não é possível & se houver alternativas melhores para resolver esse caso de uso. Obrigado!

    
por cboettig 25.11.2014 / 19:33

2 respostas

3

Você deve conseguir montar um volume NFS no host CoreOS. Se não houver ferramentas de usuário para exportar um sistema de arquivos do CoreOS, você pode usar o container da caixa de ferramentas do Fedora fornecido pelo comando toolbox .

    
por 26.11.2014 / 15:22
7

Você precisa iniciar rpc-mountd e nfsd systemd services e definir suas exportações do nfs em /etc/exports file.

Exemplo de cloud-config.yml :

coreos:
  units:
    - name: rpc-mountd.service
      command: start
      enable: true
    - name: nfsd.service
      command: start
      enable: truestrong text
write_files:
  - path: /etc/exports
    permissions: '0644'
    # Change /network-raid with the dir you want to export over nfs
    content: /network-raid/ 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash,fsid=0)

Eu tenho essa configuração trabalhando com o CoreOS v723.3.0 .

Você pode encontrar mais sobre o compartilhamento de disco por meio do NFS no CentOS nos seguintes links:

por 17.08.2015 / 19:36