Saltar al contenido principal
Version: 1.6.0

Instalando NFS en Swarm

Este ejemplo lo guiará en la instalación de un servicio NFS dentro de docker swarm (testeado en Debian 10)

Nota: Se presuponen 2 equipos 192.168.0.100 como nfsserver y 192.168.0.101 como cliente nfs

En el servidor de NFS (192.168.0.100)

  1. Instalo server NFS
apt update && apt install nfs-kernel-server
  1. Creo el directorio
mkdir -p /mnt/nfs_share
chown -R nobody:nogroup /mnt/nfs_share/
chmod 777 /mnt/nfs_share/
  1. Asigno permisos de acceso

Los permisos para acceder al NFS se gestionan desde /etc/exports (editar acorde a lo necesitado, sobre todo el rango de IP)

Si se desea otorgar acceso a un solo cliente, se puede utilizar la siguiente sintaxis

echo "/mnt/nfs_share  IP_Cliente(rw,sync,all_squash,no_subtree_check)" >> /etc/exports

Ejemplo:

echo "/mnt/nfs_share 192.168.0.101(rw,sync,all_squash,no_subtree_check)" >> /etc/exports

Para otorgar a diversos clientes, se puede agregar más de una linea:

/mnt/nfs_share  IP_Cliente_1 (rw,sync,all_squash,no_subtree_check)
/mnt/nfs_share IP_Cliente_2 (rw,sync,all_squash,no_subtree_check)

O simplemente puede agregar una subred

Ejemplo en donde agregaríamos una subred de todos los equipos entre 192.168.0.0 a 192.168.0.255:

echo "/mnt/nfs_share 192.168.0.0/24(rw,sync,all_squash,no_subtree_check)" >> /etc/exports
  1. Exporto el directorio y aplico los cambios
exportfs -a
systemctl restart nfs-kernel-server

Para más información les dejamos los siguientes links


En los clientes (192.168.0.101)

Testear que funcione el server NFS (opcional pero recomendado)

Instalo dependencias, creo el directorio donde se van a montar los archivos y lo monto por nfs

apt update && apt install nfs-common net-tools
mkdir -p /mnt/nfs_clientshare
mount 192.168.0.100:/mnt/nfs_share /mnt/nfs_clientshare # (reemplazo la IP)

Ya tenemos un NFS funcionando.

Para más información les dejamos los siguientes links

NFS dentro de docker

  1. Instalo el plugin de docker en cada nodo del swarm y lo arranco
wget https://github.com/ContainX/docker-volume-netshare/releases/download/v0.36/docker-volume-netshare_0.36_amd64.deb
dpkg -i docker-volume-netshare_0.36_amd64.deb
service docker-volume-netshare start

Nota: el servicio no tiene autostart, hay que arrancarlo a mano cada vez que se reinicia el equipo.

  1. Pruebo que todo esté en orden con un contenedor por fuera de swarm (opcional pero recomendado)
docker run -i -t --volume-driver=nfs -v 192.168.0.100/mnt/nfs_share:/mnt/nfs_clientshare ubuntu /bin/bash

Deberia tener el directorio montado en /mnt/nfs_clientshare

NFS dentro de swarm

El plugin de docker-volume-netshare puede fallar en swarm si el directorio que se monta se encuentra vacio

Es solo cuestión de editar los YML y agregarles la configuración del plugin
Ejemplo:

version: '3.7'
services:
test:
image: nginx
volumes:
- volumenginx:/mnt/nfs_clientshare
volumes:
volumenginx:
driver: nfs
driver_opts:
share: "192.168.0.50:/mnt/nfs_share"

Lectura sugerida:

Google Docs
Plugin Volumenes
Tutorial NFS en Ubuntu