Docker swarm
Sissejuhatus
Docker swarm võimaldab grupeerida erinevaid konteinereid, skaleerida neid ja pakub failoverit. Kui tahta lihtsat ja robustset vahendit mis hoiab konteinerid elus ja stardib neid nodede feilimisel uuesti üles on swarm nendele hea lahendus. Kui üks node jätta seisma stardib ta seal olnud konteinerid automaatselt teistele workeritele. Samas manager node ei tohi maha minna, kui see läheb siis failover ka ei tööta ja süsteem ei oska tundub siis midagi peale hakata. Selleks, et süsteem kannataks välja ühe master node kaotuse peab neid olema clustris vähemalt kolm aktiivset. Kusjuures kõik noded võivad olla ka managerid sest manager kannab endas ka worker node ülesandeid nagu paistab. Seega oleks võimalikult väiksem failover cluster kolme node sisaldav.
Swarmi loomine ja haldus
Loodava swarmi clustri arhidektuur oleks järgnev
Proxy - 192.168.1.101 Manager1 - 192.168.1.102 Manager2 - 192.168.1.103 Manager3 - 192.168.1.104 Worker1 - 192.168.1.105 Worker2 - 192.168.1.106
Proxy roll oleks siis suunata temale kinnitatud dns domeene kõigile kolmele managerile edasi
Tekitame esimeses nodes swarmi clustri
# docker swarm init --advertise-addr 192.168.1.102 Swarm initialized: current node (vgbw9pkyuibwpkcjxk8cvhy0o) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-04ckwo5fpnej5gbygpcdyole7wp6fk5pl6sf3ljsblu2r65bow-9gj0xfacx628pmaqs9m3tznbe 192.168.1.102:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Lisame ülejäänud kaks node swarmi, selleks käivitame nendes ülal initi poolt antud käsu
# docker swarm join --token SWMTKN-1-04ckwo5fpnej5gbygpcdyole7wp6fk5pl6sf3ljsblu2r65bow-9gj0xfacx628pmaqs9m3tznbe 192.168.1.102:2377 This node joined a swarm as a worker.
Loodud clustri staatust näeme järgnevalt
# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 7e2nb4o59vvrq92588mdt0s8x test Ready Active gvy7dc4lv7gkjinfjrd45g5sg test Ready Active vgbw9pkyuibwpkcjxk8cvhy0o * test Ready Active Leader
Dockeri node võib olla nii workeri kui manageri rollis
Soovides lisada uut manageri tuleb küsida managerilt õige token
docker swarm join-token manager
Lisaks saab manageris workerit ülendada manageriks järgneva käsuga
docker node promote ID
Soovides node swarmist eemaldadamiseks tuleb kõigepealt nodes endas anda käsk
docker swarm leave
Ja siis mangeris
docker node rm ID
Teenuste paigaldus swarmi
Nüüd saame näiteks luua sinna teenuse httpd nimelisest konteinerist ja teha selle 80 pordil kättesaadavaks
# docker service create --name webserver -p 80:80 httpd
Tekitame kaks httpd konteinerit
# docker service scale webserver=2
Vaatame, et mis meil välja tuli
# docker service ls ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS c3vsktx9vm4j webserver.1 httpd:latest test1 Running Running 3 minutes ago qgwpdt5w481b webserver.2 httpd:latest test2 Running Running 50 seconds ago
Logide nägemiseks
# docker service logs webserver.1
Docer-compose failide kasutamiseks
# docker stack deploy --compose-file docker-compose.yml webserver
Et näha mis konteinerid clustris töötavad
# docker node ps
Kõikide teenuste eemaldamiseks
# docker service rm $(docker service ls -q)
Dockeri teenustel pole nende restartimiseks eraldi käsku. Aitab kui nad skaleerida korraks nulli
$ docker service scale svr=0 $ docker service scale svr=1
Selleks, et dockeris kasutada aga püsivat storaget vajavaid teenuseid nagu näiteks MySQL või PostgreSQL tuleb seadistada kõigile dockeri nodedele mingi presistent storage. See võib olla lihtsalt NFS share mis haagitud kõigile nodedele samasse kohta külge aga ka näiteks glusterfs või lizardfs
Lingid
Terve hulk erinevaid haldusliideseid https://www.smartspate.com/overview-gui-interfaces-managing-docker-containers/
https://upcloud.com/community/tutorials/load-balancing-docker-swarm-mode/ nginxi load-balancery seadistamine swarmi