Kubernetes versus Docker Swarm: welke moet u gebruiken?

0
130

Kubernetes en Docker's Swarm-modus zijn twee containerorkestratietools die laat u replica's van werkbelastingen schalen over meerdere fysieke machines. Hoewel Kubernetes de meest populaire keuze is, heeft Docker Swarm enkele unieke voordelen die ook het overwegen waard zijn.

Hier is een blik op hoe deze twee technologieën zich verhouden in hun belangrijkste functies. Beide hebben hetzelfde einddoel – waarmee u containers kunt schalen – maar bereik het op soms heel verschillende manieren. Welke je ook kiest, je kunt containers starten en schalen die zijn gemaakt op basis van afbeeldingen die zijn gemaakt met Docker of een andere populaire containerengine.

Overzicht

Kubernetes is in eerste instantie ontwikkeld als een open source project bij Google. Het bevindt zich nu bij de Cloud Native Computing Foundation (CNCF), een sectoroverschrijdende inspanning om veelgebruikte cloud-native projecten te promoten en te onderhouden.

Om met Kubernetes aan de slag te gaan, moet u een cluster van fysieke machines maken met de naam knooppunten. Deze machines voeren uw containers uit en worden bestuurd door een gecentraliseerd primair knooppunt dat instructies voor containerplanning geeft. Werkknooppunten handelen volgens die instructies om afbeeldingen uit registers te halen en uw containers te starten.

Kubernetes is bedoeld om enterprise-grade en productieklaar te zijn. De planningsmogelijkheden omvatten auto-scaling, auto-plaatsing, load-distributie en continue monitoring voor containerbeëindigingen en herstarts.

Advertentie

Swarm-modus is de ingebouwde Orchestrator van Docker, inbegrepen als onderdeel van de standaard Docker-distributie. Elke machine waarop docker is geïnstalleerd, kan een zwermcluster maken of eraan deelnemen.

Met Swarm kun je ook meerdere onafhankelijke fysieke machines aan een cluster koppelen. Het verenigt effectief een set Docker-hosts in een enkele virtuele host. Er is een relatief oppervlakkige leercurve en gebruikers die bekend zijn met Docker met één host, kunnen de Swarm-modus over het algemeen snel onder de knie krijgen.

Net als Kubernetes is een enkele Swarm Manager-node verantwoordelijk voor het plannen en bewaken van containers. De manager kan reageren op incidenten in het cluster, zoals een knooppunt dat offline gaat, en containers dienovereenkomstig opnieuw plannen. Het ondersteunt ook rollende updates, zodat u workloads kunt schalen zonder de beschikbaarheid te beïnvloeden.

Nieuwe workloads toevoegen

Kubernetestoepassingen worden geïmplementeerd door een declaratieve weergave van de bronnen van uw stack te maken in een YAML-bestand. De YAML is "toegepast" naar uw cluster, meestal met behulp van een CLI zoals kubectl, waarop vervolgens wordt gereageerd door het Kubernetes-besturingsvlak dat op het primaire knooppunt wordt uitgevoerd.

Aanvullende tools via projecten zoals Helm laten u “installeren” toepassingen met behulp van vooraf geconfigureerde “grafieken.” Dit zijn verzamelingen YAML-bestanden die zijn verpakt om eenvoudig aan uw cluster toe te voegen.

Kubernetes biedt tientallen resourcetypen die clusterfuncties abstraheren, zoals netwerk-, opslag- en containerimplementaties. Het leren van de verschillende soorten bronnen en hun rollen vormt een vrij steile leercurve voor een nieuwkomer. U wordt aangemoedigd om naar de algehele architectuur van uw systeem te kijken, niet alleen naar de moeren en bouten van afzonderlijke containers.

Advertentie

Docker Swarmmaakt ook gebruik van YAML-bestanden, maar eenvoudige implementaties kunnen ook zonder deze worden gemaakt. De Swarm CLI biedt dwingende opdrachten als alternatief, zodat u een drietal NGINX-containers kunt starten door het volgende uit te voeren:

docker-service create –replicas 3 –name nginx nginx:latest

