Docker und Kubernetes: Gemeinsamkeiten und Unterschiede

Technologie

Technologie

Datum 07.06.2021
Lesezeit 6 Min.

Docker und Kubernetes: Gemeinsamkeiten und Unterschiede

Mit Kubernetes existiert ein mächtiges Werkzeug zur Verwaltung von sogenannten Cloud-Containern. Diese Container basieren häufig auf Docker, einer Open-Source-Lösung, die sich über die Jahre hinweg im Bereich Cloud Computing als Quasi-Standard etabliert hat. Wie Kubernetes und Docker technisch zusammenhängen, wozu Cloud-Container dienen und was es mit dem Ende des Docker-Supports bei Kubernetes auf sich hat, erfahren Sie hier.

Wer Cloud-Anwendungen betreibt und Anwendungen schnell und einfach skalieren will, kommt um das Thema Container und deren „Orchestrierung” (also der Koordination von deren Zusammenspiel in der Cloud) kaum herum. Zum Thema Containerverwaltung mit Kubernetes haben wir erst kürzlich berichtet – hier geht es darum, welche Rolle Docker (und andere Container-Architekturen) im Zusammenhang mit Kubernetes spielen. Außerdem erfahren Sie, wie aus einer herkömmlichen Server-Anwendung über Microservices eine verteilte Cloud-Lösung mit Containern wird.

 

Docker versus Kubernetes: Das steckt hinter den Technologien

Eines vorweg: Bei Docker und Kubernetes handelt es sich keineswegs um konkurrierende Technologien. Im Gegenteil ist der Einsatz von Docker als Container-Werkzeug mit erheblichen Stärken beim UX Design sehr sinnvoll. Außerdem ist Docker anderen Container-Werkzeugen wie Rocket, LXD und Flockport in vielen Punkten überlegen. 

Für die Orchestrierung solcher Container im Cloud-Umfeld jedoch brauchen Sie ein Verwaltungs-Tool wie beispielsweise Kubernetes. Mit Orchestrierung ist hierbei gemeint, dass mehrere Container sinnvoll verwaltet, gestartet und gestoppt und auf verschiedenen Serverumgebungen (Nodes) betrieben werden (können). 

Dementsprechend geht es also nicht um ein Entweder-Oder zwischen Docker und Kubernetes, sondern eher um das Zusammenspiel beider Technologien. Wer Cloud-Anwendungen entwickelt und/oder betreibt, kommt irgendwann beinahe zwangsläufig mit Docker (oder dessen Alternativen) in Berührung. Das beliebte Open-Source-System erzeugt portable, eigenständige Container, die Sie anschließend in der Cloud, aber auch lokal ausführen können. Wollen Sie das Ganze dann konsequent in die Cloud verlagern, können Sie Ihre Docker-Container zwar auch mit Docker Swarm orchestrieren – allerdings ist Kubernetes hier in vielen Bereichen im Vorteil und wird auch von großen Organisationen wie IBM, Microsoft und Google genutzt.

Kubernetes konzentriert sich in seinen Stärken somit auf die Orchestrierung ganzer Cluster, während das Docker-System eher für die Verwendung auf einzelnen Knoten konzipiert ist.  Nachstehende Abbildung verdeutlicht den Zusammenhang zwischen Kubernetes und Docker:

Ausklappbare Informationsgrafik

Mit Kubernetes gelingt die effiziente Verwaltung von Docker-Containern.

 

Die Verwendung von Kubernetes bietet dabei gleich mehrere Vorteile:

  • Sämtliche Container lassen sich von einer einzigen Steuerzentrale aus administrieren.
  • Themen wie Netzwerkkoordination, Lastausgleich, Sicherheitsaspekte und Skalierung sind besondere Stärken von Kubernetes.
  • Containerressourcen lassen sich bei Bedarf durch sogenannte Namespaces verwalten; es gibt die Möglichkeit besonderer Zugriffsberechtigungen (beispielsweise für Staging-Umgebungen sinnvoll).
  • Kubernetes-Anwendungen sind hochverfügbar, da der Ausfall einzelner Knoten automatisch kompensiert werden kann.
  • Die Skalierung gelingt besonders einfach, indem selbst über mehrere Cloud-Anbieter hinweg weitere Container hinzugefügt werden können.

 

Die gelegentliche Behauptung, dass Kubernetes und Docker konkurrierende Systeme seien, rührt wohl daher, dass Docker Swarm und Kubernetes beides Container-Orchestrierungssysteme sind. Allerdings handelt es sich bei Docker Swarm um eine Entwicklung von Docker, Inc., die nicht automatisch Teil des Open-Source-Systems Docker ist.

Wann Docker, wann Kubernetes? Cloud-Migration leicht gemacht

Gemeinsamkeiten von Docker und Kubernetes

Auch wenn Kubernetes und Docker unterschiedliche Aufgaben erfüllen, so gibt es doch einige Gemeinsamkeiten:

  • Beide sind im Microservice-Architektur-Umfeld heimisch (dort also, wo es um schnelle, häufige und dabei zuverlässige Änderungen im Cloud-Umfeld geht).
  • Sowohl Docker als auch Kubernetes sind in Go programmiert und kommen mit vergleichsweise „leichtgewichtigem” Binärcode aus.
  • Bei beiden Umgebungen kommt als Auszeichnungssprache YAML zum Einsatz, was die Serialisierung von Daten vereinfacht. Außerdem ist das XML-ähnliche YAML leicht verständlich und zu „programmieren”.

Die Entscheidung, ob nun Docker, Kubernetes oder gleich beide Systeme zum Einsatz kommen sollten, hängt wie so oft vom konkreten Fall ab. Wie bereits im Beitrag zu Kubernetes erwähnt, geht es im Umfeld beider Systeme um die konsequente Abkehr von monolithischen Anwendungen. Eine typisches monolithisches System vereint sämtliche seiner Funktionen im zugehörigen Quellcode an einer bestimmten Stelle und läuft typischerweise auf einem bestimmten (virtuellen oder physischen) Server. 

Das ist jedoch vor dem Hintergrund von Ausfallsicherheit, Skalierungsanforderungen und aus praktischen Überlegungen heraus zumindest bei Web-Anwendungen nicht mehr zeitgemäß. Daher werden viele Anwendungen inzwischen nicht nur in der Cloud betrieben, sondern sind sogar als „cloud native” anzusehen. Das bedeutet, dass sie in der Cloud sowohl betrieben, als auch verwaltet und weiterentwickelt werden und entsprechende Cloud-Vorteile und -Anwendungen konsequent zum Einsatz kommen. Damit das funktioniert, müssen die einzelnen Bestandteile einer Anwendung jedoch als separate Module (sogenannte Microservices) vorliegen.

Der erste Schritt hin zu solchen Microservices führt über die Aufteilung des Programmcodes in einzelne, wiederverwendbare Programmbestandteile, die untereinander aufrufbar sind.

Diese Programmbestandteile wiederum lassen sich dann mit Hilfe von Docker in einzelne Anwendungs-Container „verpacken” und „in der Cloud” betreiben.

Wenn die Anwendung jedoch als „echtes” verteiltes System mit entsprechenden Absicherungen gegen Ausfälle oder mit global an jedem Ort vergleichbarer Performance laufen soll, ist es empfehlenswert, zusätzlich Kubernetes zur Orchestrierung einzusetzen.

 




Video: YouTube / IBM Cloud

 

Die Docker-Laufzeitumgebung wird in Kubernetes bald nicht mehr unterstützt

Ende 2021 wird laut Kubernetes-Blog die Unterstützung von Docker eingestellt. Bereits jetzt erscheint in Kubernetes diesbezüglich eine Warnung – ab v1.22 ist dann vermutlich endgültig Schluss. Ziel ist es offenbar, Entwickler zum Umstieg auf das Kubernetes-eigene Container-Laufzeitsystem CRI-O beziehungsweise containerd zu bewegen und somit Fehlerquellen zu verringern. Allerdings funktionieren Docker-Container bislang auch weiterhin in allen verfügbaren Laufzeitumgebungen, die mit Kubernetes administriert werden. Sofern Sie also vor allem mit Kubernetes arbeiten und ohnehin vor allem auf dessen Werkzeuge setzen, ändert sich für Sie im Grunde nicht viel. Mit Docker lassen sich dann auch weiterhin Container zusammenstellen und in einem Kubernetes-Cluster betreiben.

Eine Ausnahme gibt es allerdings, wenn Sie Kubernetes nicht direkt, sondern als sogenannten Managed Service über Drittanbieter einsetzen (beispielsweise GKE oder EKS). Hier sollten Sie sicherstellen, dass die Container-Laufzeitumgebung Ihrer erzeugten Kubernetes-Nodes weiterhin unterstützt wird, bevor der Docker-Support endgültig eingestellt wird. Das ist insbesondere dann wichtig, wenn Sie dort eigene Anpassungen vorgenommen haben. Im Zweifel sollten Sie hierzu den Support Ihres Kubernetes-Partners kontaktieren.

 

Docker in Kubernetes: als Container-Werkzeug ja, als Laufzeitumgebung nein

Mit der endgültigen Abschaltung der Docker-Unterstützung (wohl geplant ab Version 1.22 und für Ende 2021), sollten Sie jedoch spätestens auf andere kompatible Container-Laufzeitumgebungen wie containerd oder CRI-O umstellen. Dabei sollten Sie unbedingt darauf achten, dass auch Ihre Logging-Mechanismen wie gewohnt weiter funktionieren.

Ein Punkt, der immer wieder für Verwirrung sorgt, ist die Tatsache, dass es einen wichtigen Unterschied zwischen der Docker-Laufzeitumgebung innerhalb von Kubernetes und der Docker-Containerverwaltung selbst gibt. Letztere – und somit die beliebten Docker-Funktionen – werden Sie nach aktuellem Stand (Juni 2021) auch weiterhin verwenden können. Denn immerhin erzeugt Docker keine Container-Images im eigenen Format, sondern verwendet OCI (Open Container Initiative). Dieses „offene” Format ist mit Kubernetes kompatibel und bleibt auch weiterhin nutzbar. 

Sowohl containerd als auch CRI-O als Kubernetes-unterstützte Systeme können solche Container verarbeiten. Somit dürfte sich im Grunde an Ihrer Arbeit mit Containern und Kubernetes auch nach Abschaltung der Unterstützung für die Docker-Laufzeitumgebung nicht viel ändern. Alles was Sie tun müssen ist, Ihre Kubernetes-Umgebung auf eines der beiden genannten, alternativen Werkzeuge umzustellen und die Docker-Laufzeitumgebung aus Kubernetes zu entfernen.

Übrigens: Mit Vodafone Total Cloud Managed Hosting erhalten Sie maßgeschneiderte Infrastrukturen basierend auf Ihren persönlichen Computing-, Storage- und Netzwerk-Anforderungen – zertifiziert nach ISO 27001.

 

Wie stehen Sie zum Thema Docker und Kubernetes? Welche Bedeutung haben Microservices für Sie über die Zeit bekommen? Wir freuen uns auf Ihren Kommentar.

 


Kontakt aufnehmen

Sie haben Fragen zu unseren Produkten und Angeboten?
Dann rufen Sie unter 0800 5054515 an.

 

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Facebook Twitter WhatsApp LinkedIn Xing E-Mail