Kubernetes vs Docker Swarm: Was sollten Sie verwenden?

0
191

Kubernetes und der Swarm-Modus von Docker sind zwei Tools zur Container-Orchestrierung, die können Sie Workload-Replikate auf mehrere physische Maschinen skalieren. Obwohl Kubernetes die beliebtere Wahl ist, bietet Docker Swarm einige einzigartige Vorteile, die ebenfalls eine Überlegung wert sind.

Hier sehen Sie, wie sich diese beiden Technologien in ihren Schlüsselfunktionen vergleichen. Beide haben das gleiche Endziel – Sie können Container skalieren – aber manchmal auf ganz andere Weise erreichen. Unabhängig von Ihrer Wahl können Sie Container starten und skalieren, die aus Images erstellt wurden, die mit Docker oder einer anderen beliebten Container-Engine erstellt wurden.

Übersicht

Kubernetes wurde zunächst als Open-Source-Projekt bei Google entwickelt. Es befindet sich jetzt bei der Cloud Native Computing Foundation (CNCF), einer branchenübergreifenden Initiative zur Förderung und Pflege weit verbreiteter Cloud-nativer Projekte.

Um Kubernetes einzurichten, müssen Sie einen Cluster physischer Maschinen namens . erstellen Knoten. Diese Maschinen führen Ihre Container aus und werden von einem zentralen Primärknoten gesteuert, der Anweisungen zur Containerplanung ausgibt. Worker-Knoten folgen diesen Anweisungen, um Bilder aus Registrierungen abzurufen und Ihre Container zu starten.

Kubernetes soll Enterprise-Klasse und produktionsbereit sein. Die Planungsfunktionen umfassen automatische Skalierung, automatische Platzierung, Lastverteilung und kontinuierliche Überwachung von Containerbeendigungen und -neustarts.

Werbung

Der Schwarmmodus ist der integrierte Orchestrator von Docker, enthalten als Teil der Standard-Docker-Distribution. Jeder Computer mit installiertem Docker kann einen Schwarmcluster erstellen oder einem beitreten.

Mit Swarm können Sie auch mehrere unabhängige physische Maschinen zu einem Cluster verbinden. Es vereint effektiv eine Reihe von Docker-Hosts zu einem einzigen virtuellen Host. Es gibt eine relativ flache Lernkurve und Benutzer, die mit Single-Host-Docker vertraut sind, können sich im Allgemeinen schnell mit dem Swarm-Modus vertraut machen.

Wie Kubernetes ist ein einzelner Swarm-Manager-Knoten für die Planung und Überwachung von Containern verantwortlich. Der Manager kann auf Vorfälle im Cluster reagieren, z. B. wenn ein Knoten offline geht, und Container entsprechend neu planen. Es unterstützt auch fortlaufende Updates, sodass Sie Workloads skalieren können, ohne die Verfügbarkeit zu beeinträchtigen.

Hinzufügen neuer Workloads

KubernetesAnwendungen werden bereitgestellt, indem eine deklarative Darstellung der Ressourcen Ihres Stapels in einer YAML-Datei erstellt wird. Die YAML-Datei wird “angewandt” zu Ihrem Cluster, in der Regel über eine CLI wie kubectl, auf die dann die auf dem primären Knoten ausgeführte Kubernetes-Steuerungsebene reagiert.

Zusätzliche Tools über Projekte wie Helm ermöglichen die “Installation” Anwendungen mit vorkonfigurierten “Diagrammen” Dies sind Sammlungen von YAML-Dateien, die gepackt wurden, um Ihrem Cluster leicht hinzugefügt werden zu können.

Kubernetes bietet Dutzende von Ressourcentypen, die Clusterfunktionen wie Netzwerk-, Speicher- und Containerbereitstellungen abstrahieren. Das Erlernen der verschiedenen Ressourcentypen und ihrer Rollen stellt für einen Neuling eine ziemlich steile Lernkurve dar. Wir empfehlen Ihnen, sich die Gesamtarchitektur Ihres Systems anzusehen, nicht nur die Schrauben und Muttern einzelner Container.

Werbung

Docker Swarmverwendet auch YAML-Dateien, aber einfache Bereitstellungen können ohne sie erstellt werden. Die Swarm-CLI bietet als Alternative zwingende Befehle, sodass Sie ein Trio von NGINX-Containern starten können, indem Sie Folgendes ausführen:

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

