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