Wanneer YAML-bestanden worden gebruikt, is de indeling nog steeds veel beknopter dan Kubernetes-bronnen. Swarm-stackdefinities lijken erg op Docker Compose-bestanden; Swarm kan de meeste Compose-bestanden ongewijzigd implementeren, waardoor u uw bestaande Dockerized-workloads eenvoudig kunt omzetten in geschaalde bewerkingen in een Swarm-cluster met meerdere knooppunten.

Kubernetes werkt met abstracties die ver boven uw werkelijke containers liggen . U moet termen als Replica Set, Deployment en Pod begrijpen en begrijpen hoe deze zich verhouden tot de containers die u gebruikt. Het definiëren van Swarm-services zal daarentegen vertrouwd aanvoelen voor iedereen die Docker en Docker Compose al gebruikt.

Scaling Containers

Kubernetes en Docker Swarm zijn beide gebouwd met schaalbaarheid als hun hoofddoel. Op een basisniveau kunt u uw containers repliceren over meerdere geïsoleerde werkknooppunten, waardoor u beter bestand bent tegen hardwarestoringen en u nieuwe containerinstanties kunt toevoegen om aan de vraag te voldoen.

Kubernetesbiedt sterke garanties rond replicatie, consistentie en distributie. Het kan uw services automatisch schalen op basis van externe factoren, zodat uw workloads ook in tijden van piekvraag toegankelijk blijven. Deze automatisering kan een beslissende factor zijn voor drukke operationele teams.

Docker Swarm vereist dat het schalen handmatig wordt uitgevoerd, hetzij door het Compose-bestand van uw stack bij te werken of door een CLI te gebruiken opdracht om het aantal replica's te wijzigen. Het is eenvoudig maar effectief: wijzigingen worden veel sneller doorgevoerd dan Kubernetes, omdat Swarm een ​​minder gecompliceerd systeem is. Dit betekent dat dit de betere keuze kan zijn als u extreem snel wilt reageren.

Advertentie

Beide orkestrators zijn ook effectief in het handhaven van hoge beschikbaarheid. Kubernetes en Docker Swarm zullen elk containers opnieuw plannen als er een faalt of een werkknooppunt offline gaat. Dit gedrag handhaaft automatisch uw opgegeven aantal replica's, ervan uitgaande dat er voldoende bronnen beschikbaar zijn op uw andere knooppunten.

Netwerken en taakverdeling

Kubernetesstelt workloads bloot via “services” die fungeren als in-cluster load balancers. Verkeer bereikt de service meestal via een Ingress, een bron waarmee u inkomende verzoeken kunt filteren op basis van eigenschappen zoals hun hostnaam en URL.

Zoals gebruikelijk bij Kubernetes betekent dit dat er verschillende stappen en abstracties moeten worden geleerd. Uw container-pods moeten verwijzen naar een service, waarnaar zelf wordt verwezen door een Ingress die uw routeringsregels definieert. Het voordeel is dat dit allemaal in Kubernetes is ingebouwd; de enige vereiste is een externe load balancer die naar het primaire IP-adres van uw cluster wijst. Beheerde Kubernetes-cloudproviders bieden meestal een methode met één klik om zo'n load balancer te maken.

Netwerken gedraagt ​​zich anders in Docker Swarm. Op dezelfde manier als gewone Docker-containers, kun je gemakkelijk poorten publiceren naar een inkomend netwerk dat toegankelijk is voor alle hosts in de zwerm. Dit bevat een routeringsnet dat ervoor zorgt dat inkomende verzoeken een instantie van uw container op een van de beschikbare knooppunten bereiken. Swarm biedt ook een netwerkmodus per host waarbij poorten alleen worden geopend op de individuele hosts waarop containers worden uitgevoerd.

Wat Swarm mist, is een ingebouwde manier om verkeer naar containers te routeren op basis van verzoekkenmerken zoals de hostnaam en URL. Om dit te bereiken, voegt u meestal een reverse proxy toe, zoals NGINX, Traefik of HAProxy die fungeert als het toegangspunt voor uw zwerm, overeenkomt met inkomende verzoeken en deze doorstuurt naar de juiste container. Door een extra infrastructuurcomponent toe te voegen om services achter verschillende domeinnamen zichtbaar te maken, kan Swarm minder geschikt zijn voor meerdere productieworkloads.

