Der Inside-Out-Sicherheits Blog - Der Inside-Out-Sicherheits Blog

Docker und Kubernetes im Vergleich | Varonis

Geschrieben von Klaus Nemelka | May 1, 2021 4:00:00 AM

Ein häufiger Scheideweg für Entwickler bei der Containerisierung (vor allem am Anfang) ist die Wahl zwischen Kubernetes und Docker. In diesem Beitrag werden wir umfassend auf diese beiden Möglichkeiten eingehen, bis hin zu Anwendungsfällen, für die beide Lösungen perfekt geeignet sind.

Für diese Zwecke macht es Sinn, den Begriff Container nur im Kontext von Kubernetes (K8) und Docker zu definieren. Das könne man als Grundlage für das Verständnis beider Technologien betrachten, bevor wir tiefer auf beide eingehen.

Was ist ein Container

Nehmen wir an, Sie möchten eine Anwendung in der perfekten Umgebung für Spitzenleistung bereitstellen. Normalerweise hängt eine solche Umgebung von den Racks ab, in denen sie sich befindet, von Netzwerkvariablen und von anderen externen Infrastruktur-Spezifikationen. Sie können also keine Spitzenleistung über 100 % der Zeit erzielen … es sei denn, Sie erstellen einen Container, der die Anwendung von dem physischen Ort abstrahiert, an dem sie sich befindet.

Stellen Sie sich eine Sandbox oder eine virtuelle Maschine mit festgelegten Variablen vor (Betriebssystemtyp, Compute usw.) Wenn Sie nun beispielsweise eine andere Anwendung bereitstellen möchten, dann bildet ein Container auf der gleichen Hardware, aber mit einem anderen Betriebssystem und anderen Variablen, eine abgeschlossene Umgebung. Diese eignet sich perfekt zum Testen und Bereitstellen der besagten Anwendung.

Diese Anwendungen, die nun containerisiert sind, verhalten sich so, als würden sie sich auf verschiedenen Rechnern (sogar an verschiedenen Standorten) laufen. Ein wesentlicher Vorteil von Containern ist, dass wir ihre Umgebungen überall dort replizieren können, wo die Anwendung benötigt wird – so lassen sich Kompatibilitätsprobleme beseitigen, die vor der Einführung von Containern eine ständige Plage in der Softwareentwicklung waren.

Was ist Kubernetes?

Kubernetes ist ein Tool, das von Google 2014 entwickelt wurde, um Aufgaben im Zusammenhang mit Containern und Containerisierungsplattformen zu orchestrieren. Es ist ein Open-Source-Projekt, das mehrere Container verwalten kann und seine Kapazitäten verteilt (siehe „Funktionen“ unten), um die Betriebszeit und Verfügbarkeit der Anwendungen „im Container“ zu gewährleisten.

Wichtige Kubernetes-Funktionen

Kubernetes bietet die folgenden wichtigen Funktionen:

  1. Aufrechterhaltung einer Umgebung mit festgelegten Parametern für Entwicklung, Tests und Bereitstellung
  2. Vorhersagbare und automatisch (horizontal) skalierbare Infrastruktur
  3. Selbstkorrigierende Umgebung (Rollbacks) mit Lastausgleich
  4. Große Fläche für die Bereitstellung von Anwendungen
  5. Verwaltungstools auf Anwendungsebene

Diese fünf bilden die Kernfunktionen, für die Entwickler die Google Kubernetes Engine übernommen haben.

Was ist Docker?

Docker (2013) ist ein Containerisierungs-Tool. Es ist ebenfalls Open-Source, ressourcenschonend und bietet Entwicklern die Möglichkeit, die Bereitstellung von Anwendungen in portablen Containern zu automatisieren.

Wichtige Docker-Funktionen

Hier ist eine kurze Liste der Kernfunktionen von Docker:

  1. Freigabefähige Umgebungs-Images über Docker Build
  2. Docker Assemble zur Erkennung von Programmiersprachen und Frameworks beim Erstellen von Containern
  3. Native und Cloud-basierte Toolsets zur Optimierung der Entwicklerproduktivität
  4. CI/CD-Tools für Teams, die an aufsteigenden Anwendungen mit Versionskontrolle arbeiten
  5. Hohe Fehlertoleranz mit solider Unterstützung von großen Clustern

