Docker swarm et NFS

Posted by

Docker Swarm fournit de manière native via son driver local, la possibilité de monter un système de fichiers partagé. En natif, nous allons retrouver NFS, Glusterfs ou SSHFS par exemple. Dans mon cas, ce sera NFS :

Mon cluster Swarm est le suivant :

julien@swarm0:~$ docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
uhr91g3ak37vhumtlpic86gwl *   swarm0     Ready     Drain          Leader           24.0.7
qmsjds24sx5ed9ez9q8quas99     swarm1     Ready     Active                          24.0.7
uxigsaj9j6z0y6hdsyxz162my     swarm2     Ready     Active                          24.0.7

Le volume partagé est construit depuis un serveur NFS en HA géré par mon rôle Ansible DRBD+Heartbeat.

Sur les worker node il est nécessaire de disposer du client nfs, disponible via le package nfs-common sous Debian/Ubuntu.

On peut ensuite passer à son fichier docker compose :

version: "3.2"

volumes:
  www-data:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=192.168.69.30,rw"
      device: ":/mnt/nfs"

networks:
  nginx:
    driver: overlay

services:
  nginx:
    image: nginx:latest
    networks:
      - "nginx"
    ports:
      - "8080:80"
    volumes:
      - type: volume
        source: www-data
        target: /var/www/html
        volume:
          nocopy: true
    deploy:
      replicas: 2
      restart_policy:
        condition: any

Déployons la stack :

docker stack deploy --compose-file nginx.yml nginx-stack

Vérifions notre volume :

docker volume ls
DRIVER    VOLUME NAME
local     nginx-stack_www-data
docker volume inspect nginx-stack_www-data
[
    {
        "CreatedAt": "2023-12-19T21:30:41Z",
        "Driver": "local",
        "Labels": {
            "com.docker.stack.namespace": "nginx-stack"
        },
        "Mountpoint": "/var/lib/docker/volumes/nginx-stack_www-data/_data",
        "Name": "nginx-stack_www-data",
        "Options": {
            "device": ":/mnt/nfs",
            "o": "addr=192.168.69.30,rw",
            "type": "nfs"
        },
        "Scope": "local"
    }
]

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.