Kubernetes

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Kubernetes

Logo
Basisdaten

Maintainer Cloud Native Computing Foundation
Entwickler Google
Erscheinungsjahr 2014[1]
Aktuelle Version 1.16.0[2]
(18. September 2019)
Betriebssystem Plattformunabhängigkeit
Programmiersprache Go
Kategorie Container-Orchestrierung
Lizenz Apache-Lizenz 2.0
deutschsprachig nein
https://kubernetes.io/

Kubernetes (auch als „K8s“ bezeichnet, deutsche Aussprache: [ˌkuːbɐˈneːtəs], englische Aussprache: [ˌkuːbərˈnetiːz]) ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen, das ursprünglich von Google entworfen und an die Cloud Native Computing Foundation (CNCF) gespendet wurde. Es zielt darauf ab, eine „Plattform für das automatisierte Bespielen, Skalieren und Warten von Anwendungscontainern auf verteilten Hosts“ zu liefern. Es unterstützt eine Reihe von Container-Tools, einschließlich Docker.[3]

Die Orchestrierung mittels Kubernetes wird von führenden Cloud-Plattformen wie Microsofts Azure[4], IBMs Bluemix[5], Red Hats OpenShift[6], Amazons AWS[7] und Oracles OCI[8] unterstützt.

Geschichte[Bearbeiten | Quelltext bearbeiten]

Kubernetes (von Griechisch κυβερνήτης Steuermann) wurde von Joe Beda, Brendan Burns und Craig McLuckie gegründet.[9] Kurze Zeit später stießen weitere Google-Entwickler wie Brian Grant und Tim Hockin hinzu. 2014 wurde Kubernetes von Google angekündigt.[10]

Version 1.0 wurde am 21. Juli 2015 veröffentlicht.[11] Dabei wurde auch die Gründung der Cloud Native Computing Foundation unter dem Dach der Linux Foundation angekündigt und Kubernetes wurde von Google an diese gespendet.[12]

Aufbau[Bearbeiten | Quelltext bearbeiten]

Schematischer Aufbau

Kubernetes orchestriert sogenannte „Pods“ als kleinste einsetzbare Einheit. Pods sind die Arbeiterprozesse, die auf „Nodes“ (physische oder virtuelle Maschinen in einem Cluster) laufen. Pods beinhalten einen oder auch mehrere Container (die sich dann eine Container-Runtime und die zugeteilten Ressourcen teilen).

Der Cluster mit seinen Nodes wird über eine dedizierte Maschine, den „Kubernetes Master“, gesteuert, der mit den einzelnen Nodes über auf diesen laufende „Kubelets“ kommuniziert. Auf dem Kubernetes Master läuft eine Instanz des etcd, der zentralen Schlüssel-Wert-Datenbank für sämtliche für das Management des Clusters wichtigen Informationen, sowie die automatisierten Controllerprozesse und ein „Scheduler“, der neu erzeugte Pods einem Node zuteilt.

Die Controller überwachen und steuern den Cluster und seine Bestandteile. Sie können z. B. ausgefallene Nodes durch identische Nodes ersetzen.[13]

Architektur[Bearbeiten | Quelltext bearbeiten]

Kubernetes ist nach der sogenannten Master-Slave-Architektur aufgebaut. Der Master steuert mit seinen Komponenten die Nodes (Minions), auf welchen die Container laufen.

Kubernetes Master[Bearbeiten | Quelltext bearbeiten]

Der Kubernetes Master ist die Steuereinheit des Clusters, welcher die Container auf den Nodes verteilt und verwaltet. Zur Verwaltung dieser Aufgaben existieren mehrere Prozesse. Diese können auf einem einzelnen Master oder – zwecks Hochverfügbarkeit – auf mehreren verteilt sein. Die Prozesse teilen sich auf in:

etcd[Bearbeiten | Quelltext bearbeiten]

Der etcd ist eine von CoreOS entwickelte persistente, leichtgewichtige, verteilte Key-Value-Datenbank zur Speicherung der Konfiguration des Kubernetes Clusters. Diese enthält den Gesamtstatus des Clusters und wird vom API-Server unterhalten.

API Server[Bearbeiten | Quelltext bearbeiten]

Der API Server ist eine der wichtigsten Komponenten der Architektur. Er versorgt alle anderen Komponenten bzw. Dienste, interne wie externe, mit JSON-formatierten Informationen über eine REST-Schnittstelle. Der API Server speichert alle Informationen persistent im etcd. Die Autorisierung kann über verschiedene Mechanismen erfolgen.

Scheduler[Bearbeiten | Quelltext bearbeiten]