Wenn YAML-Dateien verwendet werden, ist das Format immer noch viel prägnanter als bei Kubernetes-Ressourcen. Swarm-Stack-Definitionen sind Docker Compose-Dateien sehr ähnlich; Swarm kann die meisten Compose-Dateien unverändert bereitstellen, sodass Sie Ihre vorhandenen Dockerized-Workloads problemlos in einen skalierten Betrieb in einem Swarm-Cluster mit mehreren Knoten überführen können.

Kubernetes arbeitet mit Abstraktionen, die weit über Ihren eigentlichen Containern liegen . Sie müssen Begriffe wie Replikatsatz, Bereitstellung und Pod verstehen und wissen, wie sie sich auf die von Ihnen ausgeführten Container beziehen. Im Gegensatz dazu wird das Definieren von Swarm-Diensten jedem vertraut vorkommen, der Docker und Docker Compose bereits verwendet hat.

Skalieren von Containern

Kubernetes und Docker Swarm sind beide mit Skalierbarkeit als Hauptziel konzipiert. Grundsätzlich können Sie Ihre Container über mehrere isolierte Worker-Knoten replizieren, wodurch Ihre Widerstandsfähigkeit gegenüber Hardwareausfällen verbessert und neue Container-Instanzen hinzugefügt werden können, um den Bedarf zu decken.

Kubernetesbietet starke Garantien für Replikation, Konsistenz und Verteilung. Es kann Ihre Services basierend auf externen Faktoren automatisch skalieren, sodass Ihre Workloads auch in Zeiten hoher Nachfrage zugänglich bleiben. Diese Automatisierung kann für vielbeschäftigte Betriebsteams ein entscheidender Faktor sein.

Docker Swarm erfordert eine manuelle Skalierung, entweder durch Aktualisieren der Compose-Datei Ihres Stacks oder mithilfe einer CLI Befehl zum Ändern der Replikatanzahl. Es ist einfach, aber effektiv: Änderungen gelten viel schneller als bei Kubernetes, da Swarm ein weniger kompliziertes System ist. Dies bedeutet, dass es die bessere Wahl sein kann, wenn Sie eine extreme Reaktionsfähigkeit benötigen.

Werbung

Beide Orchestratoren sind auch effektiv bei der Aufrechterhaltung einer hohen Verfügbarkeit. Kubernetes und Docker Swarm planen jeweils Container neu, wenn einer ausfällt oder ein Worker-Knoten offline geht. Dieses Verhalten behält automatisch Ihre angegebene Replikatanzahl bei, vorausgesetzt, dass genügend Ressourcen auf Ihren anderen Knoten verfügbar sind.

Netzwerk und Load Balancing

Kubernetesmacht Arbeitslasten über “Dienste” die als Cluster-Load-Balancer fungieren. Der Verkehr erreicht den Dienst normalerweise über einen Ingress, eine Ressource, mit der Sie eingehende Anfragen anhand von Eigenschaften wie Hostname und URL filtern können.

Das bedeutet, wie bei Kubernetes üblich, mehrere Schritte und Abstraktionen zu lernen. Ihre Container-Pods müssen auf einen Dienst verweisen, der selbst von einem Ingress referenziert wird, der Ihre Routingregeln definiert. Der Vorteil ist, dass all dies in Kubernetes integriert ist; Die einzige Voraussetzung ist ein externer Load Balancer, der auf die primäre IP-Adresse Ihres Clusters verweist. Managed Kubernetes-Cloud-Anbieter bieten normalerweise eine Ein-Klick-Methode zum Erstellen eines solchen Load Balancers.

Netzwerk verhält sich in Docker Swarm anders. Ähnlich wie bei normalen Docker-Containern können Sie ganz einfach Ports in einem Ingress-Netzwerk veröffentlichen, auf das alle Hosts im Schwarm zugreifen können. Dies beinhaltet ein Routing-Mesh, das sicherstellt, dass eingehende Anfragen eine Instanz Ihres Containers auf einem der verfügbaren Knoten erreichen. Swarm bietet auch einen Pro-Host-Netzwerkmodus, bei dem Ports nur auf den einzelnen Hosts geöffnet werden, auf denen Container ausgeführt werden.

Was Swarm fehlt, ist eine integrierte Möglichkeit, Datenverkehr basierend auf Anforderungsmerkmalen wie Hostname und URL an Container weiterzuleiten. Um dies zu erreichen, fügen Sie normalerweise einen Reverse-Proxy wie NGINX, Traefik oder HAProxy hinzu, der als Einstiegspunkt für Ihren Schwarm fungiert, eingehende Anfragen abgleicht und an den entsprechenden Container weiterleitet. Das Hinzufügen einer zusätzlichen Infrastrukturkomponente, um Dienste hinter verschiedenen Domänennamen bereitzustellen, kann Swarm für mehrere Produktionsworkloads weniger geeignet machen.

