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.
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.
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.
Kubernetes bietet die folgenden wichtigen Funktionen:
Diese fünf bilden die Kernfunktionen, für die Entwickler die Google Kubernetes Engine übernommen haben.
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.
Hier ist eine kurze Liste der Kernfunktionen von Docker:
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.
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.
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.
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.
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.
Wenn ein Projekt stark gewachsen ist, sprechen die folgenden Gründe für K8:
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:
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.