Kubernetes und Docker im Vergleich

Oktober 31, 2023

Containerisierungstechnologie ist das Fundament der Entwicklung und Skalierbarkeit moderner Anwendungen. Da Unternehmen zunehmend auf containerisierte Arbeitslasten angewiesen sind, müssen sie sich mit Schlüsseltechnologien wie Docker und Kubernetes gut zurechtfinden.

Docker ist eine vielseitige Plattform, die zur Erstellung, Verwaltung und gemeinsamen Nutzung von Containern auf einem einzelnen Host dient, während Kubernetes ein Container-Orchestrierungstool ist, das die Verwaltung, Bereitstellung und Überwachung von Container-Clustern über mehrere Knoten hinweg übernimmt.

In diesem Artikel untersuchen wir, wie Containerisierungstechnologien wie Kubernetes und Docker Workloads für skalierbare, resiliente und plattformunabhängige Anwendungen verwalten. Dabei gehen wir genauer auf Container, Container-Laufzeiten und Orchestrierungs-Engines ein. Anschließend betrachten wir die Vorteile der gemeinsamen Verwendung von Kubernetes und Docker.

Eine Einführung in Container

Mit der Containerisierung können Techniker Anwendungscode mit anwendungsspezifischen Abhängigkeiten zu einem kompakten Paket namens Container gruppieren. Container virtualisieren Betriebssysteme und Rechenressourcen, wie CPU und RAM, basierend auf der erwarteten Auslastung. Aus diesem Grund basieren viele der heutigen verteilten Anwendungen auf Containern, wobei jeder Container über ein eigenes Dateisystem verfügt, sodass Abhängigkeitskonflikte durch die Nichtfreigabe von Ressourcen verhindert werden. Das unterscheidet Container von virtuellen Maschinen, bei denen es sich um digitale Repliken eines Hosts handelt, deren Betriebssystem und Ressourcen im Voraus erhalten bleiben.

Wozu dienen Container-Laufzeit und Container-Orchestrierungs-Engines?

Eine Container-Laufzeit ist eine Softwarekomponente, die für die Verwaltung des Lebenszyklus eines Containers auf einem Host-Betriebssystem verantwortlich ist. Sie arbeitet mit Container-Orchestrierungs-Engines zusammen, um einen verteilten Cluster von Containern einfach und effizient zu steuern. Docker ist beispielsweise eine Container-Technologie, die häufig zusammen mit der Kubernetes-Orchestrierungs-Engine verwendet wird.

Container-Orchestrierungs-Engines (COEs) wie Kubernetes vereinfachen die Container-Verwaltung und automatisieren komplexe Aufgaben, darunter:

  • Automatische Skalierung von Containern
  • Netzwerkkonfiguration
  • Lastenausgleich
  • Integritätsprüfungen

COEs gewährleisten einen effizienten Betrieb bei der Bereitstellung von Container-Workloads.

Eine Einführung in Docker und Kubernetes

Docker

Die Container-Laufzeit ist eine wesentliche Komponente von Docker und stellt die Umgebung zur Ausführung und Verwaltung von Containern bereit. Als Containerisierungstechnologie bietet Docker eine menschenlesbare Schnittstelle, den sogenannten Docker-Client, der Workloads auf dem Host-Computer verwaltet, indem er mit der Container-Laufzeitumgebung namens „Containerd“ interagiert.

Es gibt zwei Arten von Docker-Clients:

  • Docker Compose: Unterstützt die Verwaltung von Anwendungen, die aus mehreren Containern bestehen, und kann sie mit einem einzigen Befehl starten oder stoppen.
  • Docker: Verwaltet Container einzeln, um sie zu starten, zu stoppen oder zu entfernen.

Docker unterstützt auch andere Containerisierungsprozesse:

  • Docker-Images werden mithilfe einer Konfigurationsdatei namens Dockerfile erstellt und in einer zustandslosen Anwendung (der sogenannten Docker Registry) gespeichert. Images können lokal oder in der Cloud gehostet werden (z. B. über DockerHub).
  • Ein Bereitstellungspunkt ist ein Dateisystem, in dem ein Verzeichnis oder eine Datei aus dem Host-Dateisystem gemountet wird. Beim Starten eines Containers erstellt Docker einen Bereitstellungspunkt und sendet Warnungen an den Kernel, um die erforderlichen CPU-, Speicher-, Festplatten- und Host-Ports zuzuweisen.

Trotz seiner vielen Stärken ist Docker in folgenden Punkten eingeschränkt:

  • Verwalten mehrerer Container-Cluster über verteilte Knoten in einer einzigen Sitzung
  • Massenoperationen in einer Umgebung mit mehreren Knoten (z. B. automatisch skalierende Container)

Kubernetes hilft jedoch, diese Einschränkungen zu überwinden, indem es containerisierte Workloads über einen Knoten-Cluster hinweg verwaltet.

Kubernetes

Kubernetes ist ein leistungsstarkes Orchestrierungstool zur Verwaltung von Containern auf mehreren Hosts mithilfe der Container Runtime Interface (CRI). Mit der CRI unterstützt Kubernetes Containerisierungsplattformen wie Docker, um Container auf den Serverknoten zu erstellen, zu löschen und zu verwalten.

