Getty Images/iStockphoto
So lässt sich Kubernetes auch ohne Docker nutzen
Obwohl Docker und Kubernetes oft zusammen verwendet werden, erfüllen beide unterschiedliche Aufgaben. Docker-Container sind nicht die einzige Option für Kubernetes-Bereitstellungen.
Das Aufkommen von Containern eröffnete spannende Möglichkeiten für die Softwareentwicklung und den Betrieb von Workloads in modernen Unternehmen. Die rasant wachsende Popularität von Containern wirft jedoch Probleme für die Container-Verwaltung auf, die Engines wie Docker nicht bewältigen können.
Plattformen wie Kubernetes lösen diese komplexen Herausforderungen der Containerverwaltung durch Automatisierung und Orchestrierung. Kubernetes ist eine kostenlose, effektive Plattform, die zahlreiche Container-Laufzeiten, einschließlich Docker Engine, unterstützt.
Da sowohl Docker als auch Kubernetes schon früh im Container-Zeitalter aufkamen, sind die beiden seit Jahren eng miteinander verwoben, so dass sie manchmal synonym verwendet werden. Doch obwohl sich Docker und Kubernetes ergänzen, handelt es sich um verschiedene Arten von Tools, die in IT-Umgebungen unterschiedliche Zwecke erfüllen.
Container und Container-Engines verstehen
Ein Container ist eine spezielle Art von virtueller Maschine (VM). Wie jede VM verpackt und verwaltet ein Container Software und abstrahiert sie von der zugrundeliegenden Datenverarbeitungsumgebung aus Servern, Speicher und Netzwerken. Dank dieser Abstraktion können Container und VMs problemlos zwischen verschiedenen Computerumgebungen ausgetauscht werden.
Im Gegensatz zu VMs, die ein Betriebssystem enthalten, umfassen Container nur den Code und die Abhängigkeiten, die für die Ausführung der Arbeitslast des Containers erforderlich sind, zum Beispiel Laufzeiten, System-Tools, Systembibliotheken und entsprechende Einstellungen. Das Ergebnis ist ein flexibles, ressourceneffizientes Paket, das unabhängig von der Datenverarbeitungsumgebung mit wenigen oder gar keinen 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 innerhalb des Containers ausgeführt wird, und die Container-Engine kümmert sich um die Mechanismen des Ladens und Ausführens des Containers selbst.
Ein Container wird als Container-Image erstellt und gespeichert. Der Aufruf eines Containers lädt die Image-Datei in die Container-Engine und verwandelt das Image effektiv in einen laufenden Container. Durch diese Paketierung und Abstraktion wird sichergestellt, dass ein Container auf fast jeder Infrastruktur auf die gleiche Weise läuft.
Eine Container-Engine ist eine Software-Plattform 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 die gleiche Schicht wie der Hypervisor in einer VM einnehmen.
Die Rolle von Docker in der Container-Landschaft
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üsselfunktionalitäten:
- Aufrechterhaltung der Isolierung und Abstraktion zwischen Containern und der zugrunde liegenden Hardware.
- Laden und Ausführen von Containern.
- Handhabung der Container-Sicherheit.
- Unterstützung von Containerverwaltungsaufgaben, wie beispielsweise grundlegende Orchestrierung.
Das Herzstück einer jeden Container-Engine, einschließlich Docker, ist die Container-Laufzeit. Eine Container-Laufzeitumgebung übernimmt die Arbeit des Ladens und Ausführens von Containern sowie die Implementierung von Namespaces und cgroups oder logischen Betriebssystemkonstrukten für Container.
Es gibt zahlreiche Container-Laufzeiten, darunter containerd, CRI-O, runC und Mirantis Container Runtime. Einige Laufzeiten enthalten Funktionen auf höherer Ebene, wie das Entpacken und Verwalten von Containern und die gemeinsame Nutzung von Images. Einige bieten auch ein API, über die Entwickler Software erstellen können, die direkt mit der Laufzeitumgebung interagiert.
Orchestrierung und Verwaltung von Containern mit Kubernetes
Container erfreuen sich aufgrund ihrer Benutzerfreundlichkeit und ihres relativ geringen Rechenaufwands großer Beliebtheit. Unternehmensserver können Dutzende oder sogar Tausende von Containern beherbergen, die Anwendungen und Dienste für das Unternehmen zusammenstellen.
Die hohe Anzahl und der kurze Lebenszyklus vieler Container stellen jedoch eine ernsthafte Herausforderung für IT-Administratoren dar, die große, dynamische Containerflotten manuell bereitstellen und verwalten müssen. Die Orchestrierung der Containerbereitstellung und die Verwaltung in Echtzeit erfordern hochgradig automatisierte Tools.
Dies ist die Aufgabe der Kubernetes-Plattform, die manchmal als K8s abgekürzt wird. Kubernetes wurde ursprünglich von Google entwickelt und ist ein Open-Source-Automatisierungs- und Orchestrierungs-Tool, das die Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen übernimmt. Mit Kubernetes können IT-Administratoren die meisten Aufgaben, die für Container-basierte Architekturen erforderlich sind, organisieren, planen und automatisieren.
Kubernetes ist sicherlich nicht die einzige verfügbare Plattform zur Automatisierung und Orchestrierung von Containern. Docker hat zum Beispiel sein eigenes Tool namens Docker Swarm. Cloud-Anbieter bieten auch verwaltete Kubernetes-Dienste an, wie Azure Kubernetes Service und Amazon Elastic Kubernetes Service. Weitere Alternativen von Drittanbietern sind SUSE Rancher und HashiCorp Nomad.
Die umfangreichen Funktionen von Kubernetes, das Fehlen eines Preisschilds, die breite Unterstützung von Container-Laufzeiten und die Erweiterbarkeit haben seine Position als führende Automatisierungs- und Orchestrierungsplattform gefestigt. Zu den wichtigsten Funktionen von Kubernetes gehören die folgenden
- Container-Bereitstellung. Aufstellen und Konfigurieren von Containern.
- Automatisches Packen von Containern. Optimierung der Containerplatzierung basierend auf den Ressourcenanforderungen.
- Container-Aktualisierungen. Ersetzen eines vorhandenen Containers durch eine neuere Version oder Rollback.
- Service Discovery. Auffinden von Containern in der IT-Infrastruktur eines Unternehmens.
- Storage-Bereitstellung. Verbinden von Containern mit Speicherressourcen.
- Load Balancing. Sicherstellen, dass der Netzwerkverkehr auf identische Container aufgeteilt wird.
- Zustandsüberwachung. Überprüfen, ob die Container richtig reagieren und funktionieren.
Von allen Funktionen von Kubernetes sind die Unterstützung von Containern und die Erweiterbarkeit die leistungsfähigsten. Dank dieser Eigenschaften kann Kubernetes mit einer Vielzahl von Container-Laufzeiten interagieren, darunter containerd, CRI-O und jede andere Implementierung des Kubernetes Container Runtime Interface (CRI).
Darüber hinaus bietet Kubernetes ein API, die ein ganzes Ökosystem von Open-Source-Tools für Kubernetes hervorgebracht hat. Dazu gehören das Istio Service Mesh und die Knative Serverless Computing-Plattform.
Was ist der Unterschied zwischen Docker und Kubernetes?
Obwohl Docker und Kubernetes miteinander verwandt sind, handelt es sich bei beiden um unterschiedliche Infrastruktur-Tools, die in IT-Umgebungen separat eingesetzt und verwaltet werden. Bei Docker handelt es sich um 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 Software-Tool, das die Beziehungen zwischen den Containern organisiert und verwaltet.
Ist für Kubernetes Docker erforderlich?
Zu Beginn der Entwicklung von Kubernetes war Docker die bei weitem dominierende Container-Engine, und die Unterstützung für ihre Container-Laufzeit wurde in Form einer Kubernetes-Komponente namens dockershim fest in Kubernetes einkodiert. Ein shim ist eine Softwaremodifikation, die den Datenfluss abfängt und verändert, um zusätzliche Merkmale oder Funktionen bereitzustellen.
Die dockershim-Komponente ermöglichte es Kubernetes, mit Docker zu interagieren, als ob Docker eine CRI-kompatible Laufzeitumgebung verwenden würde. Im Laufe der Entwicklung von Kubernetes wurden weitere Container-Laufzeiten hinzugefügt, und die CRI wurde erfunden, damit jede Container-Laufzeit auf standardisierte Weise mit Kubernetes interagieren konnte. Schließlich wurden die Abhängigkeiten von dockershim zu einem Legacy-Problem, das die weitere Entwicklung von Kubernetes behinderte.
Mit der Veröffentlichung von Kubernetes 1.24 Anfang 2022 beschloss die Cloud Native Computing Foundation (CNCF), die jetzt für die Entwicklung von Kubernetes verantwortlich ist, die Komponente dockershim abzuschaffen. Mit der Abschaffung von dockershim beabsichtigten die Kubernetes-Entwickler, den Code des Projekts zu straffen und zu vereinfachen, indem sie Legacy-Unterstützung zu Gunsten einer standardisierten Laufzeit abschafften.
Wird Kubernetes die Unterstützung von Docker einstellen?
Obwohl das Kubernetes-Projekt dockershim abgeschafft hat, funktionieren Docker-Container weiterhin mit Kubernetes, und mit dem Befehl docker build 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 -UIs, die von dockershim abhängig waren, funktionieren möglicherweise nicht mehr. Ebenso sind Container, die mit der Container-Laufzeitumgebung geplant werden, nicht mehr für Docker sichtbar, und das Sammeln von Informationen mit den Befehlen docker ps oder docker inspect wird nicht funktionieren.
Da Container nicht mehr aufgelistet werden, können Administratoren keine Protokolle mehr abrufen, Container stoppen oder etwas innerhalb eines Containers mit docker exec ausführen. Und obwohl Administratoren weiterhin Images mit docker build abrufen oder erstellen können, sind diese Images für die Container-Laufzeit und Kubernetes nicht sichtbar.
Abwägen, ob Kubernetes ohne Docker verwendet werden soll
Angesichts dieser Probleme haben Docker-Benutzer zwei Hauptoptionen.
Die erste besteht darin, Docker wie bisher weiter zu verwenden. Vorhandene Container werden funktionieren: Sowohl Mirantis als auch Docker haben sich verpflichtet, dockershim auch nach seiner Abschaffung durch Kubernetes weiterzuführen, so dass die Benutzer in absehbarer Zeit Zugang zu einer geeigneten dockershim-Komponente haben werden.
Die zweite Möglichkeit ist die Migration zu einer anderen Container-Engine, die eine CRI-konforme Container-Laufzeitumgebung verwendet, wie containerd oder CRI-O. Eine Vielzahl von Container-Projekten und -Tools verwenden beide Laufzeiten, und die von Cloud-Anbietern unterstützten Container-Engines und Kubernetes-Versionen sind alle CRI-konform. Ein Unternehmen, das eine Containerinfrastruktur und eine vom Anbieter unterstützte Kubernetes-Version in der Cloud betreibt, sollte von der Abschaffung von dockershim nicht direkt betroffen sein.
Alternativen zu Docker und Kubernetes
Heute gewinnen andere Container-Engines sowie Automatisierungs- und Orchestrierungs-Tools in containerisierten Umgebungen an Bedeutung. Das Angebot reicht von einfachen Low-Level-Laufzeiten bis hin zu voll funktionsfähigen, Cloud-nativen Plattformen:
- Apache Mesos
- Containerd
- CoreOS rkt
- HashiCorp Vagrant
- Hyper-V-Containers
- LXC Linux Containers.
- OpenVZ.
- RunC.
- VirtualBox.
In ähnlicher Weise können IT-Verantwortliche aus einer wachsenden Liste von Automatisierungs- und Orchestrierungsplattformen wä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 und Drittanbieter-Optionen:
- Amazon Elastic Kubernetes Service
- AWS Fargate
- Azure Container Instances
- Azure Kubernetes Service
- Docker Swarm
- Google Cloud Run
- Google Kubernetes Engine
- HashiCorp Nomad
- Linode Kubernetes Engine
- Mirantis Kubernetes Engine
- Rancher
- Red Hat OpenShift Container Plattform
- Volcano
Die Entscheidung für eine Container-Engine oder eine Automatisierungs- und Orchestrierungsplattform hängt von Faktoren wie Kosten, Komplexität, Leistung, Stabilität, Funktionsumfang, Sicherheit und Interoperabilität ab. Wie bei jeder Entscheidung für eine kritische Infrastruktur sollten Sie Kombinationen von Tools testen und bewerten, um sicherzustellen, dass sie die technischen und geschäftlichen Anforderungen erfüllen.