7,540
edits
Changes
no edit summary
[[Docker Orchestration|<< Back to Orchestration Docker main]]
* A Swarm classic nem része az alap Docker programnak, ez egy független kiegészítése, amit külön kell telepíteni, ugyan úgy mint pl a docker-machine-t.
* A Swarm classic szabványos docker konténereket hoz létre a master és anode VM-eken. Külön konténert kap a swarm manager és külön konténert kap a swarm agent. Tehát a hagyományos Docker eszközkészletet használtja fel a swarm classic. Ezen konténerek segítségével telepíti aztán a swarm classic a megfelelő service-eket (konténereket) a node VM-eken. Mindenre a swarm nevű image-et fogjuk használni. Attól függ hogy mit fog csinálni a swarm konténer, amit az image-ból létrehozunk, hogy milyen CMI paramétereket kapott. (master, node vagy list)
* A swarm kezelésére nincsenek dedikált docker és compose parancsok. Be kell 'jelentkezni' swarm módban a manager VM-re, majd onnantól kezdve minden kiadott docker és compose parancs az egész cluster-re vonatkozik, nem a manager VM-en futó docker démonra. (Swarm mode-ban ez nem így van, ott saját parancs készlete van már a swarm-nak)
* A scheduling stratégiákat a swarm cluster létrehozásakor meg kell adni, a service-ek telepítése közben erre már nincs lehetőség. Tehát a docker-compose.yml fájl deploy szekcióját nem veszi figyelembe a swarm classic, az kizárólag a swarm mode-nak szól.
* A swarm classic-kban nincs beépített load balancer szolgáltatás. Magunknak kell létrehozni. A load-balancer a végpontok listáját a discovery service szolgáltatótól kell hogy lekérdezze (pl. consul)
Kétféleképpen hozhatunk létre swarm classic cluster-t:
Checking connection to Docker...
</pre>
{{tip|Természetesen a '''swarm classic konténereket''' manuálisan is létre lehet hozni, nem kell hozzá a '''docker-machine --swarm''' parancs. Ez csak egy segítség. Ilyenkor a docker-machine ugyan azt csinálja, amit mi is csinálni fogunk a [[Docker Swarm Classic#Cluster_l.C3.A9trehoz.C3.A1sa_manu.C3.A1lisan|Cluster létrehozás manuálisan]] fejezetben. }}
Ha a '''--swarm-master''' kapcsolót elhagyjuk, akkor normál worker-t adunk hozzá:
<br>
===VM-ek ellenőrzése===
<pre>
Ahhoz hogy utasításokat tudjunk kiadni a swarm cluster-en, a docker kliensünkkel rá kell csatlakozni a swarm manager konténerben futó docker démonra. Tehát arra a docker-démonra kell csatlakozni ami a konténert natívan futtatja a VM-en, hanem arra swarm docker démonra a swarm konténer belsejében:
:[[File:ClipCapIt-180726-223323.PNG]]
Ezt kétféle képen tehetjük meg.
# A docker kliensünknek a '''-H tcp:ip:port''' paraméterrel megadjuk a swarm konténer címét és portját
# Használjuk a '''docker-machine env''' parancs '''--swarm''' kapcsolóját, ami ezt elvégzi helyettünk. Már korábban is láthattuk, hogy a '''docker-machine evn <gépnév>''' paranccsal transzparens módon tudtunk csatlakozni a távoli démonra a lokális klienssel. Ekkor minden kiadott docker parancs a távoli démonon futott le. Ha a '''--swarm''' kapcsolót is használjuk, és a távoli docker démon futtat swarm manager konténert, akkor közvetlen a swarm konténer belsejébe futó docker démon-ra fog csatlakozni szintén transzparens módon a lokális docker kliens.
Ha a '''--swarm''' kapcsolót is használjuk, akkor innentől kezdve minden kiadott docker parancs már a swarm classic cluster-en fog lefutni:
<pre>
# eval "$(docker-machine env --swarm swarm-master)"
A '''docker info''' láthatjuk, hogy 4 konténert mutat, holott a master-t futtató VM-en még semmilyen konténert nem telepítettünk. Ezek mind swarm konténerek, három worker és egy master.
<pre>
# docker info
Containers: 54
Running: 4
Paused: 0
A '''ps''' parancs is az egész cluster-re vonatkozik:
<pre>
# docker ps -a
<pre>
docker-machine create -d kvm --kvm-network "docker-network" --kvm-disk-size "5000" \
Hozzunk létre node-okat is a '''--swarm-master''' kapcsoló elhagyásával. A discovery szolgáltatás címe változatlan.
<pre>
docker-machine create -d kvm --kvm-network "docker-network" --kvm-disk-size "5000" \
A node-ok listázását bármelyik gépen futtathatjuk, ami eléri a host-ot: . Ez a VM-en futó docker-engine-ben fog létrehozni egy új swarm konténert a lekérdezés idejére. Paraméterként megkapja a consul címét, ahonnan elkéri a node-ok listáját. Látható, hogy mind két node-ot megtalálta. Egy van a master VM-en, amit automatikusan hozott létre a '''docker-machine''' parancs, és egy van a node számára létrehozott VM-en.
<pre>
# docker run --rm swarm list consul://192.168.0.105:8500
</pre>
A Consul webes konzolján is megnézhetjük a node-ok listáját a /nodes alatt:
http://localhost:8500/ui/#/dc1/kv/docker/swarm/nodes/
:[[File:ClipCapIt-180708-235803.PNG]]
Most a lokális docker kliensünkkel csatlakozzunk rá a swarm master-re ahogy azt már fentebb tettük:
<pre>
# eval "$(docker-machine env --swarm consule-master)"
És nézzük meg hány konténer jött létre összesen a cluster-ben:
<pre>
# docker info
=Cluster létrehozása manuálisan=
A '''swarm classic cluster'''-t nem csak a '''docker-machine''' paranccsal lehet létrehozni, bár kétségtelen hogy úgy a legegyszerűbb. Létrehozhatjuk swarm cluster nélkül is a VM-eket, majd oda SSH-val belépve, manuálisan is felépíthetjük a cluster-t (vagyis elindíthatjuk a swarm konténereket). Nézzünk erre egy token-es (DockerHub) példát.
===Cluster regisztrálása===
Most is DockerHub-ot fogunk használni discovery szolgáltatóként, az egyszerűség végett. Ugyan úgy regisztráljuk a cluster-t a rögtön megszűnő swarm konténerrel ahogy azt már tettük.
<pre>
# docker run --rm swarm create
</pre>
https://docs.docker.com/swarm/reference/manage/<br>
http://harrylee.me/2016/08/23/Docker-Docker-Swarm-with-Docker-Machine-Quick-Setup-Guide/
===Master létrehozása===
https://www.w3cschool.cn/doc_docker_1_10/docker_1_10-swarm-install-manual-index.html
Hozzuk létre a master VM-jét swarm nélkül. A docker-machine-al készítünk egy docker ready gépet.
<pre>
# docker-machine create -d kvm --kvm-network "docker-network" manager
Lépjünk be SSH-val az új VM-re.
<pre>
# docker-machine ssh manager
Mikor a manager-t létrehozzuk, akkor ugyan azt a '''swarm konténert ''' image-t futtatjuk, amivel regisztráltuk a cluster-t a Docker Hub-on, csak most nem a create hanem a manager paraméterrel, innen fogja tudni a swarm, hogy manager konténert kell létrehoznia. <br>A második paraméter a cluster azonosítója a Docker Hub'''docker-machine --onswarm''' üzemmódja pont ezt csinálta meg, aminek azzal a segítségével le tudja kérdezni különbséggel, hogy a master VM-en egy node-ok listáját ot is mindig létrehoz a managermaster mellé.
<pre>
docker@manager:~$ docker run -d -p 4000:4000 swarm manage -H :4000 --advertise 192.168.42.83:4000 token://4d245124e7feba5224a117bdd83c9acc
===Node-ok létrehozása===
Hozzunk létre egy swarm nélküli VM-et a node-nak is:
<pre>
# docker-machine create -d kvm --kvm-network "docker-network" node1
Lépjünk be SSH-val az új VM-re:
<pre>
# docker-machine ip node1
Itt is ugyan úgy a swarm image-ból fogunk csinálni egy konténert, de a manage paraméter helyett a '''join''' paramétert adjuk mega a konténernek, innen fogja tudni, hogy node-ot kell létrehozni.
<pre>
docker@node1:~$ docker run -d \
Ha ugyan ezen a VM-en nyomunk egy '''docker ps'''-t, akkor láthatjuk, hogy létrejött az egy szem swarm konténer, ami '''node''' üzemmódban fut.
<pre>
docker@node1:~$ docker ps
34e10a5463fa swarm "/swarm join --addr=…" 30 seconds ago Up 29 seconds 2375/tcp kind_goldberg
</pre>
==Mi jött létre==
Egy rögtön megszűnő swarm konténert futtassunk a list paraméterrel, hogy lekérje a DockerHub-tól a node-ok listáját.
<pre>
# docker run --rm swarm list token://4d245124e7feba5224a117bdd83c9acc
Ha a master VM-en az ott futó docker klienssel rácsatlakozunk a swarm master konténerre, akkor listázni tudjuk a swarm cluster részleteit.
<pre>
$ docker -H :4000 info
aa97325e8cb6 painted "/magic.sh bird" node1/bird_bird_3
</pre>
Láthatjuk, hogy 10 konténer jött létre, 3-3 a node2-ön és a swarm-master-en, és 4 a node1-en. A konténer neve mindig a node nevével kezdődik, majd jön az image név majd a sorszáma a replikának. Ahogy láthatjuk, a swarm egyenlően akarta elosztani a node-ok között a konténereket. Ez a "spread" elosztási stratégia, ez az alapértelmezett. Mivel a swarm cluster létrehozásakor nem adtunk meg stratégiát, ezért a "spread" scheduling stratégiát használja a cluster.
==Kiosztási stratégiák==
A kiosztási stratégiát a master létrehozásakor kell megadni a '''--swarm-strategy ''' kapcsolóval. Három stratégia közül választhatunk:
===spread===