Eenvoudige container orchestration
Bij SUE houden we van containers, en voor onze klanten beheren we er dagelijks grote aantallen. Daarom begrijpen we als geen ander het belang van goede orchestration tools. Voor middelgrote tot grootschalige omgevingen raden we zonder twijfel Kubernetes aan. Op kleinere schaal kan Kubernetes echter te complex zijn. Daarom verkennen we in dit artikel een minder bekende container orchestrator: Docker Swarm.
Docker Swarm
Docker Swarm is een modus van Docker waarmee je servers die de Docker Engine draaien kunt omvormen tot een cluster. Docker Swarm is eenvoudig in gebruik (je werkt gewoon met het docker-commando) en sterk geïntegreerd met de rest van het Docker-ecosysteem. Daardoor kun je bestaande tools blijven gebruiken, zoals Docker Compose, Portainer en Traefik. Dankzij SwarmKit kun je zelfs je eigen integraties bouwen.
Een node binnen Docker Swarm kan de rol hebben van manager of worker. Manager-nodes nemen beslissingen over scheduling en beheren de status van het cluster via het Raft consensus protocol. Manager-nodes kunnen daarnaast ook containers draaien en persistente containerdata opslaan. Worker-nodes draaien uitsluitend containers en slaan containerdata op; zij kunnen alleen beslissingen nemen wanneer je ze promoveert tot manager.
Met Docker Swarm kun je verschillende deploymentstrategieën toepassen: als een individuele container op een specifieke node (zoals bij docker run), als een replicated service (waarbij je het gewenste aantal replicas opgeeft), of als een global service (waarbij de container op elke node in het cluster draait). Daarnaast kun je het docker stack-commando gebruiken, de Docker Swarm-variant van Docker Compose.
Gecontaineriseerde sea shanty
Als container orchestrator is de centrale eenheid binnen Docker Swarm de container. Containers zijn in operationele zin zelfstandige software-eenheden die je (bijna) overal kunt draaien. Juist dit zelfvoorzienende karakter maakt klassieke operationele taken, zoals updates, een stuk eenvoudiger.
Vanuit technisch perspectief worden containers niet direct door het besturingssysteem geïmplementeerd. Linux levert de bouwstenen waaruit containers zijn opgebouwd, maar het is de container engine (zoals Docker) die de container daadwerkelijk realiseert. Containers op Linux worden mogelijk gemaakt door zogeheten namespaces en cgroups. Namespaces bepalen welk deel van het totale systeem je kunt zien en waarmee je kunt interacteren, terwijl cgroups zorgen voor procesaccounting en beperkingen, zoals het limiteren van CPU- en geheugenverbruik. De namespaces die worden gebruikt zijn: Mount (filesystem), Pid (processen), Net (netwerk), IPC (message queues en shared memory) en User (gebruikers en groepen).
Omdat namespaces en cgroups slechts bouwstenen zijn, kun je zowel minimale container engines bouwen, zoals Chroot, als meer geavanceerde oplossingen zoals Containerd of Docker.
Een zwerm anekdotes
Docker Swarm is bedoeld voor situaties waarin het beheren van individuele Docker Engines te omslachtig wordt, maar het toevoegen van Kubernetes juist te veel complexiteit introduceert. Bijvoorbeeld wanneer:
-
je een duidelijk gedefinieerde workload hebt die waarschijnlijk niet veel zal veranderen;
-
je (legacy) applicatie geen grote schaalbaarheid nodig heeft;
-
je gebruikmaakt van Docker en Docker Compose;
-
je een economisch containerplatform zoekt;
-
je je Docker Engines als één geheel wilt beheren.
Een belangrijke les uit Kubernetes networking is het gebruik van één cluster-breed netwerk om alle services te publiceren. Dit vereenvoudigt de communicatie tussen services en vermindert de communicatie tussen nodes.
Traefik en Portainer, draaiend op een Swarm manager node, vormen samen een uitstekend managementplatform. Dankzij hun native ondersteuning voor Docker Swarm kunnen ze containers die binnen het cluster draaien automatisch detecteren, beheren en met elkaar verbinden.
Met bind mount volumes kun je node-specifieke persistente storage gebruiken, wat vooral handig is wanneer je werkt met niet-uniforme storage-opstellingen.
Service discovery-functionaliteit maakt het mogelijk om altijd met de juiste container te communiceren, zelfs wanneer er meerdere instanties van dezelfde container draaien.
Sluit je aan bij de swarm
Heb je advies of ondersteuning nodig bij het ontwikkelen en beheren van containerinfrastructuur? Ons team van experts helpt je graag. Van het opzetten van de juiste infrastructuur tot doorlopende support en onderhoud.