Installazione di Docker Swarm Cluster su CentOS 7

In questo articolo andremo a descrivere come creare un cluster con Docker Swarm su CentOS 7.

Premessa, un cluster su Docker Swarm è composto da nodi Manager e nodi Worker. I Manager sono i nodi che gestiscono tutte le operazioni verso i nodi worker, difatti gestiscono/orchestrano i servizi per mantenere stabile il cluster. Inoltre in un cluster Docker Warm è prevista l’ elezione di un leader nei nodi manager . I Worker invece sono i nodi che eseguono le operazioni (task) demandati dai nodi manager, ad esempio eseguire i container.

Consideriamo di partire da 3 macchine CentOS 7 preinstallate ( qui l’articolo per l’installazione), in particolare :

ds-manager1:192.168.1.130

ds-worker1:192.168.1.121

ds-worker2:192.168.1.132

installiamo su tutti e tre i nodi il Docker Engine (qui l’ installazione su CentOS 7) ed aggiorniamo tutte le macchine

yum update

partiamo con l’ inizializzare il cluster, dal ds-manager1 eseguiamo queste operazioni

[root@ds-manager1 ~]# docker swarm init --advertise-addr 192.168.1.130

ed avremo il seguente risultato

Swarm initialized: current node (zra94khzvdfeq6vzb4fwwjiw1) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join –token SWMTKN-1-4u5lin9eujigziyrnrdkrmhjswbu18t12sc90gtvjc1fbhugxq-d20hf4fug8j0g0xy9jatstgqr 192.168.1.130:2377

To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.

la parte fondamentale è il token rilasciato dal nodo manager per aggiungere un nodo worker,prima di poter eseguire l’operazione di aggiunta dei nodi worker è necessario aprire le porte del firewall su tutti i nodi del cluster:

firewall-cmd --permanent --add-port=2376/tcp

firewall-cmd --permanent --add-port=2377/tcp

firewall-cmd --permanent --add-port=7946/tcp

firewall-cmd --permanent --add-port=7946/udp

firewall-cmd --permanent --add-port=4789/udp

firewall-cmd --permanent --add-port=80/tcp

ed infine faccio il caricamento delle nuove regole

firewall-cmd --reload

A questo punto possiamo aggiungere i nodi worker al cluster

[root@ds-worker2 ~]# docker swarm join --token

SWMTKN1-4u5lin9eujigziyrnrdkrmhjswbu18t12sc90gtvjc1fbhugxq-d20hf4fug8j0g0xy9jatstgqr 192.168.1.130:2377
This node joined a swarm as a worker.

questo risultato è a titolo di esempio.

Dal nodo manager quindi sarà possibile verificare lo stato dei nodi

docker node ls

ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
zra94khzvdfeq6vzb4fwwjiw1 * ds-manager1 Ready Active Leader 19.03.8
mqi82gacts81q8m5z8fefcnqj ds-worker1 Ready Active 19.03.8
v6lu86o07r4qaiu0kul136qcs ds-worker2 Ready Active 19.03.8

è possibile notare che il nodo manager è nominato Leader anche perchè è il solo, nel caso di un cluster comprendente 3 nodi (questo è il vero e proprio cluster), verrebbe subito eletto il Leader, ma dovesse andare down uno dei nodi manager gli altri continuerebbero a dare continuità al cluster nominando un altro leader, ma questo va oltre il nostro scopo dell’ articolo.

Per avere maggiori informazioni sul cluster è possibile utilizzare il seguente comando

docker info

ad esempio per verificare se è attivo il cluster Swarm

docker info | grep Swarm

Swarm: active

Come abbiamo visto precedentemente per aggiungere un nodo worker è necessario avere il token, ma se per caso lo avessimo perso, sarà sempre possibile recuperarlo in questa maniera

docker swarm join-token manager -q

SWMTKN-1-4u5lin9eujigziyrnrdkrmhjswbu18t12sc90gtvjc1fbhugxq-dscc9q3sdwbm4aqlibai858by

Adesso che abbiamo creato il cluster creiamo un servizio dell’ immagine di Alpine Linux replicandolo sui nodi, quindi,  dal nodo manager

docker service create --replicas 2 --name helloworld alpine ping docker.com

in questo caso se andassimo a controllare avremo che i container attivi saranno su due nodi ad esempio manager1 e worker1, ma se volessimo replicarlo anche sul terzo basterà utilizzare la funzione scale del servizio

docker service scale helloworld=3

avremo questo risultato

helloworld scaled to 3
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged

e su ogni nodo avremo

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74e72f1025e1 alpine:latest “ping docker.com” 2 minutes ago Up 2 minutes helloworld.2.lcro7t1qlysx75g16ztz0r0uu

Questo risulta essere un test per capire la funzionalità del cluster Swarm, ma se dovesse andare giù il nodo manager1 non avremmo nessun container su nessun nodo, per ovviare a questo bisogna aggiungere altri due nodi manager.

Potrebbero interessarti anche...