¿Compartir discos a través de NFS en un clúster CoreOS?

¿Compartir discos a través de NFS en un clúster CoreOS?

¿Es posible que un clúster CoreOS comparta espacio en disco, por ejemplo, utilizando NFS? Si es así, ¿cómo se haría esto? (por ejemplo, en el escenario en el que un nodo tiene mucho espacio en disco). Esto sería útil para evitar que cada nodo tenga que descargar y almacenar su propia biblioteca de imágenes de Docker, por ejemplo, o para compartir el espacio del directorio de inicio entre nodos.

Debido a que no podemos instalar software adicional directamente en CoreOS, imagino que habría que escribir un contenedor solo para instalar NFS (por ejemplo, nfs-kernel-serveren un contenedor basado en Ubuntu).

No tengo idea de si esto es posible, pero espero que haya alguna forma establecida de compartir espacio en disco en un clúster CoreOS (después de todo, parece una expectativa común para un clúster, y tal vez mi propuesta a continuación sea más complicada de lo necesario). . Sólo para proporcionar algo de información para comentarios, esto es lo que estoy pensando hasta ahora:

Proporcionar el lado del host de NFS parece una tarea acoplable razonable, por ejemplo, me imagino un 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

Donde CLIENT_IPse completó apropiadamente (y tal vez necesitemos reemplazar el CMD con una llamada a supervisordo similar para que esto sea persistente, pero ya entiendes la idea)

Entonces, ¿cómo vincularíamos los volúmenes de manera adecuada al ejecutar este contenedor? ¿Qué volumen vincularíamos desde el host CoreOS? ¿O necesito agregar algo como --net="host"para que el cliente esté disponible?

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

No me queda del todo claro cómo podríamos implementar el lado del cliente, ya que una vez más necesitaríamos un contenedor para proporcionar nfs-commony de alguna manera descubrir cómo otros contenedores podrían compartir ese recurso (¿quizás algún uso apropiado de --volumes-from?). Me encantaría ver un resumen de cómo hacer esto, o por qué no es posible y si existen mejores alternativas para abordar este caso de uso. ¡Gracias!

Respuesta1

Debería poder montar un volumen NFS en el host CoreOS. Si no hay herramientas de usuario para exportar un sistema de archivos desde CoreOS, puede usar el contenedor de la caja de herramientas de Fedora proporcionado por el toolboxcomando.

Respuesta2

Debe iniciar rpc-mountdlos nfsdservicios systemd y definir sus exportaciones nfs en /etc/exportsel archivo.

Ejemplo 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)

Tengo esta configuración funcionando con CoreOSv723.3.0.

Puede encontrar más información sobre cómo compartir disco a través de NFS en CentOS en los siguientes enlaces:

información relacionada