Container-Virtualisierung mit Docker, Kubernetes und Google Container Engine GKE

Kubernetes wird zur Verwaltung großer Docker-Deployments verwendet. Aber wie funktioniert Kubernetes und die Google Container Engine eigentlich?

2014 war für Docker ein wichtiges Jahr. In nur 12 Monaten hat sich das Tool zum Management von Linux-Containern von einem einfachen Open-Source-Projekt zu einer leistungsfähigen Plattform gemausert. Inzwischen haben hunderte kleiner Open-Source-Projekte genauso wie Branchen-Riesen von AWS über Google bis hin zu Microsoft, Red Hat und VMware ihre Unterstützung für Docker zugesagt.

Google war dabei einer der ersten Public-Cloud-Anbieter, die das Container-Hosting offiziell angeboten haben. Mit der Erfahrung aus der Verwaltung von Millionen von Linux-Containern für das eigene Data Center im Rücken war für Google der Weg zu einem öffentlichen Service für Entwickler offenbar nicht schwer.

Zunächst kündigte Google Kubernetes an, dabei handelt es sich um ein Open-Source-Tool zur Container-Orchestrierung und zum Cluster-Management. Anschließend wurde die Google Container Engine (GKE) ins Leben gerufen, die wiederum Kubernetes verwendet. 

Im Ergebnis kombiniert Google damit die Leistungsfähigkeit seiner IaaS-Plattform (Infrastructure as a Service) Google Compute Engine (GCE) mit Docker. Auch wenn es sich bei der Google Container Engine noch um eine Alpha-Version handelt, ist GKE schon jetzt eines der ersten Tools, das bereits alle Bausteine für das Management von Containern beinhaltet.

Als Ziel verfolgt Google mit seiner Container Engine, die Produktivität von Entwicklungs- und Operations-Teams durch die einfache Verwaltung Container-basierter Workloads zu erhöhen. Stichwort DevOps. Das Tool mindert die Komplexität und vereinfacht immer wieder anfallende Management-Aufgaben durch eine einfache Nutzeroberfläche und einfache Kommandozeilen-Tools.

So funktioniert Googles Kubernetes-Tool

Kubernetes ist so etwas wie die Bausubstanz der GKE. Entwickler müssen zwar den Umgang mit Kubernetes nicht zwangsläufig beherrschen, trotzdem hilft es natürlich, das Konzept zu verstehen. Container-basierte Applikationen sind nicht auf eine darunterliegende Infrastruktur angewiesen, sondern bringen das notwendige Betriebssystem (OS), die Laufzeitumgebung sowie alle Bibliotheken, Frameworks und Abhängigkeiten in einem Paket als eine Einheit gleich mit. Aus diesem Grund ist es auch möglich, mehrere Container auf einem einzigen Host einzusetzen oder diese auf mehrere Hosts zu verteilen.

Solange die Container die anderen Container finden, von denen Sie abhängen, ist es irrelevant, wo diese installiert sind. Dieses Attribut der Container lässt die zugrundeliegende Infrastruktur in den Hintergrund treten. Sobald eine gewisse Anzahl an virtuellen Maschinen (VM) bereitgestellt ist, kann man sie als einzelne Computing-Einheit behandeln. Somit wird es möglich, ganze Cluster bestehend aus Containern zu betreiben.

Docker selbst managt lediglich den Lebenszyklus eines jeden Containers. Damit Entwickler nun einen ganzen Cluster bestehend aus Containern verwalten können, benötigen sie also ein zusätzliches Tool. Container-basierte Applikationen brauchen einen gewissen Erkennungsmechanismus, damit sie sich dynamisch miteinander verbinden können. Zum Beispiel muss der Webserver-Container den Datenbank-Container finden und sich damit verbinden können.

Kubernetes ist genau dieses Tool, auf dem die Erkennung und das Lebenszyklus-Management für Container-basierte Applikationen, die in den Clustern laufen, beruht. Aus DevOps-Sicht ist Kubernetes quasi die Fernbedienung, um Cluster konfigurieren und verwalten zu können. Dabei kann es sich um nur wenige Container handeln aber auch um sehr große Installationen, bei denen mehrere Tausend Container im Einsatz sind.