Der Scheduler entscheidet als eigenständige Komponente, auf welchem Node ein Pod gestartet wird. Dies ist abhängig von den zur Verfügung stehenden Ressourcen. Er verwaltet die Auslastung der Nodes und überwacht deren Last. Dafür muss der Scheduler die Anforderungen an die Ressourcen eines jeden Pods kennen. Berücksichtigt werden dabei Richtlinien wie QoS, Node-Zugehörigkeiten und z. B. Orte der Nodes im Cluster (Rechenzentren).

Controller Manager[Bearbeiten | Quelltext bearbeiten]

Der Controller Manager ist jener Prozess, welcher alle Kontrollmechanismen enthält, in dem z. B. ein DaemonSet oder ein Replication Controller laufen. Er kommuniziert mit dem API Server, um alle Status zu lesen und zu schreiben.

Kubernetes Node[Bearbeiten | Quelltext bearbeiten]

Der Kubernetes Node, auch Minion genannt, ist ein einzelner Server für Container. Dazu ist auf jedem dieser Nodes eine Container-Laufzeitumgebung installiert (z. B. Docker oder rkt (Rocket)) sowie die unten beschriebenen Komponenten:

Kubelet[Bearbeiten | Quelltext bearbeiten]

Das Kubelet ist für den Status jedes Nodes verantwortlich. Er wird vom Controller Manager gesteuert und übernimmt das Starten und Stoppen von Containern. Wenn ein Container nicht mehr läuft, sorgt das Kubelet auch für den Neustart auf dem gleichen Node. Alle paar Sekunden rapportiert er an den Kubernetes Master über seinen Status. Bei einem Fehler oder der Nichterreichbarkeit des Nodes erkennt der Master dies aufgrund des nicht gemeldeten Status'. Der Controller Manager startet dann die Pods auf anderen „gesunden“ Nodes erneut.

Kube-Proxy[Bearbeiten | Quelltext bearbeiten]

Der Kube-Proxy ist ein Proxy mit Integrierter Lastausgleichsfunktion. Er öffnet die Ports zu den Container-Services und verwaltet die Verbindungen.

cAdvisor[Bearbeiten | Quelltext bearbeiten]

Der cAdvisor ist im Kubelet integriert und zeichnet die Ressourcen eines Containers auf (CPU, Memory). Andere Monitoring-Lösungen können diesen Dienst konsultieren, um Langzeitaufzeichnungen anzubieten.

Microservices[Bearbeiten | Quelltext bearbeiten]

Kubernetes wird häufig als eine Möglichkeit verwendet, eine auf Microservices basierende Implementierung zu hosten, da es und das damit verbundene Ökosystem von Tools alle Fähigkeiten bieten, die erforderlich sind, um zentrale Probleme einer Microservice-Architektur zu lösen.

Literatur[Bearbeiten | Quelltext bearbeiten]

  • Kelsey Hightower: Kubernetes : eine kompakte Einführung. dpunkt.verlag, Heidelberg 2018, ISBN 978-3-86490-542-1.
  • Sébastien Goasguen: Kubernetes Cookbook : Building Cloud Native Applications. O'Reilly, 2018, ISBN 978-1-4919-7968-6.
  • Bilgin Ibryam, Roland Huß: Kubernetes Patterns : Reusable Elements for Designing Cloud-Native Applications. O'Reilly, 2019, ISBN 978-1-4920-5028-5.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. First GitHub commit for Kubernetes. In: github.com. 7. Juni 2014.
  2. Release 1.16.0. 18. September 2019 (abgerufen am 19. September 2019).
  3. What is Kubernetes? – Kubernetes
  4. Kubernetes on Microsoft’s Azure Container Service is now generally available auf techcrunch.com vom 21. Februar 2017.
  5. Kubernetes now available on IBM Bluemix Container Service auf ibm.com vom 19. März 2017.
  6. Why Red Hat Chose Kubernetes for OpenShift auf blog.openshift.com vom 7. November 2016.
  7. Highly available and scalable Kubernetes service
  8. Avi Miller: Announcing Oracle Container Services 1.1.9 for use with Kubernetes. (oracle.com [abgerufen am 23. April 2018]).
  9. Google Made Its Secret Blueprint Public to Boost Its Cloud (en-US)
  10. Cade Metz: Google Open Sources Its Secret Weapon in Cloud Computing. In: Wired. 10. Juni 2014, ISSN 1059-1028 (wired.com [abgerufen am 29. Juli 2019]).
  11. Google veröffentlicht Vollversion Kubernetes 1.0. In: ZDNet.de. 22. Juli 2015.
  12. Cloud Native Computing Foundation soll Container-Technologien zusammenbringen. In: pro-linux.de. 22. Juni 2015.
  13. Kubernetes Components. Webseite kubernetes.io, abgerufen am 8. Juli 2017 (amerikanisches Englisch).