Pokud jste svůj vývojářský pracovní postup kontejnerizovali, budete souhlasit s tím, že Docker je jednou z nejlepších možností pro správu verzí. Docker Swarm je však jednou z funkcí Dockeru, která se používá k orchestraci složitých aplikací.
Pracovní mechanismus Docker Swarm může být zpočátku těžké prolomit. Ale žádný strach, v tomto článku si to rozebereme. Co je tedy Docker Swarm? Proč to používat? A jak to funguje?
Co je to Docker Swarm a jak to funguje?
Docker Swarm označuje skupinu hostitelů Docker (počítačů) propojených v síti jako cluster za účelem poskytování specifikovaných úloh. Každý hostitel Docker v tomto clusteru je uzel, nazývaný také pracovní uzel.
Chcete-li zajistit efektivní rozdělení úkolů, potřebujete uzel správce. V ideálním případě začíná inicializace režimu Docker Swarm u manažerského uzlu a následné uzly se stanou pracovníky.
Jako operátor musíte komunikovat pouze s manažerským uzlem, který předává pokyny pracovníkům. Pracovní uzly vždy obdrží přidělení úkolů z uzlu manažera a podle toho je provedou.
Manažerský uzel se však může také podílet na provádění úkolů (jako pracovník) nebo přímo na správě obličeje. Plánování úloh na manažeru můžete zabránit přepnutím jeho stavu z aktivní na odtok. Vaše rozhodnutí přiřadit tuto duální funkci však může záviset na několika faktorech. V podstatě si chcete být jisti, že má dostatek zdrojů na to, aby zvládl několik rolí, než tak učiníte.
Uzly selžou. Manažerský uzel tedy aktivně monitoruje stav každého pracovního uzlu a aktivuje mechanismus odolný proti selhání pro přeplánování úlohy z neúspěšného uzlu na jiný.
Ale co když se zhroutí i manažerský uzel? Zajímavé je, že roj běží dál. Jediným úskalím je, že už nebudete moci komunikovat s manažerským uzlem a ovládat cluster.
Běžným bezpečným přístupem, jak tomu zabránit, je přiřadit roli správce mnoha uzlům (Docker doporučuje maximálně sedm na cluster). Z nich pak můžete vybrat uzel primárního správce. Když dojde k selhání primárního manažera, převezme roli jeden z pohotovostních manažerů.
Nemusíte se však starat o přepínání rolí mezi uzly nebo údržbu stavu v clusteru. O to se stará raftový konsensus algoritmus (metoda odolná proti chybám) zabudovaný do Docker SwarmKit.
Proč používat Docker Swarm?
Docker Swarm je užitečný pro nasazení složitých aplikací s vysokou škálovatelností. Jedním z jeho primárních případů použití je decentralizace mikroslužeb. Každá mikroslužba pak sdílí podobný kontejner s těmi na jiných pracovních uzlech.
Dalším důvodem, proč používat Docker Swarm, je to, že více hostitelů spouští úlohy současně v clusteru. To je na rozdíl od Docker Compose, který umožňuje pouze provozovat více kontejnerů na jednom enginu Docker.
Tento škálovatelný atribut Docker Swarm umožňuje aplikacím, aby byly trvale dostupné s nulovou latencí. Je to dokonce jeden z důvodů, proč chcete zvolte Docker před ostatními virtualizačními nástroji.
A co víc? Na rozdíl od jednotlivých kontejnerů Docker, kde se kontejner zastaví, když selže, Docker Swarm automaticky přerozdělí úkoly mezi dostupné pracovní uzly, kdykoli některý selže.
Docker Swarm také uchovává zálohu každého stavu. Takže můžete vždy vrátit nové konfigurace rojů do stavu dřívějších. Řekněme, že manažerský uzel na předchozím roji selže; můžete spustit nový cluster s více manažerskými uzly a vrátit jej zpět, aby se přizpůsobila konfigurace předchozího.
Je také důležité zmínit, že interakce mezi manažerským uzlem a pracovními uzly je bezpečná.
Docker má mnoho alternativ, a jedním z nejbližších je Kubernetes. Docker Swarm se však snadno používá a je více automatizovaný. Zatímco například v některých jiných nástrojích pro orchestraci, jako je Kubernetes, možná budete muset vyrovnávat zátěž ručně, Docker Swarm nabízí automatické vyvažování zátěže, které DevOps usnadňuje život.
Architektura Docker Swarm
Architektura Docker Swarm se točí kolem služeb, uzlů a úloh. Každý z nich však hraje roli v úspěšném provozu zásobníku.
Služby
Služba Docker Swarm podrobně popisuje konfiguraci obrazu Docker, který spouští všechny kontejnery ve swarmu. Obsahuje informace o úkolech v clusteru. Služba může například popisovat a Dockerized nastavení SQL serveru.
Když spustíte službu, přinutí manažerský uzel, aby se synchronizoval s jeho konfiguracemi. Uzel manažera pak spouští zbytek pracovních uzlů na základě zadaných nastavení ve službě.
Služby v Docker Swarm mohou být globální nebo replikované.
Rozdíl mezi nimi je v tom, že zatímco globální služby definují pouze jednu úlohu pro všechny uzly v clusteru, replikované služby určují počet úloh na uzel.
Uzly
Uzel v Docker Swarm je instancí celého běhového prostředí Docker, známého také jako Docker engine. Swarm uzly mohou být fyzické nebo virtuální stroje. Představte si to jako síť počítačů, na kterých běží podobné procesy (kontejnery).
Obvykle se však uzly rozprostírají přes několik počítačů a serverů, na kterých běží motor Docker v reálných aplikacích. A jak již bylo zmíněno dříve, uzel může být v závislosti na roli manažerský nebo pracovní uzel.
Manažerský uzel poslouchá tlukot srdce roje a řídí pracovní uzly, které provádějí úkoly, které jim byly přiděleny manažerským uzlem. Jak již bylo řečeno, v roji můžete mít více než jeden manažerský uzel. V ideálním případě se však snažte omezit počet pod sedm, protože přidání příliš mnoha manažerských uzlů by mohlo snížit výkon roje.
Úkoly
Úloha definuje práci přiřazenou každému uzlu v Docker Swarm. Na pozadí se plánování úloh v Docker Swarm spustí, když orchestrátor vytvoří úlohy a předá je plánovači, který vytvoří instanci kontejneru pro každou úlohu.
Uzel správce pak použije plánovač k přiřazení a opětovnému přiřazení úkolů uzlům, jak je požadováno a specifikováno ve službě Docker.
Docker Swarm vs. Docker Compose: Jaké jsou rozdíly?
Lidé často používají Docker Compose a Docker Swarm zaměnitelně. Ačkoli oba zahrnují provozování více kontejnerů, jsou různé.
Zatímco Docker Compose umožňuje spouštět více kontejnerů na jednom hostiteli, Docker Swarm je distribuuje přes několik enginů Docker v clusteru.
Docker Compose používáte, když potřebujete vytvořit samostatné kontejnery pro každou službu ve vaší aplikaci. Když se tedy jedna komponenta zhroutí, nezasahuje do ostatních. Když však hostitelský počítač selže, zhroutí se také celá aplikace.
Docker Swarm vám však pomáhá spouštět mnoho kontejnerů na clusterových uzlech. Každá součást vaší aplikace tedy sedí na několika uzlech. A když jeden uzel obsluhující komponentu aplikace selže, roj přidělí svůj úkol jinému uzlu v clusteru a přeplánuje běžící úlohy, čímž zabrání prostojům.
I když tedy můžete mít na Docker Compose výpadky, Docker Swarm zajišťuje, že vaše aplikace běží dál pomocí záložních serverů (pracovních uzlů). Docker 1.13 však podporuje nasazení Docker Compose do režimu Swarm pomocí nasadit docker stack příkaz.
Docker Swarm vám pomůže nasadit složité aplikace
Kontejnerizace překonala virtuální stroje v návrhu softwaru pro nepřetržitou integraci a nepřetržité doručování (CI/CD). Pokud se chcete stát neocenitelným odborníkem na DevOps, porozumět tomu, co je součástí mechanismu Docker Swarm, je výhodou.
Pravděpodobně víte, jak roztočit kontejner Docker nebo dokonce spustit Docker Compose pro více kontejnerů v jednom hostiteli. Docker Swarm je ale šikovnější pro nasazení aplikací se složitou architekturou. Rozděluje procesy do jednotek, zlepšuje přístup k běhovému prostředí a snižuje nebo dokonce eliminuje šance na prostoje.