Genau genommen ist Kubernetes dabei nicht an die Google-Cloud gebunden und lässt sich auch mit mehreren anderen Infrastruktur-Providern koppeln, egal ob auf Bare-Metal-Systemen, auf Hypervisoren oder in Public Clouds. Microsoft beispielsweise hat Kubernetes in seinen Cloud-Service Azure Virtual Machines integriert und VMware schickt sich an, Kubernetes mit vSphere und vCloud Air einzusetzen. Red Hats OpenShift dagegen funktioniert bereits mit Kubernetes.

Auch bei PaaS-Infrastrukturen (Platform as a Service) kann Kubernetes zum Einsatz kommen. Die notwendigen Metadaten, mit denen Spezifizierungen und Beschränkungen definiert werden, werden dann in Form von JSON-Dateien deklariert. 

Die Details für die Controller, Services und Pods dagegen als individuelle Dateien, die anschließend per Kommandozeile an Kubernetes übermittelt werden. Der Master-Server empfängt und verarbeitet die JSON-Datei und entscheidet dann, wo der jeweilige Container platziert werden soll.

Sie können auch Bedingungen definieren, damit es beim Provisioning der Container auf dem gleichen Host zu keinen Konflikten kommt. Das käme zum Beispiel für eine Master/Slave-Konfiguration von Datenbank-Servern in Frage. Mit Kubernetes kommen also PaaS-ähnliche Orchestrierung und Lebenszyklus-Management in die Welt der Linux-Container. In der Zukunft dürften wir also verschiedene Open-Source-PaaS-Implementierungen sehen, die mithilfe von Docker und Kubernetes realisiert sind.

Google Compute Engine und Google Container Engine

Die Google Container Engine wurde erst im November 2014 angekündigt und befindet sich also noch in einem sehr frühen Stadium. GKE dient als Abstraktionsschicht, die das Container-Management für die Google Compute Engine orchestriert.

GKE stellt zwei Mechanismen zur Verfügung, um Container auszurollen und zu verwalten – eine webbasierte Konsole und Kommandozeilen-Tools. In der derzeitigen Version sind die Kommandozeilen-Tools noch leistungsfähiger als die Web-Konsole. Auch wenn die Container auf virtuelle Maschinen aufgesetzt eingesetzt werden, muss man sich für die Administration an keiner VM anmelden. Die Kommandozeilen-Tools interagieren direkt mit dem Kubernetes-Agent, der sich kubelet nennt. Diese Software läuft in jeder virtuellen Maschine.

Da GKE Kubernetes vereinfacht, bietet sich so eine weitere Abstraktionsschicht. Die erste Version hat beispielsweise die Konzepte von Clustern und Nodes enthalten. Ein Cluster besteht dabei aus Master- und Worker-Nodes. Der Master stellt einen API-Endpunkt (Application Programming Interface) für die Erstellung und die Kontrolle von Computing-Ressourcen zur Verfügung. Sowohl die Konsole als auch die Kommandozeilen-Tools kommunizieren damit, um bestimmte Aufgaben zu erledigen.

Ein Worker-Node in einem Cluster ist für die Bereitstellung der Compute- und Arbeitsspeicher-Ressourcen zuständig, die den Applikationen zur Verfügung stehen. Sie sind sozusagen die Lastesel der Installation. 

Ein Node gehört in der Regel nur zu einem Cluster und wird als Teil der Cluster-Bereitstellung ausgeliefert. Die Anzahl der erstellten Nodes repräsentiert die gesammelte Compute-Leistung der darunterliegenden virtuellen Maschinen. Der Master des Clusters verteilt die Arbeit auf die entsprechenden Nodes. Alle Nodes im Cluster basieren dabei auf demselben VM-Instanzen-Typ.

Neben der GKE können Entwickler auch verwaltete virtuelle Maschinen nutzen, die über die Google App Engine zur Verfügung stehen. Diese bieten das Beste aus beiden Welten: PaaS und IaaS basierend auf Docker-Containern.

Da sich Docker derzeit recht schnell weiterentwickelt und der Core-Engine weitere Orchestrierungs- und Clustering-Funktionen hinzugefügt werden, wird es spannend sein zu beobachten, wie sich das Projekt zukünftig zu Implementierungen wie Kubernetes verhält.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Artikel wurde zuletzt im Februar 2015 aktualisiert

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close