Aller au contenu principal

Partager des volumes docker avec un serveur NFS

Introduction

Le but de cette documentation est d'expliquer comment partager des volumes docker entre noeud d'un cluster swarm on va également faire l'exemple d'un déploiement de stack

Prérequis : Création du point de montage nfs

# ------------------------------ Côté srv NFS
# maj list paquet
apt-get update

# install serveur nfs
apt-get install nfs-kernel-server nfs-common

# création du dossier de partage
mkdir /srv/partagenfs
chown nobody:nogroup /srv/partagenfs
chmod 755 /srv/partagenfs/

# Modification du fichier /etc/exports
nano /etc/exports

# Ajouter la ligne
/srv/partagenfs 192.168.1.0/24(rw,sync,anonuid=65534,anongid=65534,no_wdelay,crossmnt,insecure,no_root_squash,insecure_locks,sec=sys)

# Traduction : tous les hôtes réseau 192.168.1.0 sont autorisés a écrire sur le partage avec l'utilisateur nobody:nogroup (important car pas de droit spé sur nfs)
# pour les autres paramètres se référer au man de nfs

# Seulement si on avait déjà des partages faire la commande si dessous
exportfs -ua && exportfs -a
# Sinon
exportfs -a

# Voir les montage sur la machine
showmount -e


#------------------------------ Côté srv DOCKER (tous)
# maj list paquet
apt-get update

# install serveur nfs
apt-get install nfs-common

Exemple de créationb d'une stack

Pour commencer créer un dossier dans le partage nfs qui accueillera le volume dans notre exemple on va faire une stack ubuntu où on monte le /var sur le nfs

# ------------------------------ Côté srv NFS
mkdir /srv/partagenfs/ubuntu

Fichier stack.yaml

version: "3.2"
services:
agent:
image: ubuntu:latest
volumes:
- ubuntu_data:/var
deploy:
replicas: 1 # Nombre de conteneur
volumes:
ubuntu_data:
driver: local # on utilise le driver de base
driver_opts:
type: nfs
o: "addr=vm-nfs,rw" # adresse du serveur nfs et les droits read/write a mettre en place
device: ":/srv/partagenfs/ubuntu" # le dossier sur le partage nfs

Déploiement et gestion de la stack

# ------------------------------------------ Côté leader sur swarm
docker stack deploy -c stack.yaml stackname
# où stack.yaml est notre fichier précédent et stackname le nom que l'on donne à la stack

# Vérifier l'état de la stack et voir les erreurs si y'en a:
docker stack ps --no-trunc stackname

# ajuster le nb de conteneur
docker service scale stackname=2 # là on passe à 2 conteneur

# Supprimer la stack
docker stack rm stackname