This is an old revision of the document!


Laboratorul 04 - Docker Swarm NFS

Introducere Laborator

In acest laborator vom discuta despre utilizarea volumelor NFS (network file system) la nivel de Docker Swarm si despre folosirea uneltei declarative Kong pentru crearea de API Gateway-uri mult mai eficient.

Laboratorul se va desfasura, din nou, pe Play With Docker si va avea suport de cod repo-ul din laboratorul precedent, peste care am mai adaugat 2 fisiere .yml in plus (stack-nfs.yml si stack-kong.yml).

Docker NFS

Din pacate, infrastructura de la Play with Docker nu permite realizarea unui demo practic care sa ilustreze folosirea volumelor NFS, avand limitari la nivel de comunicatie inter-masini

In contextul Docker Swarm, nu mai exista un singur host, ci multiple noduri conectate in retea. Acest lucru face ca folosirea volumelor locale sa fie o practica rea, deoarce orchestrarea unui task pe un nod care nu are volumul cerut de containerul taskului va rezulta in rejectarea acelui task.

Exista 2 posibiltati de reparare a acestei probleme:

  • Constrangerea unor servicii sa ruleze doar pe noduri manager
services:
  example:
    deploy:
      placement:
        constraints: [node.role == manager]

Aceasta practica este utila atunci cand exista doar un nod manager (si astfel sunteti siguri ca taskurile ale caror containere au nevoie de volumele definite in configuratie vor rula doar pe managerul unde exista volumele)

In cazul in care exista mai multe noduri manager si vreti, de exemplu, sa rulati o baza de date, daca aceasta va fi orchestrata sa ruleze pe alt nod fata de care a fost prima oara orchestrata, baza de date nu va mai avea acces la volumul unde a stocat date initial si va crea unul nou, ajungandu-se, deci, la neconsistenta

  • Utilizarea volumelor NFS

Server NFS

Un server NFS poate fi rulat, fie nativ, fie folosind Docker. Exista multiple solutii de rulare a unui server NFS folosind Docker, insa noi va recomandam aceasta solutie populara bazata pe Alpine Linux.

Solutia de mai sus reprezinta un container care ruleaza in mod privilegiat, avand acces la resursele gazdei. Inainte sa rulati containerul, trebuie sa va creati un folder ce va fi partajat in retea.

Folderul nu trebuie sa fie de tipul OverlayFS

Pentru a vedea sistemul de fisiere, executati comanda df -Th (pe linux)

Dupa ce ati creat folderul ce va retine datele partajate in retea, executati comanda

docker run -d --name nfs --privileged -v /cale/catre/folderul/creat:/nfsshare -e SHARED_DIRECTORY=/nfsshare itsthenetwork/nfs-server-alpine:latest

Utilizarea Volumelor NFS

Pentru a utiliza volumele partajate, este nevoie sa faceti modificari in configuratia volumelor din cadrul fisierelor .yml. Ca si exemplu, vom folosi o baza de date care are nevoie de volum pentru scriptul de configuratie si pentru persistenta datelor.

services:
  db:
    image: postgres:12
    volumes:
      - db-data-nfs:/var/lib/postgresql/data
      - db-config-nfs:/docker-entrypoint-initdb.d

volumes:
  db-data-nfs:
    driver: local
    driver_opts:
      type: nfs4
      o: "addr=IP_NFS,rw"
      device: ":/database/data"
  db-config-nfs:
    driver: local
    driver_opts:
      type: nfs4
      o: "addr=IP_NFS,rw"
      device: ":/database/config"

IP_NFS este ip-ul masinii pe care ruleaza containerul NFS

Directoarele /database/data si /database/config trebuie sa existe in interiorul directorului partajat de gazda containerului de server NFS (adica /cale/catre/folderul/creat din exemplul precedent)

idp/laboratoare/04.1617174270.txt.gz ยท Last modified: 2021/03/31 10:04 by radu.ciobanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0