Saltar al contenido principal

NFS

Para acceder a los archivos compartidos en la red local, utilizamos el servicio de NFS. NFS (Network File System) es un protocolo que permite a los sistemas de archivos ser compartidos entre diferentes sistemas operativos, como Linux y macOS. Esto nos permite que los servidores puedan acceder a los archivos almacenados en el servidor de manera sencilla y eficiente desde cualquier dispositivo conectado a la red local.

Configuración de NFS

Paso 1: Instalar el Servidor NFS

Primero, instala el software necesario para servir archivos:

sudo apt update
sudo apt install nfs-kernel-server

Paso 2: Configurar la Carpeta a Compartir

Ahora, debes editar el archivo /etc/exports para decirle a NFS qué carpeta compartir y con quién.

Abre el archivo:

sudo nano /etc/exports

Ve al final del archivo y añade una línea. La carpeta que quieres compartir es /mnt/swarm-storage (que ya está montada en tu disco sdb1).

Debes reemplazar IP_NODO_2 e IP_NODO_3 con las IPs reales de tus otros dos servidores Swarm.

Opción A (Recomendada, más fácil): Compartir con toda tu subred.

/mnt/swarm-storage   192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

Opción B (Más específica): Compartir solo con los IPs de tus nodos.

/mnt/swarm-storage   IP_NODO_2(rw,sync,no_subtree_check,no_root_squash) IP_NODO_3(rw,sync,no_subtree_check,no_root_squash)

Explicación de las opciones (importante):

  • rw: Lectura/Escritura (Read/Write).

  • sync: Responde al cliente solo después de que los datos se hayan escrito en el disco (más seguro).

  • no_subtree_check: Desactiva una comprobación que puede dar problemas.

  • no_root_squash: ¡Esta es la opción más importante para Docker! Por defecto, NFS no confía en el usuario root de una máquina cliente. Esta opción lo deshabilita, permitiendo que los contenedores (que a veces corren como root) puedan escribir en el NFS sin problemas de permisos.

Guarda y cierra el archivo (Ctrl+O, Enter, Ctrl+X).

Aplica la nueva configuración y reinicia el servidor NFS:

sudo exportfs -a
sudo systemctl restart nfs-kernel-server

Paso 3: Abrir el Firewall

Al igual que con Samba, si tienes ufw activado, debes permitir las conexiones NFS entrantes.

La forma más fácil y segura es permitirlo solo desde tu subred o IPs de tus nodos:

Opción A (Permitir desde toda la subred 192.168.0.x)

sudo ufw allow from 192.168.0.0/24 to any app nfs

Opción B (Permitir solo desde tus nodos)

sudo ufw allow from IP_NODO_2 to any app nfs
sudo ufw allow from IP_NODO_3 to any app nfs
# Recarga el firewall
sudo ufw reload

¡Listo! Tu servidor ahora es un servidor NFS y está compartiendo /mnt/swarm-storage.

Paso 4: Configurar los Clientes NFS (en los otros 2 nodos)

Ahora, ve a tus otros dos servidores Swarm y haz lo siguiente en cada uno de ellos:

Instala el cliente NFS:

sudo apt update
sudo apt install nfs-common

Crea el mismo punto de montaje: Es crucial que la ruta sea idéntica en todos los nodos.

sudo mkdir -p /mnt/swarm-storage

Monta el recurso compartido (prueba temporal):

sudo mount 192.168.0.13:/mnt/swarm-storage /mnt/swarm-storage

(Reemplaza 192.168.0.13 por la IP de tu servidor NFS).

Verifica que funcionó. Ejecuta df -h. Deberías ver el recurso NFS montado.

Hazlo permanente (en /etc/fstab): Edita el fstab en los clientes:

sudo nano /etc/fstab

Añade esta línea al final:

192.168.0.13:/mnt/swarm-storage   /mnt/swarm-storage   nfs   defaults,_netdev   0   0

La opción _netdev es importante: le dice al sistema que espere a que la red esté activa antes de intentar montar esto.

¡Importante! El Siguiente Paso para Docker Swarm Ahora tienes la configuración completa de NFS:

Nodo 1 : Tiene el disco local montado en /mnt/swarm-storage y lo comparte vía NFS.

Nodo 2 y 3: Tienen el recurso NFS del Nodo 1 montado en /mnt/swarm-storage.

¡Todos tus nodos ahora ven la misma carpeta /mnt/swarm-storage!

Cuando despliegues un stack en Swarm, puedes usar un bind mount a esa ruta, y no importa en qué nodo se inicie el contenedor, siempre verá los mismos datos.

YAML

services: mi_servicio: image: nginx volumes:

  • type: bind source: /mnt/swarm-storage/nginx_data # Esta ruta existe en TODOS los nodos target: /usr/share/nginx/html NFS vs. Samba (Aclaración) Para que quede claro:

NFS (lo que acabas de hacer): Es para compartir archivos entre tus servidores Linux (tu clúster de Swarm).

Samba (lo que hicimos antes): Es para compartir archivos con tu PC con Windows.

Ambos pueden funcionar al mismo tiempo sin problemas, compartiendo la misma carpeta (/mnt/swarm-storage).