Docker swarm

Allikas: Kuutõrvaja

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

https://technologyconversations.com/2016/08/01/integrating-proxy-with-docker-swarm-tour-around-docker-1-12-series/

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