Docker und Kubernetes: Muss man sich entscheiden?

Nicht immer.

Kubernetes allein kann den Container nicht starten, wenn Sie Ihr Projekt beginnen. Stattdessen würde man in der Regel Docker (oder seine Konkurrenten) für diesen Teil verwenden. Ich persönlich habe die symbiotische Beziehung zwischen den beiden akzeptiert.

Docker erstellt und verwaltet Container … und Kubernetes verwaltet dann Docker.

Solange Ihre Anwendung einfach aufgebaut ist, kann Docker auch die gesamte erforderliche Infrastruktur bereitstellen, um sie am Laufen zu halten. Wenn die Anwendung wächst und gegebenenfalls mehrere Cluster und eine anspruchsvollere Wartung erfordert, wird Kubernetes zur Voraussetzung.

Man steht erst dann vor der Wahl, wenn die Anwendung wächst.

Pro und Contra von Docker: Containerisierung

Man würde sich als Entwickler nicht mit der Containerisierung von Anwendungen herumschlagen, wenn es im Zusammenhang mit der Technologie keine Vorteile gäbe. Schauen wir uns nun kurz die offensichtlichen Vorteile an, die Docker zu einer leichten Wahl machen – sowie einige seiner Nachteile.

Pro:

  • Einfache Erstellung: Die Initialisierung von Containern in Docker ist schnell und erfordert nur minimale technische Kenntnisse.
  • Docker-Tools: Die Verwaltung von Containern ist dank einer umfassenden Suite von vorgefertigten Tools relativ einfach.
  • Ausgezeichneter Support: Docker verfügt über eine aktive Community von Entwicklern, die bei Problemen helfen und diese lösen können.

Contra:

  • Kein Speicher: Jedes Mal, wenn ein Container neu gestartet wird, gehen die Daten verloren, die Sie zuvor evtl. erstellt haben. Persistenz ist keine Standardeinstellung, und für Anfänger kann das kompliziert werden.
  • Niedrige Geschwindigkeit: Docker-Container weisen aufgrund der Netzwerkebene, durch die sie an Geschwindigkeit verlieren, niemals die gleichen Performance-Werte auf wie Bare-Metal-Systeme. Dieses Problem taucht beim Hosten von Anwendungen auf Bare-Metal-Infrastruktur schlichtweg nicht auf.
  • Keine plattformübergreifende Unterstützung: Docker-Container sind in ihrer Struktur isoliert. Dadurch lassen sich Anwendungen nicht in anderen Umgebungen bereitstellen, als dem Image, in dem sie erstellt wurden.

Pro und Contra von Kubernetes: Container-Orchestrierung

Genau wie Docker hat auch Kubernetes Vor- und Nachteile, die Ingenieure beim Einsatz berücksichtigen müssen. Lassen Sie uns ein paar Vor- und Nachteile beleuchten, um ein tieferes Verständnis für die Verwendung von K8 zu erlangen.

Pro:

  • Pods: K8 verwendet Pods (Container und Containerisierungs-Tools) für Persistenz mit automatischer Reparatur (Wiederherstellung) im Falle eines unerwarteten Ausfalls.
  • Von Google entwickelt: Es gibt einen natürlichen Vertrauensvorschuss durch seine Entstehung und die wachsende (größte) Community rund um Kubernetes
  • Standardspeicher: K8 bietet Cloud- und SAN-Speicheroptionen für Entwickler.

Contra:

  • Komplexe Einrichtung: Kubernetes erfordert enorm viel technische Arbeit sowie einige Zeit für die ordnungsgemäße Installation und Konfiguration.
  • Zu leistungsstark: Einfache Anwendungen erfordern nicht die Komplexität, die Kubernetes bietet. Welcher von Ihren Entwicklern würde sagen, dass Ihre Anwendung „einfach“ sei?
  • K8-Fachkräfte sind nicht billig: DevOps-Ingenieure, die sich mit der Erstellung und Wartung von Kubernetes-Loadouts auskennen, sind teuer.

