Als je je ontwikkelworkflow hebt gecontaineriseerd, ben je het ermee eens dat Docker een van de beste keuzes is voor versiebeheer. Docker Swarm is echter een van de functies van Docker die wordt gebruikt om complexe apps te orkestreren.
Het Docker Swarm-werkmechanisme kan in het begin moeilijk te kraken zijn. Maar geen zorgen, we zullen het in dit artikel opsplitsen. Dus wat is Docker Swarm? Waarom het gebruiken? En hoe werkt het?
Wat is Docker Swarm en hoe werkt het?
Docker Swarm verwijst naar een groep Docker-hosts (computers) die in een netwerk zijn verbonden als een cluster om gespecificeerde taken te leveren. Elke Docker-host in dit cluster is een knooppunt, ook wel een werkknooppunt genoemd.
Voor een efficiënte taakverdeling heb je een managernode nodig. Idealiter begint een Docker Swarm-modusinitialisatie met het managerknooppunt en worden daaropvolgende knooppunten werkers.
Als operator hoeft u alleen te communiceren met het managerknooppunt, dat instructies doorgeeft aan de werknemers. Steevast ontvangen de werkknooppunten taaktoewijzing van het managerknooppunt en voeren deze dienovereenkomstig uit.
Het managerknooppunt kan echter ook deelnemen aan de uitvoering van taken (als werknemer) of het management volledig onder ogen zien. U kunt taakplanning op de manager voorkomen door de status ervan te wijzigen van actief tot droogleggen. Maar uw beslissing om deze dubbele functie toe te wijzen, kan van verschillende factoren afhangen. In wezen wilt u er zeker van zijn dat het voldoende middelen heeft om verschillende rollen uit te voeren voordat u dit doet.
Knooppunten mislukken. Het managerknooppunt bewaakt dus actief de status van elk werkknooppunt en activeert een faaltolerant mechanisme om de taak opnieuw te plannen van een mislukt knooppunt naar een ander.
Maar wat als de managernode ook crasht? Interessant is dat de zwerm blijft rennen. De enige valkuil is dat u niet meer kunt communiceren met het managerknooppunt om het cluster te besturen.
De gebruikelijke faalveilige benadering om dit te voorkomen, is door de rol van manager aan veel knooppunten toe te wijzen (Docker raadt er maximaal zeven per cluster aan). Vervolgens kunt u daaruit het primaire managerknooppunt selecteren. Wanneer de primaire manager crasht, neemt een van de standby-managers de rol over.
U hoeft zich echter geen zorgen te maken over het wisselen van rollen tussen knoop punten of status onderhoud in een cluster. Het raft-consensusalgoritme (een fouttolerante methode) ingebouwd in de Docker SwarmKit zorgt hiervoor.
Waarom Docker Swarm gebruiken?
Docker Swarm is handig voor het implementeren van complexe apps met hoge schaalbaarheidsvooruitzichten. Een van de primaire use-cases is het decentraliseren van microservices. Elke microservice deelt vervolgens een vergelijkbare container met die op andere werkknooppunten.
Een andere reden om Docker Swarm te gebruiken, is dat meerdere hosts gelijktijdig taken in een cluster uitvoeren. Dit in tegenstelling tot Docker Compose, waarmee je alleen meerdere containers op één Docker-engine kunt draaien.
Dit schaalbare kenmerk van Docker Swarm zorgt ervoor dat apps consistent beschikbaar zijn zonder latentie. Het is zelfs een van de redenen waarom je dat wilt kies Docker boven andere virtualisatietools.
En wat meer? In tegenstelling tot enkele Docker-containers, waarbij een container stopt wanneer deze faalt, verdeelt Docker Swarm automatisch taken opnieuw over de beschikbare worker-knooppunten wanneer er een faalt.
Docker Swarm houdt ook een back-up van elke staat bij. U kunt dus altijd nieuwe zwermconfiguraties terugzetten naar de staat van een vorige. Stel dat het managerknooppunt op een eerdere zwerm faalt; u kunt een nieuw cluster starten met meer managerknooppunten en deze terugzetten om de configuratie van de vorige aan te passen.
Het is ook belangrijk om te vermelden dat de interactie tussen het managerknooppunt en de werkknooppunten veilig is.
Docker heeft veel alternatieven, en een van de dichtstbijzijnde is Kubernetes. Docker Swarm is echter gemakkelijk te gebruiken en meer geautomatiseerd. Hoewel je bijvoorbeeld in sommige andere orkestratietools zoals Kubernetes misschien de belasting handmatig moet verdelen, beschikt Docker Swarm over automatische taakverdeling, wat het leven van DevOps gemakkelijk maakt.
De Docker Swarm-architectuur
De Docker Swarm-architectuur draait om services, knooppunten en taken. Elk heeft echter een rol te spelen bij het succesvol uitvoeren van de stapel.
Diensten
De Docker Swarm-service beschrijft de configuratie van de Docker-image die alle containers in een zwerm uitvoert. Het bevat informatie over de taken in een cluster. Een service kan bijvoorbeeld een Gedockte SQL-serverconfiguratie.
Wanneer u een service uitvoert, dwingt deze het managerknooppunt om te synchroniseren met zijn configuraties. Het managerknooppunt voert vervolgens de rest van de werkknooppunten uit op basis van de opgegeven instellingen in de service.
Services in Docker Swarm kunnen globaal of gerepliceerd zijn.
Het verschil tussen beide is dat terwijl globale services slechts één taak definiëren voor alle knooppunten in een cluster, gerepliceerde services het aantal taken per knooppunt specificeren.
Knooppunten
Een node in Docker Swarm is een instantie van de volledige Docker-runtime, ook wel bekend als de Docker-engine. Zwermknooppunten kunnen fysieke of virtuele machines zijn. Zie dit als een netwerk van computers met vergelijkbare processen (containers).
Meestal strekken knooppunten zich echter uit over verschillende computers en servers waarop de Docker-engine wordt uitgevoerd in real-life toepassingen. En zoals eerder vermeld, kan een knooppunt een manager- of werkknooppunt zijn, afhankelijk van de rol.
Het managerknooppunt luistert naar de zwermhartslag en bestuurt de werkknooppunten, die taken uitvoeren die aan hen zijn toegewezen door het managerknooppunt. Zoals eerder vermeld, kunt u meer dan één managerknooppunt in een zwerm hebben. Maar probeer in het ideale geval het aantal te beperken tot minder dan zeven, omdat het toevoegen van te veel managerknooppunten de zwermprestaties kan verminderen.
Taken
Een taak definieert het werk dat is toegewezen aan elk knooppunt in een Docker Swarm. Op de achtergrond begint de taakplanning in Docker Swarm wanneer een orkestrator taken maakt en deze doorgeeft aan een planner, die voor elke taak een container maakt.
Het managerknooppunt gebruikt vervolgens de planner om taken toe te wijzen en opnieuw toe te wijzen aan knooppunten zoals vereist en gespecificeerd in de Docker-service.
Dockerzwerm vs. Docker Compose: wat zijn de verschillen?
Mensen gebruiken Docker Compose en Docker Swarm vaak door elkaar. Hoewel beide betrekking hebben op het uitvoeren van meerdere containers, zijn ze verschillend.
Terwijl Docker Compose je meerdere containers op één host laat draaien, verdeelt Docker Swarm ze over meerdere Docker-engines in een cluster.
U gebruikt Docker Compose wanneer u afzonderlijke containers voor elke service in uw app moet opstarten. Dus wanneer een component crasht, heeft dit geen invloed op de andere. Wanneer de hostmachine echter uitvalt, crasht ook de hele app.
Docker Swarm helpt u echter om veel containers op geclusterde knooppunten uit te voeren. Elk onderdeel van uw app bevindt zich dus op verschillende knooppunten. En wanneer een knooppunt dat een app-onderdeel afhandelt crasht, wijst de zwerm zijn taak toe aan een ander knooppunt binnen het cluster en worden de lopende taken opnieuw gepland, waardoor downtime wordt voorkomen.
Dus hoewel je misschien downtime hebt op Docker Compose, zorgt Docker Swarm ervoor dat je app blijft draaien met behulp van back-upservers (werkknooppunten). Docker 1.13 ondersteunt echter Docker Compose-implementatie naar Swarm-modus met behulp van de docker-stack implementeren opdracht.
Docker Swarm helpt u bij het implementeren van complexe apps
Containerisatie heeft virtuele machines overtroffen op het gebied van continue integratie en continue levering (CI/CD) softwareontwerp. Daarom is het een pluspunt om de kern van het Docker Swarm-mechanisme te begrijpen als je een onschatbare DevOps-expert wilt worden.
U weet waarschijnlijk hoe u een Docker-container kunt draaien of zelfs een Docker Compose kunt uitvoeren voor meerdere containers in één host. Maar Docker Swarm is handiger voor het implementeren van apps met een complexe architectuur. Het verdeelt processen in eenheden, verbetert runtime-toegang en vermindert of elimineert zelfs de kans op downtime.