Observability

Kubernetes en Docker Swarmbeide hebben ingebouwde logboek- en bewakingstools waarmee u containerlogboeken en resourceverbruik kunt inspecteren. In het geval van Kubernetes kunt u uw cluster observeren met behulp van populaire CLI-tools zoals kubectl, of overschakelen naar een webgebaseerde interface zoals het officiële dashboard. Swarm stelt logboeken bloot via zijn CLI op dezelfde manier als gewone Docker-containerlogboeken – gebruik docker-servicelogboeken om vanaf een service te streamen.

Advertentie

Waar Kubernetes’ waarneembaarheidsondersteuning gaat verder dan Swarm's is in de integratie met tools van derden. Door een monitoringsysteem zoals Prometheus toe te voegen, kunt u metrische gegevens en waarschuwingen opvragen, visualiseren en opslaan, terwijl aggregators zoals Fluentd vergelijkbare mogelijkheden bieden voor logboeken. Deze helpen u een goed waarneembare cluster te ontwikkelen die u gemakkelijk van buitenaf kunt inspecteren.

Deze tools kunnen nog steeds worden gebruikt met Docker Swarm, maar u moet uw eigen procedures instellen om gegevens van uw zwerm naar uw aggregatieplatforms te verplaatsen. Kubernetes biedt een meer naadloze ervaring waarbij de tools binnen uw cluster worden uitgevoerd en deze van binnenuit inspecteren.

Conclusie

Kubernetes en Docker Swarm zijn twee container orchestrators die u kunt gebruiken om uw services te schalen. Welke u moet gebruiken, hangt af van de grootte en complexiteit van uw service, uw doelstellingen rond replicatie en eventuele speciale vereisten die u heeft voor netwerken en observeerbaarheid.

Kubernetes is een systeem van productiekwaliteit dat automatische schaling, netwerktoegang en eenvoudige observatie-integraties omvat in de standaardinstallatie. Die installatie kan lastiger zijn, omdat je je eigen cluster moet onderhouden of er een moet maken bij een openbare cloudprovider. Zelfbeheer van het besturingsvlak kan behoorlijk ingewikkeld zijn, waarbij Kubernetes-administratie nu algemeen wordt gezien als een functie op zich.

Deployment naar Kubernetes vereist een begrip van de onderliggende concepten, hoe ze de basisprincipes van containers abstraheren, en het resourcetype dat u in elk scenario moet gebruiken. Dit zorgt voor een relatief steile leercurve; Kubernetes staat bekend om zijn complexiteit en het veroorzaken van verwarring bij nieuwkomers, wat de moeite waard is om in gedachten te houden als u geen toegewijd operationeel team heeft.

Docker Swarm is veel eenvoudiger om aan de slag te gaan. Als je Docker hebt geïnstalleerd, heb je al alles wat je nodig hebt. Swarm kan uw containers horizontaal distribueren, ze opnieuw plannen in een failover-situatie en ze on-demand schalen.

Advertentie

Het dagelijkse gebruik lijkt sterk op de gevestigde Docker-workflows. De kern CLI-commando's doen denken aan reguliere Docker-containerbewerkingen en er is compatibiliteit met uw bestaande Docker Compose-bestanden. Dit maakt Swarm ideaal voor snel gebruik in interne omgevingen en ontwikkelaarssandboxen die al zwaar Dockerized zijn.

Je hoeft niet alles in één platform te stoppen: veel teams gebruiken zowel Swarm als Kubernetes voor verschillende systemen , waardoor de voordelen van beide kunnen worden gerealiseerd. Swarm is eenvoudiger, gemakkelijker te onderhouden, vertrouwder voor ontwikkelaars en sneller om uw services te schalen. Kubernetes stelt meer eisen en is gebaseerd op zijn eigen abstracties, maar biedt u automatisering, een volledig geïntegreerde netwerkoplossing en toegang tot een groeiend ecosysteem van ondersteunende tools.