Selbst mit diesen Nachteilen ist K8 eine zukunftssichere Technologie, auf die sich die Migration lohnt. Die Erfahrung hat gezeigt, dass die Erstellung von Anwendungen von Grund auf und anhand seiner Standards die Kosten- und Komplexitätsfaktoren deutlich ausgleicht.

Anwendungsfälle für Docker und Kubernetes

Obwohl sich dieser Beitrag auf Docker und Kubernetes konzentriert, sollte man dennoch im Hinterkopf behalten, dass diese nicht isoliert voneinander existieren. Auch andere Orchestrierungs- und Containerisierungs-Tools, die mit Docker und Kubernetes konkurrieren, haben bestimmte Marktanteile.

Es gibt jedoch Situationen, für die entweder K8 oder Docker am besten geeignet sind. Selbst zwischen dem Duo ist in manchen Fällen ein Vergleich nicht wirklich nötig. Schauen wir uns diese Fälle genauer an.

Wann Sie Kubernetes verwenden sollten

Wenn ein Projekt stark gewachsen ist, sprechen die folgenden Gründe für K8:

  • Nahezu perfekte Verfügbarkeit: Die Selbstreparaturfunktion von Kubernetes ermöglicht es ressourcenintensiven Anwendungen, weiter zu persistieren – egal, wie viele Fehler aufgrund dieses Ressourcenhugers in Ihrem Stack auftreten.
  • Beim Ausprobieren verschiedener Containerisierungsanbieter: Da es mit fast allen Anbietern funktioniert (jeweils mit unterschiedlichen Schwierigkeitsgraden), bietet K8 als Orchestrator die Freiheit, den Markt zu erkunden. Kein Anbieter kann Sie in einen Vertrag zwingen, wenn er Sie mit seinem SLA nach der Testphase nicht überzeugen kann.
  • Bei unsicherem Wachstumspotenzial: K8 weist Anwendungen automatisch Ressourcen zu, wenn diese horizontal wachsen.

Wann Sie Docker verwenden sollten

Es gibt Fälle, in denen Sie eher Docker und seine Tools zum Hosten Ihrer Anwendungen verwenden sollten. Schauen wir uns diese Fälle an:

  • Wenn K8 keine Option ist: Fachkräftemangel, API-Inkompatibilitäten und Kosten können für Docker und seine Tools sprechen. Zur Orchestrierung kann Docker Swarm K8 vollständig ersetzen.
  • Wenn Sie gerade erst anfangen: Sie müssen Docker nicht mit einem Orchestrator koppeln, wenn Anwendungen noch RAD-Wachstumsschleifen durchlaufen. In solchen Phasen ist Geschwindigkeit wichtiger als Persistenz.
  • Bei der Erstellung von CLI-Anwendungen: Docker wurde urpsrünglich entwickelt, um CLI-Anwendungen zu containerisieren, und bei solchen Anwendungen werden Sie immer wieder auf Effizienzvorteile stoßen, die Ihre Produktivität steigern.

Wann Sie sie beide zusammen verwenden sollten

In Kombination bilden Kubernetes und Docker ein sich ergänzendes Orchester. Zum einen der langsame Durchsatz, über den wir uns bei Kubernetes’ On-the-Bone-Bereitstellung und der Durchführung von Container-Reparaturoperationen beschwert haben.

Wenn Sie sowohl das Budget als auch die Fachkräfte haben, um Anwendungen zu unterstützen, die zeitlos sind, funktioniert das Paar hervorragend. Sie werden nicht auf einzigartige Quellen für Ausfallzeiten stoßen, da die Communities stets zur Hilfe bereitstehen.

Man sollte sich auch im Klaren darüber sein, dass die Entwickler in ihren Produkten jeweils Lücken und Fugen gelassen haben, in die sich das andere Produkt für optimierte Performance einfügt. Kompose von K8 ist eine Anpassung von Docker Compose. Die gleichzeitige Verwendung beider Tools war und ist also der Standard.

Somit endet unser Duell in einem freundlichen Unentschieden. Die Verwendungsgründe hängen ganz von den eigenen Präferenzen ab. Allerdings können Sie Kubernetes nicht allein verwenden. Es ist besser, wenn Sie es mit Docker und einem Datensicherheitsanbieter koppeln, um eine bessere Leistung als die anderer Containerisierungs-Tools zu erhalten.