Kubernetes optimiert die Clusterverwaltung, indem es Ressourcenobjekte wie Bereitstellungen verwendet, um eine Gruppe von Anwendungs-Pods (ein kleiner Cluster von Containern) als eine Einheit anzusprechen, was eine einfache Skalierung von Pods oder die Aktualisierung von Container-Images mit einem einzigen Befehl ermöglicht.

Kubernetes bietet umfassendere Einblicke in den Cluster, indem es Informationen mit drei verschiedenen Detailebenen protokolliert:

  • Es werden Protokolle auf Container-Ebene generiert, die stdout und stderr von Anwendungen erfassen.
  • Es werden Protokolle auf Knotenebene aus den Containern der Anwendung aggregiert und gemäß der für jede Bereitstellungskonfiguration definierten Protokollrotationsrichtlinie aufbewahrt.
  • Protokolle auf Clusterebene bieten tiefere Einblicke in Kubernetes-Komponenten wie etcd oder kube-proxy.

Erfahren Sie mehr

Dieser Leitfaden konzentriert sich auf den Kubernetes-Teil der Cloud-Sicherheit und stellt die Angriffsfläche, den Sicherheitslebenszyklus und 12 Best Practices vor. Lesen: Sicherheitsleitfaden für Kubernetes

Warum sollten Sie Kubernetes mit Docker verwenden?

Kubernetes und Docker sind Technologien, die sich gegenseitig ergänzen. Wenn sie ineinander integriert sind, kann die Kombination beider Technologien erhebliche Vorteile mit erweiterten Funktionen bringen.

  • Hochverfügbarkeit
  • Automatische Skalierung
  • Speicher
  • Überwachungs-Dashboards

Hochverfügbarkeit

Dass Docker Container nur auf einem einzelnen gehosteten Knoten verwalten und den Status von Servern nicht ändern kann, lässt sich mit Kubernetes ausgleichen, da diese Lösung Container über mehrere Knoten hinweg plant. Kubernetes stellt einen neuen Knoten bereit, wenn ein vorhandener Knoten abstürzt oder fehlerhaft wird. Mit dieser ausgewogenen Workload-Verteilung gewährleistet dieser Ansatz jederzeit eine hohe Verfügbarkeit.

Automatische Skalierung

Kubernetes verfügt über eine integrierte Unterstützung für die automatische Skalierung auf Serverclustern, sodass Benutzer Skalierungskriterien definieren können, beispielsweise Schwellenwerte für mehrere Metriken (z. B. CPU- oder RAM-Auslastung). Wenn diese Schwellenwerte erreicht sind (z. B. hoher Datenverkehr oder hohe CPU-Auslastung), kann Kubernetes die Container automatisch hochskalieren. Ebenso können die Container wieder herunterskaliert werden, wenn die Auslastung unter die Schwellenwerte fällt. Das trägt dazu bei, die Latenz kosteneffizient niedrig zu halten.

Speicher

Um der oft flüchtigen Natur von Containern Rechnung zu tragen, bietet Docker zwei persistente Speichermodi: Volume- und Bind-Mounts. Kubernetes ermöglicht jedoch mehrere Speicherintegrationsoptionen, indem die Speicherschicht von den Containern abstrahiert wird. Dadurch ergeben sich u. a. folgende Optionen:

  • Nicht persistenter Speicher
  • Persistenter Speicher (z. B. Netzwerkdateisysteme, Fibre Channel)
  • Flüchtiger Speicher (z. B. emptyDirs und ConfigMaps)

Überwachungs-Dashboards

Die Überwachung ist heute ein grundlegender Aspekt des Anwendungslebenszyklus-Managements. Kubernetes unterstützt die Integration verschiedener Überwachungs-Dashboards, um eine robuste Überwachung und schnelle Benachrichtungsmechanismen für eine zeitnahe Reaktion auf Zwischenfälle bereitzustellen. Dashboards und Visualisierungen von Prometheus und Grafana erfreuen sich großer Beliebtheit, da sie eine benutzerfreundliche Oberfläche mit Warnungen, Sichtbarkeit und Analysen unterschiedlicher Metriken in einer Microservice-Infrastruktur bieten.

Example of Prometheus dashboard

Prometheus-Dashboard

Zusammenfassung

Die Containerisierungstechnologie hat sich zu einem wesentlichen Aspekt moderner Anwendungen entwickelt. Container-Plattformen wie Docker und Container-Orchestrierungs-Engines wie Kubernetes ergänzen einander und arbeiten zusammen, um die Container-Verwaltung zu vereinfachen.

Docker ist eine schlanke Lösung, die Probleme bei der Anwendungsbereitstellung in mehreren Umgebungen löst, indem sie eine Anwendung mit ihren Abhängigkeiten verpackt. Kubernetes nutzt die Containerisierung über erweiterte Funktionen und ermöglicht so eine bessere Transparenz und Kontrolle über Cluster, auf denen komplexe Workloads ausgeführt werden.

Durch die Integration von Docker und Kubernetes wird die Bereitstellung und Skalierung großer und komplexer verteilter Ökosysteme einfacher und verwaltbarer.