Ak ste svoj vývojový pracovný postup kontajnerizovali, budete súhlasiť s tým, že Docker je jednou z najlepších možností pre správu verzií. Docker Swarm je však jednou z funkcií Dockera, ktorá sa používa na organizovanie zložitých aplikácií.
Pracovný mechanizmus Docker Swarm môže byť spočiatku ťažké prelomiť. Ale žiadny strach, v tomto článku si to rozoberieme. Čo je teda Docker Swarm? Prečo to používať? A ako to funguje?
Čo je to Docker Swarm a ako to funguje?
Docker Swarm označuje skupinu hostiteľov Docker (počítačov) prepojených v sieti ako klaster na poskytovanie špecifikovaných úloh. Každý hostiteľ Docker v tomto klastri je uzol, nazývaný aj pracovný uzol.
Na zabezpečenie efektívnej distribúcie úloh potrebujete manažérsky uzol. V ideálnom prípade sa inicializácia režimu Docker Swarm začína manažérskym uzlom a následné uzly sa stávajú pracovníkmi.
Ako operátor musíte komunikovať iba s manažérskym uzlom, ktorý odovzdáva pokyny pracovníkom. Pracovné uzly vždy dostávajú pridelenie úloh z uzla manažéra a podľa toho ich vykonávajú.
Manažérsky uzol sa však môže podieľať aj na vykonávaní úloh (ako pracovník) alebo priamo na riadení tváre. Plánovaniu úloh na manažérovi môžete zabrániť prepnutím jeho stavu z aktívny do vypustiť. Vaše rozhodnutie priradiť túto dvojitú funkciu však môže závisieť od viacerých faktorov. V podstate si chcete byť istí, že má dostatok zdrojov na zvládnutie niekoľkých rolí predtým, ako tak urobíte.
Uzly zlyhajú. Takže manažérsky uzol aktívne monitoruje stav každého pracovného uzla a aktivuje mechanizmus odolný proti zlyhaniu na preplánovanie úlohy z neúspešného uzla na iný.
Ale čo ak sa zrúti aj manažérsky uzol? Zaujímavé je, že roj stále beží. Jedinou nevýhodou je, že už nebudete môcť komunikovať s manažérskym uzlom na ovládanie klastra.
Bežným bezpečným prístupom, ako tomu zabrániť, je priradiť rolu manažéra mnohým uzlom (Docker odporúča maximálne sedem na klaster). Potom z nich môžete vybrať hlavný manažérsky uzol. Keď primárny manažér zlyhá, úlohu prevezme jeden z pohotovostných manažérov.
Nemusíte sa však obávať prepínania rolí medzi uzlami alebo údržby stavu v klastri. Postará sa o to raftový konsenzuálny algoritmus (metóda odolná voči chybám) zabudovaná do Docker SwarmKit.
Prečo používať Docker Swarm?
Docker Swarm je užitočný pri nasadzovaní zložitých aplikácií s vysokou škálovateľnosťou. Jedným z jeho primárnych prípadov použitia je decentralizácia mikroslužieb. Každá mikroslužba potom zdieľa podobný kontajner s tými na iných pracovných uzloch.
Ďalším dôvodom na použitie Docker Swarm je to, že viacero hostiteľov spúšťa úlohy súčasne v klastri. Toto je rozdiel od Docker Compose, ktorý vám umožňuje spúšťať viacero kontajnerov iba na jednom Docker engine.
Tento škálovateľný atribút Docker Swarm umožňuje, aby boli aplikácie konzistentne dostupné s nulovou latenciou. Je to dokonca jeden z dôvodov, prečo to chcete zvoliť Docker pred inými virtualizačnými nástrojmi.
A čo viac? Na rozdiel od jednotlivých kontajnerov Docker, kde sa kontajner zastaví, keď zlyhá, Docker Swarm automaticky prerozdelí úlohy medzi dostupné pracovné uzly vždy, keď jeden zlyhá.
Docker Swarm tiež uchováva zálohu každého stavu. Takže môžete vždy vrátiť nové konfigurácie roja do stavu predchádzajúcej. Povedzme, že manažérsky uzol na predchádzajúcom roji zlyhá; môžete spustiť nový klaster s viacerými manažérskymi uzlami a vrátiť ho späť, aby ste prispôsobili konfiguráciu predchádzajúceho.
Je tiež dôležité spomenúť, že interakcia medzi riadiacim uzlom a pracovnými uzlami je bezpečná.
Docker má veľa alternatív, a jedným z najbližších je Kubernetes. Docker Swarm sa však ľahko používa a je automatizovanejší. Napríklad, aj keď možno budete musieť manuálne vyvážiť zaťaženie v niektorých iných nástrojoch na orchestráciu, ako je Kubernetes, Docker Swarm ponúka automatické vyrovnávanie zaťaženia, ktoré uľahčuje život DevOps.
Architektúra Docker Swarm
Architektúra Docker Swarm sa točí okolo služieb, uzlov a úloh. Každý má však svoju úlohu pri úspešnom riadení zásobníka.
Služby
Služba Docker Swarm podrobne popisuje konfiguráciu obrazu Docker, ktorý spúšťa všetky kontajnery v roji. Obsahuje informácie o úlohách v klastri. Napríklad služba môže popisovať a Dockerized nastavenie servera SQL.
Keď spustíte službu, prinúti manažérsky uzol, aby sa synchronizoval s jeho konfiguráciami. Uzol manažéra potom spustí zvyšok pracovných uzlov na základe zadaných nastavení v službe.
Služby v Docker Swarm môžu byť globálne alebo replikované.
Rozdiel medzi nimi je v tom, že zatiaľ čo globálne služby definujú iba jednu úlohu pre všetky uzly v klastri, replikované služby určujú počet úloh na uzol.
Uzly
Uzol v Docker Swarm je inštanciou celého runtime Docker, známeho aj ako Docker engine. Swarmové uzly môžu byť fyzické alebo virtuálne stroje. Predstavte si to ako sieť počítačov, na ktorých bežia podobné procesy (kontajnery).
Typicky sa však uzly rozprestierajú na niekoľkých počítačoch a serveroch s motorom Docker v aplikáciách v reálnom živote. A ako už bolo spomenuté, uzol môže byť manažérsky alebo pracovný uzol v závislosti od roly.
Manažérsky uzol počúva tlkot srdca roja a riadi pracovné uzly, ktoré vykonávajú úlohy, ktoré im manažérsky uzol pridelil. Ako už bolo uvedené, v roji môžete mať viac ako jeden manažérsky uzol. V ideálnom prípade sa však pokúste obmedziť počet pod sedem, pretože pridanie príliš veľkého počtu manažérskych uzlov môže znížiť výkon roja.
Úlohy
Úloha definuje prácu priradenú každému uzlu v Docker Swarm. Na pozadí sa plánovanie úloh v Docker Swarm spustí, keď orchestrátor vytvorí úlohy a odovzdá ich plánovaču, ktorý vytvorí inštanciu kontajnera pre každú úlohu.
Manažérsky uzol potom použije plánovač na priradenie a opätovné priradenie úloh uzlom podľa požiadaviek a špecifikácií v službe Docker.
Docker Swarm vs. Docker Compose: Aké sú rozdiely?
Ľudia často používajú Docker Compose a Docker Swarm zameniteľne. Hoci obe zahŕňajú prevádzku viacerých kontajnerov, sú odlišné.
Zatiaľ čo Docker Compose vám umožňuje spustiť viacero kontajnerov na jednom hostiteľovi, Docker Swarm ich distribuuje cez niekoľko Docker motorov v klastri.
Docker Compose používate, keď potrebujete vytvoriť samostatné kontajnery pre každú službu vo vašej aplikácii. Keď sa teda jeden komponent zrúti, neprekáža ostatným. Keď však hostiteľský počítač zlyhá, zlyhá aj celá aplikácia.
Docker Swarm vám však pomáha spúšťať veľa kontajnerov na zoskupených uzloch. Takže každá súčasť vašej aplikácie sedí na niekoľkých uzloch. A keď jeden uzol obsluhujúci komponent aplikácie zlyhá, roj pridelí svoju úlohu inému uzlu v rámci klastra a preplánuje spustené úlohy, čím zabráni prestojom.
Preto, aj keď môžete mať na Docker Compose prestoje, Docker Swarm zaisťuje, že vaša aplikácia zostane spustená pomocou záložných serverov (pracovných uzlov). Docker 1.13 však podporuje nasadenie Docker Compose do režimu Swarm pomocou nasadenie zásobníka dockerov príkaz.
Docker Swarm vám pomôže nasadiť zložité aplikácie
Kontajnerizácia prekonala virtuálne stroje v dizajne softvéru s nepretržitou integráciou a nepretržitým doručovaním (CI/CD). Preto je pochopenie hrubej podstaty mechanizmu Docker Swarm výhodou, ak sa chcete stať neoceniteľným odborníkom na DevOps.
Pravdepodobne viete, ako roztočiť kontajner Docker alebo dokonca spustiť Docker Compose pre viacero kontajnerov v jednom hostiteľovi. Docker Swarm je však užitočnejší na nasadenie aplikácií s komplexnou architektúrou. Rozdeľuje procesy na jednotky, zlepšuje prístup k runtime a znižuje alebo dokonca eliminuje šance na prestoje.