Kubernetes vs Docker – Was ist der Unterschied?

Hardwarevirtualisierung bietet eine Reihe von Vorteilen wie Skalierbarkeit, Sicherheit, Isolation usw. durch die Verwendung von Hypervisoren zur gemeinsamen Nutzung physischer Hardware mit virtuellen Maschinen (VMs). Derzeit sind virtuelle Maschinen nicht die einzige Form der Virtualisierung, da Container ebenfalls sehr beliebt geworden sind. Während VMs physische Hardware der zugrunde liegenden Maschinen teilen, teilen Container den Kernel des zugrunde liegenden Betriebssystems. Container sind keine leichtgewichtigen virtuellen Maschinen, sondern standardisierte ausführbare Pakete, die verwendet werden, um Anwendungen bereitzustellen, einschließlich Anwendungen, die mit der auf Microservices basierenden Softwarearchitektur entwickelt wurden, und enthalten alle zum Ausführen von Anwendungen erforderlichen Komponenten.

Der Docker-Engine ist die beliebteste Plattform für die Ausführung von Containern. Kubernetes ist ein Begriff, den Sie in zunehmendem Maße im Bereich der Containerisierung und Cloud-Computing hören können. Aber was ist besser – Docker oder Kubernetes? Es ist ein beliebtes Diskussionsthema, aber es ist technisch gesehen nicht korrekt, es so zu formulieren. Sie können zum Beispiel nicht fragen: „Was ist besser – heiß oder blau?“

Was ist Docker?

Docker ist eine Open-Source-Standalone-Anwendung, die als Engine verwendet wird, um containerisierte Anwendungen auszuführen. Es ist auf Ihrem Betriebssystem (OS) installiert, vorzugsweise auf Linux, kann aber auch auf Windows und macOS installiert werden, das wiederum auf einer physischen oder virtuellen Maschine läuft.

Eine Anwendung, die in einem Container läuft, ist vom Rest des Systems und von anderen Containern isoliert, erweckt jedoch den Eindruck, in einer eigenen Betriebssysteminstanz zu laufen. Mehrere Docker-Container können gleichzeitig auf einem einzelnen Betriebssystem ausgeführt werden. Diese Container können mit Docker verwaltet werden und Docker kann ohne Kubernetes ausgeführt werden. Wenn Sie mehrere Hosts für die Ausführung von Containern haben, kann die manuelle Verwaltung schwierig sein, und es ist im Allgemeinen besser, ein zentrales Verwaltungstool oder eine Orchestrierungslösung auszuwählen.

Docker Compose ist ein grundlegendes Container-Orchestrierungstool, das für das Ausführen von Docker-Anwendungen mit mehreren Containern verwendet wird. Sie können eine YAML (yml) Docker Compose-Konfigurationsdatei konfigurieren, um Mehrfachcontaineranwendungen zu definieren, anstatt separat Dockerfiles für jeden Container manuell zu konfigurieren. Nachdem Sie die einzelne YAML-Datei konfiguriert haben, können Sie alle benötigten Container mit einem einzigen Befehl in Ihrer Linux-Konsole ausführen. Die Verwendung von Docker Compose ist eine Möglichkeit, Ihre Docker-Container zu orchestrieren, aber es gibt eine leistungsstarke Alternative zu Docker Compose, die Kubernetes genannt wird.

Was ist Kubernetes?

Kubernetes ist eine Open-Source-Container-Orchestrierungslösung, die zur Verwaltung von containerisierter Software und Diensten mit einem hohen Automatisierungsgrad verwendet wird.

Kubernetes ist ein von Google entwickeltes Projekt, das die Bereitstellung, Skalierung und Verfügbarkeit von in Containern ausgeführten Anwendungen automatisieren soll. Sie können die Anzahl der Hosts, auf denen Container ausgeführt werden, auf bis zu 11 oder mehr Hosts erhöhen. Darüber hinaus können Sie mit Kubernetes einen Cluster von Docker-Containern erstellen, um eine hohe Verfügbarkeit und Lastverteilung sicherzustellen.

Hosts, die in einem Cluster verwendet werden, werden Knoten genannt. Die Architektur von Kubernetes ist master-slave – das Cluster besteht aus Master-Knoten und Arbeitsknoten. Die empfohlene Mindestanzahl von Knoten, die von Kubernetes benötigt wird, beträgt vier. Sie können zwar ein Cluster mit einem einzigen Computer erstellen, um alle Beispiele und Tests auszuführen, benötigen jedoch mindestens vier Knoten. Ein Kubernetes-Cluster, das Produktionsdatenverkehr verarbeitet, sollte mindestens drei Arbeitsknoten haben. Die Verwendung von zwei Master-Knoten schützt Ihr Cluster vor einem Ausfall eines Master-Knotens. Sie können mehr als zwei Master-Knoten verwenden, wenn dies erforderlich ist.

  • Master-Knoten werden verwendet, um den Zustand eines Clusters zu verwalten, einschließlich der Annahme von Clientanfragen, der Planung von Vorgängen mit Containern, des Betriebs von Steuerungszyklen usw. Auf jedem Master-Knoten muss eine Kopie der etcd Datenbank ausgeführt werden, die alle Daten des Clusters speichert. Der Master-Knoten führt eine Reihe von drei Prozessen aus: kube-apiserver, kube-controller-manager und kube-scheduler.
  • Arbeitsknoten werden verwendet, um Anwendungsworkloads durch das Ausführen von Containern auszuführen. Die beiden Kubernetes-Prozesse laufen auf dem Nicht-Master-Knoten: kubelet (zur Kommunikation mit den Master-Knoten) und kube-proxy (zur Reflektion von Kubernetes-Netzwerkservices auf jedem Knoten).
  • Replikations-Controller ist eine Komponente, die sicherstellt, dass Pod-Replikate, deren Anzahl angegeben ist, jederzeit laufen. Dadurch können Sie sicherstellen, dass Pods immer verfügbar sind, wenn Sie sie benötigen.Wenn Kubernetes verwendet wird, werden unterschiedliche CLI und APIs zum Kommunizieren von Diensten miteinander verwendet. Es gibt auch spezifische Begriffe, die zur Benennung von Objekten und Ressourcen der RESTful-API verwendet werden, die Komponenten des mit Kubernetes erstellten Clusters sind.
  • Pod ist eine grundlegende Planungseinheit in Kubernetes. Dies ist eine Gruppe von Ressourcen, in der mehrere Container arbeiten können. Container, die zu einem Pod gehören, können auf demselben Host ausgeführt werden und dieselben Ressourcen sowie dasselbe lokale Netzwerk verwenden. Container im Pod sind isoliert, können jedoch recht einfach miteinander kommunizieren. Daher werden Pods im Allgemeinen in Kubernetes verwendet, aber wenn Sie eine eigenständige Docker-Anwendung verwenden, stehen nur Container-Pools zur Verfügung.
  • Service ist eine Gruppe von Containern, die zusammenarbeiten und beispielsweise die Funktion einer Mehrschichtanwendung ermöglichen. Kubernetes unterstützt die dynamische Benennung und Lastverteilung von Pods durch Verwendung von Abstraktionen. Dieser Ansatz gewährleistet eine transparente Verbindung zwischen Diensten anhand des Namens und ermöglicht es Ihnen, ihren aktuellen Zustand nachzuverfolgen.
  • Labels sind Schlüssel/Wert-Paare, die an Pods und andere Objekte oder Dienste gebunden sind und es ermöglichen, sie einfach zu gruppieren und Aufgaben zuzuweisen.
  • Namespaces ist eine Methode, die es ermöglicht, den vereinigten Kubernetes-Cluster logisch in mehrere virtuelle Cluster zu unterteilen. Jeder virtuelle Cluster kann in einer virtuellen Umgebung existieren, die durch Quotas begrenzt ist, ohne dass andere virtuelle Cluster beeinträchtigt werden.

Kubernetes kann mit Docker verwendet werden, obwohl Docker nicht die einzige Containerplattform ist, mit der Kubernetes verwendet werden kann. Kubernetes kann auch in Verbindung mit Windows-Containern, Linux-Containern, rkt usw. arbeiten. K8s ist der Name von Kubernetes, der manchmal in technischer Dokumentation zu finden ist.

Kubernetes vs Docker: Netzwerkvergleich

Lassen Sie uns die Netzwerkoptionen für jede Lösung überprüfen.

Docker bietet drei Netzwerkmodi für die Netzwerkkommunikation zwischen Containern.

Bridge. Dieser Modus wird standardmäßig verwendet und erstellt eine virtuelle Layer-3-Bridge. Der Netzwerkname auf Ihrem Host für dieses Netzwerk ist docker0. Docker erstellt automatisch eine Layer-3-Netzwerkbrücke und konfiguriert Maskierungsregeln für die externe Netzwerkschnittstelle unter Verwendung des Prinzips der Netzwerkadressübersetzung (NAT), was es Containern ermöglicht, miteinander zu kommunizieren und sich mit externen Netzwerken zu verbinden. Sie können Portweiterleitung für die Netzwerkschnittstelle des Hostcomputers konfigurieren, wenn Sie von anderen Hosts und externen Netzwerken aus eine Verbindung zu einem Container herstellen möchten. Somit werden Sie durch eine Verbindung zum entsprechenden Port des Hostcomputers zum erforderlichen Port des Docker-Containers weitergeleitet. Bei Bedarf können Sie für einen Docker-Container mehr als eine Netzwerkschnittstelle erstellen.

Host. In diesem Modus stellt ein Host-Netzwerktreiber sicher, dass ein Container nicht vom Docker-Host isoliert ist. Der Container teilt den Netzwerkstapel des Hosts, und der Hostname des Containers ist derselbe wie der Hostname des Host-Betriebssystems. Wenn Sie einen Container ausführen, auf dem ein TCP-Port 8080 gehört wird, ist die Containeranwendung unter dem TCP-Port 8080 der IP-Adresse des Hostcomputers verfügbar. Der Host-Netzwerktreiber ist nur für Linux-Maschinen verfügbar.

None. Es sind keine IP-Adressen für die Netzwerkschnittstelle eines bestimmten Containers konfiguriert, außer der Adresse 127.0.0.1 für die lokale Schnittstelle. Es gibt keinen Zugriff auf externe Netzwerke, wenn der Netzwerkmodus None festgelegt ist.

Mehrhosten-Netzwerk für Docker-Container. Wenn Container auf verschiedenen Hosts ausgeführt werden, können sie miteinander kommunizieren, nachdem Sie das Overlay-Netzwerk konfiguriert haben. Ein gültiger Schlüssel-Wert-Speicherdienst (Consul, Etcd oder ZooKeeper) muss für die Erstellung solcher Netzwerke konfiguriert werden.

Kubernetes. Wenn Sie eigenständige Docker-Container verwenden, kann jeder Container als eine grundlegende Einheit betrachtet werden, die über das Netzwerk kommuniziert, indem er die entsprechende Netzwerkschnittstelle verwendet. Wenn Sie Kubernetes verwenden, sind Pods die grundlegenden Einheiten des Container-Clusters. Jeder Pod hat seine eigene IP-Adresse und besteht mindestens aus einem Container. Ein Pod kann aus mehreren Containern bestehen, die für verwandte Aufgaben verwendet werden. Container desselben Pods können nicht gleichzeitig denselben Port öffnen. Diese Art der Beschränkung wird verwendet, weil ein Pod, der aus mehreren Containern besteht, immer noch eine einzige IP-Adresse hat.

Darüber hinaus erstellt Kubernetes für jeden Pod einen speziellen Pause-Container. Dieser spezielle Container soll eine Netzwerkschnittstelle (für interne und externe Kommunikation) für andere Container bereitstellen und befindet sich normalerweise im Pausenmodus (im Schlafmodus). Diese Pause-Container wachen auf, wenn Kubernetes ein „SIGTERM“-Signal sendet.

Flannel wird typischerweise als Netzwerk-Gewebe verwendet, um Container in Kubernetes unter Verwendung von Prinzipien der Netzwerküberlagerung zu verbinden. Das Überlagerungsnetzwerk ermöglicht es Ihnen, Container zu betreiben, indem sie über das logische Netzwerk verschiedene physische Hosts des Clusters (die als Knoten bezeichnet werden) kommunizieren. Der Open-Source-etcd-Schlüssel/Wert-Speicher wird verwendet, um die Zuordnungen zwischen den tatsächlichen IP-Adressen, die den Containern von den Hosts zugewiesen werden, auf denen die Container ausgeführt werden, und den IP-Adressen im Überlagerungsnetzwerk zu speichern.

Die Kubernetes-Netzwerkanbindung kann durch Verwendung des NSX Container Plugins mit VMware NSX-T integriert werden. Diese Integration ermöglicht es Ihnen, eine Multi-Tenant-Netzwerk-Topologie zu verwenden, die in Kubernetes nicht „out of the box“ verfügbar ist.

Das Kubernetes-Netzwerkmodell bietet die folgenden Funktionen:

  • Alle Container können innerhalb eines Clusters ohne NAT miteinander kommunizieren.
  • Alle Clusterknoten können innerhalb eines Clusters ohne NAT mit allen Containern kommunizieren. Umgekehrt können alle Container mit allen Clusterknoten kommunizieren.
  • Container sehen ihre eigenen IP-Adressen und diese IP-Adressen werden von anderen Komponenten von Kubernetes gesehen.

Ingress ist ein API-Objekt von Kubernetes, das verwendet wird, um den Zugriff auf Dienste im Cluster von außen zu verwalten (hauptsächlich über HTTP und HTTPS). Sie können Ingress konfigurieren, um externen Zugriff auf die containerisierten Dienste für Lastenausgleich, SSL-Terminierung und namensbasiertes virtuelles Hosting durchzuführen. Ein Ingress-Controller muss auf dem Master-Knoten bereitgestellt werden, damit die Ingress-Regeln funktionieren.

Anwendungsfälle

Die Verwendung von Docker als eigenständige Software ist gut für die Entwicklung von Anwendungen, da Entwickler ihre Anwendungen in isolierten Umgebungen ausführen können. Darüber hinaus können Tester auch Docker verwenden, um Anwendungen in Sandbox-Umgebungen auszuführen. Wenn Sie Docker verwenden möchten, um eine hohe Anzahl von Containern in der Produktionsumgebung auszuführen, können Sie unterwegs auf einige Komplikationen stoßen. Zum Beispiel können einige Container leicht überlastet oder fehlerhaft sein. Sie können den Container manuell auf der entsprechenden Maschine neu starten, aber die manuelle Verwaltung kann viel Ihrer wertvollen Zeit und Energie in Anspruch nehmen.

Kubernetes ermöglicht es Ihnen, diese Probleme zu lösen, indem es wichtige Funktionen wie hohe Verfügbarkeit, Lastenausgleich, Container-Orchestrierungstools usw. bereitstellt. Daher ist Kubernetes am besten für stark belastete Produktionsumgebungen mit einer hohen Anzahl von Docker-Containern geeignet. Die Bereitstellung von Kubernetes ist schwieriger als die Installation einer eigenständigen Docker-Anwendung, weshalb Kubernetes möglicherweise nicht immer für Entwicklung und Tests verwendet wird.

Kubernetes vs Docker Swarm

Docker Swarm ist ein natives Clustering-Tool für Docker, das einen Pool von Docker-Hosts in einen einzigen virtuellen Host verwandeln kann. Docker Swarm ist vollständig in den Docker Engine integriert und ermöglicht die Verwendung von Standard-APIs und Netzwerkprozessen; es ist dazu gedacht, Docker-Container bereitzustellen, zu verwalten und zu skalieren.

Swarm ist ein Cluster von Docker-Hosts, die als Knoten bezeichnet werden. Betrachten wir die folgenden Hauptkomponenten eines Clusters, wenn Sie Docker Swarm verwenden, bevor wir den Cluster-Deployment mit Kubernetes und Docker Swarm vergleichen:

Manager-Knoten werden verwendet, um die Steuerungsorchestrierung, das Cluster-Management und die Aufgabenverteilung durchzuführen.

Worker-Knoten werden zum Ausführen von Containern verwendet, deren Aufgaben von Manager-Knoten zugewiesen werden. Jeder Knoten kann als Manager-Knoten, Worker-Knoten oder als beides konfiguriert werden, um sowohl Manager- als auch Worker-Knoten-Funktionen auszuführen. Beachten Sie, dass Worker-Knoten Schwarmdienste ausführen.

Dienste. Ein Dienst von Docker Swarm definiert den erforderlichen optimalen Zustand für jeden containerisierten Dienst. Ein Dienst steuert Parameter wie die Anzahl der Repliken, die für ihn verfügbaren Netzwerkressourcen, die Ports, die von externen Netzwerken aus zugänglich sein müssen, usw. Die Dienstkonfiguration, wie die Netzwerkkonfiguration, kann geändert und auf einen Container angewendet werden, ohne dass Sie den Dienst mit dem Container manuell neu starten müssen.

Aufgaben. Eine Aufgabe ist ein Slot, in dem ein einzelner Container läuft. Aufgaben sind die Teile eines Schwarmdienstes.

Docker Swarm und Kubernetes sind zwei verschiedene Plattformen, die für ähnliche Zwecke verwendet werden. Jetzt ist es an der Zeit, sie in einer geeigneten Reihe von Kategorien zu vergleichen.

Cluster-Bereitstellung

Docker Swarm. Eine Standard-Docker-API ermöglicht es Ihnen, einen Cluster mit Swarm über die Standard-Docker-Befehlszeilenschnittstelle (CLI) bereitzustellen, was die Bereitstellung insbesondere bei der erstmaligen Verwendung erleichtert. Die Bereitstellung von Swarm im Vergleich zu Kubernetes wird auch durch die Fähigkeit eines einzigen Docker-Masters erreicht, zu entscheiden, wie Dienste verteilt werden sollen. In Docker Swarm werden keine Pods verwendet.

Kubernetes erfordert die Verwendung spezifischer Befehle, die sich von den Standard-Docker-Befehlen unterscheiden. In Kubernetes werden spezifische APIs verwendet, was bedeutet, dass Sie möglicherweise zusätzliche Tools für die Bereitstellung von Kubernetes erlernen müssen, auch wenn Sie die Befehle für das Docker-Management kennen. Die Knoten müssen im Kubernetes-Cluster manuell definiert werden – Sie sollten den Master-Knoten auswählen, den Controller, Scheduler usw. definieren.

Skalierbarkeit

Docker Swarm. Dank der einfachen API von Docker können Container und Service-Updates in großen und kleinen Clustern schneller durchgeführt werden. Eine Befehlszeilenschnittstelle (CLI) ist ziemlich einfach und leicht verständlich. Daher kann Swarm als eine skalierbarere Lösung im Vergleich zu Kubernetes betrachtet werden.

Kubernetes bietet im Vergleich vereinheitlichte APIs und eine Vielzahl von Funktionen, die häufig zu einem langsameren Bereitstellungsprozess führen. Es gibt drei Arten von Komponenten, die konfiguriert werden müssen: Pod, Deploy und Service. Wenn es um die automatische Skalierung geht, ist Kubernetes aufgrund seiner Fähigkeit, Serverlasten zu analysieren und automatisch entsprechend den Anforderungen zu skalieren, vorzuziehen. Kubernetes ist die optimale Wahl für große verteilte Netzwerke und komplexe Systeme.

Hohe Verfügbarkeit

Die beiden Lösungsoptionen verfügen jeweils über ähnliche Dienst-Replikations- und Redundanzmechanismen, und in beiden Fällen wird das System selbstreguliert und erfordert keine manuelle Rekonfiguration, nachdem ein fehlgeschlagenes Knoten wieder in einen Cluster zurückgekehrt ist.

Docker Swarm. Manager-Knoten verwalten die Ressourcen der Worker-Knoten und des gesamten Clusters. Die Swarm-Clusterknoten tragen zur Replikation von Diensten bei.

Kubernetes. Ungesunde Knoten werden von den Lastenausgleichsdiensten von Kubernetes erkannt und aus dem Cluster eliminiert. Alle Pods werden unter den Knoten verteilt, was eine hohe Verfügbarkeit gewährleistet, falls ein Knoten, auf dem eine containerisierte Anwendung läuft, ausfällt.

Lastenausgleich

Docker Swarm. Lastenausgleich ist eine integrierte Funktion und kann automatisch durch Verwendung des internen Swarm-Netzwerks erfolgen. Alle Anforderungen an den Cluster werden verteilt und zu den Clusterknoten umgeleitet; jeder Knoten kann eine Verbindung zu einem beliebigen Container herstellen. Docker Swarm verwendet ein DNS-

Kubernetes. Richtlinien, die in Pods definiert sind, werden für die Lastverteilung in Kubernetes verwendet. In diesem Fall müssen Container-Pods als Dienste definiert werden. Die Lastverteilungseinstellungen müssen manuell konfiguriert werden, während Ingress für die Lastverteilung genutzt werden kann.

Erstellen und Ausführen von Containern

Docker Swarm. Der überwiegende Teil der Befehle, die für die Docker CLI verfügbar sind, können verwendet werden, wenn Docker Swarm verwendet wird, dank der standardisierten API von Docker Swarm. Docker Compose definiert die Arbeit mit Volumes und verwendeten Netzwerken, zusätzlich zur Definition, welche Container gruppiert werden müssen. Die genaue Anzahl der Repliken kann mit Docker Compose für Docker Swarm festgelegt werden.

Kubernetes. Kubernetes hat seine eigene API, Client und benötigt YAML-Dateien zur Konfiguration. Dies ist einer der wesentlichen Unterschiede, da Docker Compose und Docker CLI nicht verwendet werden können, um Container in diesem Fall bereitzustellen. In Kubernetes folgt das System zur Definition von Diensten einem ähnlichen Arbeitsprinzip wie bei Docker Compose, ist jedoch komplexer. Die Funktionalität von Docker Compose wird durch die Verwendung von Pods, Bereitstellungen und Diensten in Kubernetes ausgeführt, wobei jeder Layer für seinen eigenen spezifizierten Zweck verwendet wird. Pods sind für die Containerinteraktion verantwortlich, während Bereitstellungen für hohe Verfügbarkeit und Networking für einen einzelnen Knoten im Cluster zuständig sind (ähnlich wie Docker Compose für eine eigenständige Docker-Anwendung ohne Swarm), und Kubernetes-Dienste sind für die Konfiguration des Dienstbetriebs innerhalb des Clusters, die Ausfallsicherheit usw. verantwortlich.

Networking

Docker Swarm. Es gibt ein Standard-Internnetzwerk zur Kommunikation von Containern innerhalb eines Clusters, auf das bei Bedarf weitere Netzwerke hinzugefügt werden können. Netzwerke sind durch generierte TLS-Zertifikate geschützt. Die manuelle Zertifikatserstellung wird zur Verschlüsselung des Datenverkehrs zwischen Containern unterstützt.

Kubernetes. Das Netzwerkmodell von Kubernetes ist ziemlich anders und wird durch Plugins implementiert, von denen eines Flannel ist, die beliebteste Option. Pods interagieren miteinander, und diese Interaktion kann durch Richtlinien eingeschränkt werden. Es gibt ein internes Netzwerk, das vom etcd-Dienst verwaltet wird. TLS-Verschlüsselung ist ebenfalls verfügbar, muss jedoch manuell konfiguriert werden. Das Kubernetes-Netzwerkmodell geht davon aus, dass zwei CIDRs, Classless Inter-Domain Routing, konfiguriert werden, das auch als Übernetzwerken bekannt ist.

Überwachung

Docker Swarm. Es gibt keine integrierten Tools für Überwachung und Protokollierung, obwohl Sie manuell Tools von Drittanbietern einrichten können. ELK oder Reimann können zu diesem Zweck verwendet werden.

Kubernetes. Kubernetes bietet integrierte Tools für Protokollierung und Überwachung. Elasticsearch und Kibana (ELK) können verwendet werden, um den gesamten Clusterzustand zu überwachen, während Heapster, Grafana und Influx für die Überwachung von Containerdiensten unterstützt werden.

Grafische Benutzeroberfläche (GUI)

Docker Swarm. Die GUI kann mit Tools von Drittanbietern wie Portainer.io aktiviert werden, das eine benutzerfreundliche Web-Schnittstelle bietet. Alternativ können Sie die Enterprise Edition von Docker verwenden, die eine grafische Benutzeroberfläche für das Cluster-Management bereitstellt.

Kubernetes. Die GUI, die von Kubernetes bereitgestellt wird, ist ein zuverlässiges Dashboard, das über eine Web-Schnittstelle zugänglich ist, mit der Sie Ihren Cluster einfach steuern können. Die GUI kann ein äußerst wertvolles Werkzeug für Benutzer mit minimaler Erfahrung in der Verwaltung von Kubernetes mit der CLI sein.

Schlussfolgerung

Docker Swarm ist eine native Docker-Lösung, die hauptsächlich die Docker-API und CLI verwendet. Kubernetes hingegen ist Googles Projekt, das für die Bereitstellung eines Clusters verwendet wird, auf dem Container ausgeführt werden.

Sowohl Docker Swarm als auch Kubernetes bieten Funktionen für hohe Verfügbarkeit, Lastenausgleich, Overlay-Netzwerke und Skalierbarkeit. Docker Swarm ist einfacher bereitzustellen, da die Konfiguration der meisten seiner Funktionen automatisiert ist und nur wenige Hardware-Ressourcen verbraucht werden. Die Funktionalität ist jedoch durch die Docker-API begrenzt, und es fehlen native Überwachungstools.

Kubernetes ist hingegen eine modulare Lösung mit einem hohen Maß an Flexibilität, die von den meisten großen Unternehmensentitäten seit einigen Jahren unterstützt wird. Eingebaute Tools zur Überwachung von Diensten und des gesamten Clusters stehen für Kubernetes zur Verfügung, obwohl Bereitstellung und Konfiguration schwieriger sind, was diese Ressource zu einer anspruchsvolleren Lösung macht. Kubernetes ist nicht kompatibel mit Docker CLI und Docker Compose. Die Verwendung von Kubernetes wird in großen Umgebungen bevorzugt, in denen stark belastete Multi-Container-Anwendungen ausgeführt werden.

Source:
https://www.nakivo.com/blog/docker-vs-kubernetes/