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
.
É 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!
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: