banner
Nachrichtenzentrum
Sofortige Lieferung

Kann man Kubernetes ohne Docker nutzen?

Jun 25, 2023

Getty Images/iStockphoto

Das Aufkommen von Containern eröffnete spannende Möglichkeiten für die Softwareentwicklung und den Workload-Betrieb im gesamten modernen Unternehmen. Doch der dramatische Anstieg der Beliebtheit von Containern stellt die Containerverwaltung vor Probleme, die Engines wie Docker nicht bewältigen können.

Plattformen wie Kubernetes bewältigen diese komplexen Herausforderungen bei der Containerverwaltung durch Automatisierung und Orchestrierung. Kubernetes ist eine kostenlose, effektive Plattform, die zahlreiche Containerlaufzeiten unterstützt, einschließlich Docker Engine.

Da sowohl Docker als auch Kubernetes schon früh im Container-Zeitalter auftauchten, sind die beiden seit Jahren eng miteinander verflochten, sodass sie manchmal synonym verwendet werden. Doch obwohl Docker und Kubernetes sich ergänzen, handelt es sich um unterschiedliche Arten von Tools, die in IT-Umgebungen unterschiedlichen Zwecken dienen.

Ein Container ist ein spezieller VM-Typ. Wie jede VM verpackt und verwaltet ein Container Software und abstrahiert sie von der zugrunde liegenden Computerumgebung aus Servern, Speicher und Netzwerken. Diese Abstraktion erleichtert Containern und VMs den Wechsel zwischen Computerumgebungen.

Im Gegensatz zu VMs, die ein Betriebssystem enthalten, enthalten Container nur den Code und die Abhängigkeiten, die zum Ausführen der Arbeitslast des Containers erforderlich sind, wie z. B. Laufzeiten, Systemtools, Systembibliotheken und entsprechende Einstellungen. Das Ergebnis ist ein agiles, ressourceneffizientes Paket, das unabhängig von der Computerumgebung mit wenigen – wenn überhaupt – Anforderungen ausgeführt werden kann.

Die beiden Komponenten, die nicht in einem Container verpackt sind, sind das Betriebssystem und die Container-Engine. Das Betriebssystem unterstützt den Code, der im Container ausgeführt wird, und die Container-Engine übernimmt die Mechanismen zum Laden und Ausführen des Containers selbst.

Ein Container wird erstellt und als Container-Image gespeichert. Durch den Aufruf eines Containers wird die Bilddatei in die Container-Engine geladen, wodurch das Bild effektiv in einen laufenden Container umgewandelt wird. Diese Verpackung und Abstraktion stellt sicher, dass ein Container auf fast jeder Infrastruktur auf die gleiche Weise läuft.

Eine Container-Engine ist eine Softwareplattform oder -schicht, die zum Laden, Ausführen und Verwalten von Containern erforderlich ist. Container-Engines werden oft als Hypervisor oder Betriebssystem für Container bezeichnet, da sie dieselbe Ebene wie der Hypervisor in einer VM belegen.

Docker ist eine von mehreren beliebten Container-Engines. Sobald Docker oder eine andere Container-Engine auf einem Computer verfügbar ist, kann das System Container auf der Ebene der Container-Engine laden und ausführen.

Docker bietet die folgenden Schlüsselfunktionen:

Das Herzstück jeder Container-Engine, einschließlich Docker, ist die Container-Laufzeit. Eine Container-Laufzeitumgebung übernimmt die schwere Arbeit des Ladens und Ausführens von Containern sowie die Implementierung von Namespaces und Kontrollgruppen oder logischen Betriebssystemkonstrukten für Container.

Es stehen zahlreiche Container-Laufzeiten zur Verfügung, darunter Containerd, CRI-O, runC und Mirantis Container Runtime. Einige Laufzeiten umfassen übergeordnete Funktionen wie Container-Entpacken, -Verwaltung und Bildfreigabe. Einige stellen auch eine API bereit, mit der Entwickler Software erstellen können, die direkt mit der Laufzeit interagiert.

Container erfreuen sich aufgrund ihrer Benutzerfreundlichkeit und ihres relativ geringen Rechenbedarfs enormer Beliebtheit. Unternehmensserver können Dutzende oder sogar Tausende von Containern hosten, die Anwendungen und Dienste für das Unternehmen zusammenstellen.

Doch die hohe Anzahl und der kurze Lebenszyklus vieler Container stellen eine große Herausforderung für IT-Administratoren dar, die große, dynamische Containerflotten manuell bereitstellen und verwalten müssen. Für die Orchestrierung der Containerbereitstellung und die Durchführung der Verwaltung in Echtzeit sind hochautomatisierte Tools erforderlich.

Dies ist die Rolle der Kubernetes-Plattform, manchmal auch als K8s abgekürzt. Kubernetes wurde ursprünglich von Google entwickelt und ist ein Open-Source-Automatisierungs- und Orchestrierungstool, das die Bereitstellung, Skalierung und Verwaltung von Containeranwendungen übernimmt. Mit Kubernetes können IT-Administratoren die meisten Aufgaben organisieren, planen und automatisieren, die für Container-basierte Architekturen erforderlich sind.

Kubernetes ist sicherlich nicht die einzige verfügbare Container-Automatisierungs- und Orchestrierungsplattform. Docker verfügt beispielsweise über ein eigenes Tool namens Docker Swarm. Cloud-Anbieter bieten auch verwaltete Kubernetes-Dienste an, beispielsweise Azure Kubernetes Service und Amazon Elastic Kubernetes Service. Weitere Alternativen von Drittanbietern sind SUSE Rancher und HashiCorp Nomad.

Die umfangreichen Funktionen, das fehlende Preisschild, die breite Container-Laufzeitunterstützung und die Erweiterbarkeit festigten Kubernetes seinen Platz als führende Automatisierungs- und Orchestrierungsplattform. Zu den wichtigsten Kubernetes-Funktionen gehören die folgenden:

Von allen Funktionen von Kubernetes sind die Containerunterstützung und die Erweiterbarkeit die leistungsstärksten. Diese Merkmale ermöglichen die Interaktion von Kubernetes mit einer Vielzahl von Container-Laufzeiten, einschließlich Containerd, CRI-O und jeder anderen Implementierung des Kubernetes Container Runtime Interface (CRI).

Darüber hinaus stellt Kubernetes eine API bereit, die ein ganzes Ökosystem von Open-Source-Tools für Kubernetes hervorgebracht hat. Dazu gehören das Istio Service Mesh und die Serverless-Computing-Plattform Knative.

Obwohl Docker und Kubernetes verwandt sind, handelt es sich bei beiden um unterschiedliche Infrastrukturtools, die in IT-Umgebungen separat bereitgestellt und verwaltet werden. Insbesondere ist Docker eine Container-Engine: die Softwareschicht oder Plattform, auf der virtualisierte Container geladen und ausgeführt werden. Im Gegensatz dazu ist Kubernetes eine Automatisierungs- und Orchestrierungsplattform: das Softwaretool, das die Beziehungen zwischen Containern organisiert und verwaltet.

Zu Beginn der Entwicklung von Kubernetes war Docker die mit Abstand dominierende Container-Engine, und die Unterstützung für seine Container-Laufzeit wurde in Form einer Kubernetes-Komponente namens dockershim fest in Kubernetes einprogrammiert. Unter einem Shim versteht man jede Softwaremodifikation, die den Datenfluss abfängt und verändert, um zusätzliche Features oder Funktionen bereitzustellen.

Die Dockershim-Komponente ermöglichte es Kubernetes, mit Docker zu interagieren, als ob Docker eine CRI-kompatible Laufzeit verwenden würde. Als sich Kubernetes weiterentwickelte, wurden zusätzliche Container-Laufzeiten eingeführt, und der CRI wurde erfunden, damit jede Container-Laufzeit auf standardisierte Weise mit Kubernetes zusammenarbeiten konnte. Letztendlich wurden die durch Dockershim verursachten Abhängigkeiten zu einem Altlastenproblem, das die weitere Entwicklung von Kubernetes behinderte.

Mit der Veröffentlichung von Kubernetes 1.24 Anfang 2022 hat die Cloud Native Computing Foundation – heute die Verwalter und Entwickler von Kubernetes – beschlossen, die Dockershim-Komponente abzuschaffen. Durch die Eliminierung von Dockershim wollten die Kubernetes-Entwickler den Code des Projekts rationalisieren und vereinfachen, indem sie die Legacy-Unterstützung zugunsten einer standardisierten Laufzeit entfernten.

Obwohl das Kubernetes-Projekt Dockershim nicht mehr unterstützt, funktionieren Docker-Container weiterhin mit Kubernetes und mit dem Docker-Build-Befehl erstellte Images funktionieren weiterhin mit allen CRI-Implementierungen. Allerdings wirft die Entfernung von Dockershim einige potenzielle Probleme für Docker-Benutzer auf.

Docker-Tools und Benutzeroberflächen, die von Dockershim abhängig waren, funktionieren möglicherweise nicht mehr. Ebenso sind Container, die mit der Containerlaufzeit geplant werden, für Docker nicht mehr sichtbar und das Sammeln von Informationen mit den Befehlen „docker ps“ oder „docker inspect“ funktioniert nicht.

Da Container nicht mehr aufgelistet werden, können Administratoren mit Docker Exec keine Protokolle abrufen, Container stoppen oder etwas in einem Container ausführen. Und obwohl Administratoren mit Docker Build weiterhin Images abrufen oder erstellen können, sind diese Images für die Container-Laufzeitumgebung und Kubernetes nicht sichtbar.

Angesichts dieser Probleme haben Docker-Benutzer zwei Hauptoptionen.

Die erste besteht darin, Docker weiterhin wie gewohnt zu verwenden. Vorhandene Container werden funktionieren: Mirantis und Docker haben sich beide dazu verpflichtet, Dockershim nach seiner Einstellung durch Kubernetes beizubehalten, sodass Benutzer auf absehbare Zeit Zugriff auf eine geeignete Dockershim-Komponente haben werden.

Die zweite besteht darin, zu einer anderen Container-Engine zu migrieren, die eine CRI-kompatible Container-Laufzeitumgebung verwendet, z. B. Containerd oder CRI-O. Eine große Auswahl an Containerprojekten und -tools nutzen beide Laufzeiten, und die von Cloud-Anbietern unterstützten Container-Engines und Kubernetes-Versionen sind alle CRI-konform. Ein Unternehmen, das eine Container-Infrastruktur und eine vom Anbieter unterstützte Kubernetes-Version in der Cloud betreibt, sollte nicht direkt von der Dockershim-Abwertung betroffen sein.

Heutzutage gewinnen andere Container-Engines sowie Automatisierungs- und Orchestrierungstools an Anteilen in Containerumgebungen. Das Angebot reicht von einfachen Low-Level-Laufzeiten bis hin zu voll ausgestatteten, cloudnativen Plattformen:

Ebenso können IT-Führungskräfte aus einer wachsenden Liste von Automatisierungs- und Orchestrierungsplattformen auswählen, um große Containerflotten zu organisieren und zu verwalten. Zu den Kubernetes-Alternativen, die oft auf dem Open-Source-Code von Kubernetes basieren, gehören Cloud-basierte Optionen und Optionen von Drittanbietern:

Die Wahl einer Container-Engine oder Automatisierungs- und Orchestrierungsplattform hängt von Faktoren wie Kosten, Komplexität, Leistung, Stabilität, Funktionsumfang, Sicherheit und Interoperabilität ab. Wie bei jeder Wahl einer kritischen Infrastruktur sollten Sie Kombinationen von Tools testen und bewerten, um sicherzustellen, dass sie den technischen und geschäftlichen Anforderungen entsprechen.

Brauchen Sie einen Ersatz? Probieren Sie diese 5 Docker-Alternativen aus