
É possível que um cluster CoreOS compartilhe espaço em disco, por exemplo, usando NFS? Se sim, como alguém faria isso? (por exemplo, no cenário em que um nó possui 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 para compartilhar o espaço do diretório inicial entre os nós.
Como não podemos instalar software adicional diretamente no CoreOS, imagino que seria necessário escrever um contêiner apenas para instalar o NFS (por exemplo, nfs-kernel-server
em um contêiner baseado no Ubuntu).
Não tenho ideia se isso é possível, mas espero que haja alguma maneira estabelecida de compartilhar 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 material para feedback, aqui está o que estou pensando até agora:
Fornecer o lado do host do NFS parece uma tarefa razoável do docker, por exemplo, 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 precisemos substituir o CMD por uma chamada para supervisord
ou algo semelhante para tornar isso persistente, mas essa é a ideia)
Então, como vincularíamos os volumes de maneira adequada ao executar esse contêiner? Qual volume vincularíamos do host CoreOS? Ou preciso adicionar algo como --net="host"
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 algum uso apropriado de --volumes-from
?) adoraria ver um esboço de como fazer isso, ou por que não é possível e se existem alternativas melhores para resolver esse caso de uso. Obrigado!
Responder1
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 contêiner da caixa de ferramentas do Fedora fornecido pelo toolbox
comando.
Responder2
Você precisa iniciar rpc-mountd
os nfsd
serviços do systemd e definir suas exportações nfs no /etc/exports
arquivo.
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 funcionando com CoreOSv723.3.0.
Você pode encontrar mais sobre compartilhamento de disco por meio de NFS no CentOS nos seguintes links: