Kubernetes und Docker im Vergleich
Der Hauptunterschied zwischen Kubernetes und Docker bestehen darin, wie sie in die Containerisierung eingebunden werden.
Josh Campbell
Senior Product Manager
Redaktioneller Beitrag: Chandler Harris
Docker ist eine Containerisierungs-Plattform und Container-Laufzeit, während Kubernetes als Plattform zum Ausführen und Verwalten von Containern aus vielen Container-Laufzeiten dient. Kubernetes unterstützt zahlreiche Container-Laufzeiten, darunter auch Docker.
Als Docker im Jahr 2013 eingeführt wurde, läutete die Lösung die Neuzeit der Container ein und brachte ein Computing-Modell mit sich, das auf Microservices basierte. Da Container von ihrem eigenen Betriebssystem unabhängig sind, erleichtern sie die Entwicklung von lose gekoppelten und skalierbaren Microservices. Sie ermöglichen es Teams, eine Anwendung, ihre Abhängigkeiten und Konfiguration deklarativ als Container-Image zu bündeln.
Als jedoch Anwendungen immer komplexer und die Verteilung von Containern auf mehrere Server erschwert wurde, warf das verschiedene Fragen auf: Wie sollten mehrere Container koordiniert und geplant werden? Wie wird die Kommunikation zwischen Containern ermöglicht? Oder wie werden Container-Instanzen skaliert? Um diese neuen Herausforderungen zu meistern, wurde Kubernetes eingeführt.
Wenn von Container-Technologie die Rede ist, tauchen häufig die Begriffe Docker und Kubernetes auf. Wahrscheinlich fragst du dich jetzt, welche Lösung besser ist. Oft geht es aber gar nicht darum, sich für eine zu entscheiden, sondern darum, wie du sie beide zu deinem Vorteil nutzen kannst.
Teste Compass kostenlos
Als Unterstützung beim Entwickeln, zum Katalogisieren von Diensten und zum Optimieren des Softwarezustands.
Was ist Docker?
Docker ist eine kommerzielle Containerisierungs-Plattform und Container-Laufzeit, mit deren Hilfe Entwickler Container erstellen, bereitstellen und ausführen können. Sie nutzt eine Client-Server-Architektur mit einfachen Befehlen und Automatisierung über eine einzelne API.
Docker bietet zudem ein Toolkit, das üblicherweise zum Verpacken von Anwendungen in unveränderliche Container-Images verwendet wird. Hierzu wird ein Dockerfile geschrieben und dann werden die entsprechenden Befehle ausgeführt, um das Image mithilfe des Docker-Servers zu erstellen. Entwickler können Container auch ohne Docker erstellen, aber die Docker-Plattform macht diese Aufgabe einfacher. Diese Container-Images können dann auf jeder Plattform bereitgestellt und ausgeführt werden, die Container wie Kubernetes, Docker Swarm, Mesos oder HashiCorp Nomad unterstützt.
Docker bietet zwar eine effiziente Methode, um containerisierte Anwendungen zu verpacken und zu verteilen, doch mit Docker allein wird die Ausführung und Verwaltung von Containern im größeren Maßstab eine Herausforderung. Die Koordinierung und Planung von Containern über mehrere Server oder Cluster hinweg, die Aktualisierung oder Bereitstellung von Anwendungen ohne Ausfallzeiten und die Überwachung des Container-Zustands sind nur einige Punkte, die es zu berücksichtigen gibt.
Um diese und andere Probleme zu beheben, wurden Lösungen zur Orchestrierung von Containern entwickelt, wie Kubernetes, Docker Swarm, Mesos oder HashiCorp Nomad. Diese unterstützen Unternehmen nicht nur dabei, eine Vielzahl an Containern und Benutzern zu verwalten sowie Lasten effizient auszugleichen. Sie bieten auch Authentifizierungs- und Sicherheitsoptionen und die Bereitstellung auf mehreren Plattformen.
Zugehöriges Material
Microservices und monolithische Architektur im Vergleich
Lösung anzeigen
Verbesserte Entwicklung mit Compass
Was ist Kubernetes?
Kubernetes (wird manchmal auch als K8s bezeichnet) ist eine beliebte Open-Source-Plattform, die Container-Laufzeitsysteme über ein Cluster aus Netzwerkressourcen hinweg orchestriert. Kubernetes kann mit oder ohne Docker verwendet werden.
Kubernetes wurde ursprünglich vom Unternehmen Google entwickelt, das eine neue Methode für die skalierbare Ausführung von mehreren Milliarden Containern pro Woche benötigte. Es wurde im Jahr 2014 von Google als Open-Source-System veröffentlicht und gilt inzwischen als Marktführer und Branchenstandard bei Orchestrierungstools für die Bereitstellung von Containern und verteilten Anwendungen. Wie Google anmerkt, wurde "Kubernetes vor allem deshalb konzipiert, um die Bereitstellung und Verwaltung komplexer verteilter Systeme zu vereinfachen und gleichzeitig von der verbesserten Auslastung zu profitieren, die Container ermöglichen".
Kubernetes fasst eine Reihe Container in einer Gruppe zusammen, die es auf demselben Computer verwaltet, um den Netzwerk-Overhead zu reduzieren und die Effizienz der Ressourcennutzung zu erhöhen. Eine solche Gruppe könnte beispielsweise aus einem App-Server, einem Redis-Cache und einer SQL-Datenbank bestehen. Docker-Container stellen einen Prozess pro Container dar.
Kubernetes ist besonders nützlich für DevOps-Teams, weil die Lösung Serviceerkennung, Load Balancing innerhalb des Clusters, automatisierte Rollouts und Rollbacks, Selbstreparatur von ausfallenden Containern und Konfigurationsmanagement bietet. Außerdem ist Kubernetes ein wichtiges Tool für den Aufbau robuster CI/CD-Pipelines in DevOps.
Kubernetes ist jedoch keine vollständige PaaS-Lösung (Platform as a Service), weshalb bei der Erstellung und Verwaltung von Kubernetes-Clustern mehrere Punkte zu beachten sind. Die komplexe Verwaltung von Kubernetes ist einer der Hauptgründe, weshalb viele Kunden sich für verwaltete Kubernetes-Services von Cloud-Anbietern entscheiden.
Vorteile von Kubernetes
Kubernetes, das häufig als "Linux der Cloud" bezeichnet wird, ist nicht umsonst die beliebteste Container-Orchestrierungsplattform. Hier sind einige der Gründe:
Automatisierte Abläufe
Kubernetes verfügt über eine leistungsstarke API und ein Befehlszeilenprogramm namens kubectl, das dir die Schwerstarbeit beim Container-Management abnimmt, weil es die Automatisierung von Abläufen ermöglicht. Das Controller-Muster in Kubernetes stellt sicher, dass Anwendungen/Container genau wie vorgegeben ausgeführt werden.
Abstraktion der Infrastruktur
Kubernetes verwaltet die Ressourcen, die ihr in deinem Namen zur Verfügung gestellt werden. So müssen sich Entwickler nicht weiter um die zugrunde liegende Rechen-, Netzwerk- oder Speicherinfrastruktur kümmern, sondern können sich auf das Schreiben von Anwendungscode konzentrieren.
Überwachung des Servicezustands
Kubernetes überwacht die gegenwärtige Laufumgebung und vergleicht sie mit dem Sollzustand. Die Lösung führt automatisierte Zustandsprüfungen an Services durch und startet Container neu, die ausgefallen sind oder angehalten wurden. Kubernetes macht Services nur verfügbar, wenn sie ausgeführt werden und einsatzbereit sind.
Kubernetes und Docker im Vergleich
Docker ist eine Container-Laufzeit, Kubernetes hingegen ist eine Plattform zum Ausführen und Verwalten von Containern aus vielen Container-Laufzeiten. Kubernetes unterstützt zahlreiche Container-Laufzeiten, darunter Docker, containerd, CRI-O und jede Implementierung der Kubernetes-CRI (Container Runtime Interface). Man kann sich Kubernetes ganz gut als ein Betriebssystem und Docker-Container als Apps vorstellen, die auf dem Betriebssystem installiert werden.
Auch für sich allein ist Docker sehr vorteilhaft für die moderne Anwendungsentwicklung. Die Software löst das klassische Problem, dass eine Lösung auf dem eigenen Rechner funktioniert, anderswo aber nicht. Das Container-Orchestrierungstool Docker Swarm ist in der Lage, die Bereitstellung eines Produktions-Workloads mit wenigen Containern abzuwickeln. Wenn ein System wächst und viele miteinander vernetzte Container hinzugefügt werden müssen, kann Docker diese Aufgaben nicht mehr allein stemmen. Hier kann Kubernetes aber Abhilfe schaffen.
Beim Vergleich der beiden Lösungen sollte Kubernetes am besten Docker Swarm gegenübergestellt werden. Docker Swarm, oder Docker-Schwarmmodus, ist ein Container-Orchestrierungstool wie Kubernetes. Das bedeutet, dass es die Verwaltung mehrerer Container ermöglicht, die auf verschiedenen Hosts bereitgestellt werden, auf denen der Docker-Server ausgeführt wird. Der Schwarmmodus ist standardmäßig deaktiviert und muss von einem DevOps-Team eingerichtet und konfiguriert werden.
Kubernetes orchestriert Computercluster so, dass sie zusammenarbeiten, und plant die Ausführung von Containern auf diesen Computern basierend auf deren verfügbaren Ressourcen. Container werden durch deklarative Definition in sogenannte Pods – die kleinste Einheit von Kubernetes – gruppiert. Kubernetes verwaltet Aufgaben wie die Serviceerkennung, das Load Balancing, die Ressourcenzuweisung, die Isolierung und die vertikale oder horizontale Skalierung deiner Pods automatisch. Die Lösung wurde von der Open-Source-Community angenommen und ist jetzt Teil der Cloud Native Computing Foundation. Amazon, Microsoft und Google bieten alle verwaltete Kubernetes-Services auf ihren Cloud-Computing-Plattformen an. Das reduziert den betrieblichen Aufwand für die Ausführung und Wartung von Kubernetes-Clustern und deren containerisierten Workloads erheblich.
Docker oder Kubernetes: Welche Lösung ist die richtige für dich?
Docker Swarm und Kubernetes sind beides Container-Orchestrierungsplattformen. Welche solltest du also auswählen?
Docker Swarm erfordert normalerweise weniger Einrichtungs- und Konfigurationsaufwand als Kubernetes, wenn du deine eigene Infrastruktur aufbauen und betreiben willst. Die Lösung bietet dieselben Vorteile wie Kubernetes, beispielsweise Bereitstellung von Anwendungen über deklarative YAML-Dateien, automatische Skalierung von Services entsprechend dem gewünschten Zustand, Load Balancing über mehrere Container im Cluster hinweg sowie Sicherheit und Zugriffskontrolle für alle deine Services. Wenn du nur wenig Workloads ausführst, kein Problem damit hast, deine eigene Infrastruktur zu verwalten oder wenn du keine bestimmten Kubernetes-Funktionen benötigst, ist Docker Swarm wahrscheinlich die richtige Lösung für dich.
Die Einrichtung von Kubernetes gestaltet sich am Anfang etwas komplexer, die Lösung bietet aber mehr Flexibilität und einen größeren Funktionsumfang. Außerdem kannst du dafür von einer aktiven Open-Source-Community umfangreiche Unterstützung erhalten. Kubernetes unterstützt umgehend mehrere Bereitstellungsstrategien, verwaltet deinen Netzwerkeingang und gibt dir sofort die Möglichkeit, deine Container zu beobachten. Alle großen Cloud-Anbieter bieten verwaltete Kubernetes-Services an, die den Einstieg und die Nutzung von Cloud-nativen Funktionen wie der automatischen Skalierung deutlich erleichtern. Wenn du viele Workloads ausführst, Cloud-native Interoperabilität brauchst und es in deinem Unternehmen viele Teams gibt, was eine stärkere Isolierung der Services erfordert, solltest du eher Kubernetes als Plattform in Erwägung ziehen.
Compass und Container-Orchestrierung
Egal, für welche Container-Orchestrierungslösung du dich auch entscheidest – du solltest immer ein Tool verwenden, das die komplexe Verwaltung deiner verteilten Architektur handhaben kann, wenn du skalierst. Atlassian Compass ist eine erweiterbare Entwicklerplattform, die unzusammenhängende Daten zur Engineering-Leistung und zur Teamzusammenarbeit an einem zentralen, durchsuchbaren Ort zusammenführt. Compass hilft dir nicht nur dabei, mit dem Komponentenkatalog die ungebremste Verbreitung von Microservices einzudämmen. Die Lösung kann dich auch dabei unterstützen, Best Practices zu erstellen und den Zustand deiner Software mit Scorecards zu messen. Sie gibt dir mithilfe von Erweiterungen, die in die Atlassian Forge-Plattform integriert sind, Daten und Einblicke in die gesamte DevOps-Toolkette an die Hand.
Diesen Artikel teilen
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.