Beobachtbarkeit

Kubernetes und Dockerschwarmbeide verfügen über integrierte Protokollierungs- und Überwachungstools, mit denen Sie Containerprotokolle und den Ressourcenverbrauch überprüfen können. Im Fall von Kubernetes können Sie Ihren Cluster mit beliebten CLI-Tools wie kubectl beobachten oder zu einer webbasierten Oberfläche wie dem offiziellen Dashboard wechseln. Swarm macht Logs über seine CLI ähnlich wie normale Docker-Container-Logs – Verwenden Sie Docker-Dienstprotokolle, um von einem Dienst zu streamen.

Werbung

Wo Kubernetes’ Die Observability-Unterstützung geht über die von Swarm hinaus, indem sie mit Tools von Drittanbietern integriert wird. Durch Hinzufügen eines Überwachungssystems wie Prometheus können Sie Metriken und Warnungen abfragen, visualisieren und speichern, während Aggregatoren wie Fluentd ähnliche Funktionen für Protokolle bieten. Diese helfen Ihnen, einen gut beobachtbaren Cluster zu entwickeln, den Sie leicht von außen inspizieren können.

Diese Tools können weiterhin mit Docker Swarm verwendet werden, Sie müssen jedoch Ihre eigenen Verfahren einrichten, um Daten aus Ihrem Schwarm in Ihre Aggregationsplattformen zu verschieben. Kubernetes bietet eine nahtlosere Erfahrung, bei der die Tools innerhalb Ihres Clusters ausgeführt werden und ihn von innen überprüfen.

Schlussfolgerung

Kubernetes und Docker Swarm sind zwei Container-Orchestratoren, mit denen Sie Ihre Dienste skalieren können. Welche Sie verwenden sollten, hängt von der Größe und Komplexität Ihres Dienstes, Ihren Zielen im Zusammenhang mit der Replikation und Ihren speziellen Anforderungen an Netzwerk und Beobachtbarkeit ab.

Kubernetes ist ein produktionstaugliches System, das in seiner Standardinstallation Auto-Skalierung, Netzwerk-Ingress und einfache Observability-Integrationen umfasst. Diese Installation kann schwieriger zu erreichen sein, da Sie Ihren eigenen Cluster verwalten oder einen bei einem öffentlichen Cloud-Anbieter erstellen müssen. Die Selbstverwaltung der Steuerungsebene kann ziemlich aufwendig sein, da die Kubernetes-Administration heute allgemein als eigenständige Berufsbezeichnung angesehen wird.

Die Bereitstellung auf Kubernetes erfordert ein Verständnis der zugrunde liegenden Konzepte, wie sie Container-Grundlagen abstrahieren, und den Ressourcentyp, den Sie in jedem Szenario verwenden sollten. Dies führt zu einer relativ steilen Lernkurve; Kubernetes hat den Ruf, komplex zu sein und Neulinge zu verwirrenDocker Swarm ist viel einfacher zum Laufen zu bringen. Wenn Sie Docker installiert haben, haben Sie bereits alles, was Sie brauchen. Swarm kann Ihre Container horizontal verteilen, in einer Failover-Situation neu planen und bei Bedarf skalieren.

Werbung

Die tägliche Nutzung ist den etablierten Docker-Workflows sehr ähnlich. Die zentralen CLI-Befehle erinnern an normale Docker-Container-Operationen und sind mit Ihren vorhandenen Docker Compose-Dateien kompatibel. Dies macht Swarm ideal für den schnellen Einsatz in internen Umgebungen und Entwickler-Sandboxen, die bereits stark Dockerisiert sind.

Sie müssen nicht alles auf eine Plattform packen: Viele Teams verwenden sowohl Swarm als auch Kubernetes für unterschiedliche Systeme , so dass die Vorteile beider genutzt werden können. Swarm ist einfacher, einfacher zu warten, den Entwicklern vertrauter und Ihre Dienste können schneller skaliert werden. Kubernetes ist anspruchsvoller zu betreiben und basiert auf seinen eigenen Abstraktionen, bietet Ihnen jedoch Automatisierung, eine vollständig integrierte Netzwerklösung und Zugriff auf ein wachsendes Ökosystem unterstützender Tools.