Kubernetes

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Kubernetes
Logo
Maintainer Cloud Native Computing Foundation
Entwickler Google
Erscheinungsjahr 2014[1]
Aktuelle Version 1.8.4 [2]
(20. November 2017)
Betriebssystem Plattformunabhängigkeit
Programmiersprache Go
Kategorie Container-Orchestrierung
Lizenz Apache-Lizenz 2.0
deutschsprachig nein
https://kubernetes.io/

Kubernetes (auch als „K8s“ oder einfach „K8“ bezeichnet) 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 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] und Amazons AWS[7] unterstützt.

Geschichte[Bearbeiten | Quelltext bearbeiten]

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

Version 1.0 wurde am 21. Juli 2015 veröffentlicht.[9] 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.[10]

Aufbau[Bearbeiten | Quelltext bearbeiten]

Schematischer Aufbau

Kubernetes orchestriert sogenannte „Pods“ als kleinste deploybare 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).

Cluster > Node > Pod > Container > Service

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.[11]

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 Docker Container laufen.

Kubernetes Master[Bearbeiten | Quelltext bearbeiten]

Der Kubernetes Master ist die Steuereinheit des Clusters welcher die Container auf den Nodes verteilt und verwaltet. Es existieren mehrere Prozesse um diese Aufgaben zu verwalten. Diese können auf einem einzelnen Master oder auf mehreren verteilt sein (Hochverfügbarkeit). Die Prozesse splitten sich auf in:

etcd[Bearbeiten | Quelltext bearbeiten]

Der etcd ist eine von CoreOS entwickelte persistente, leichtgewichtige, verteilte Key-Value-Datenbank, welche die Konfiguration von Kubernetes Cluster speichert. Diese enthält den Gesamtstatus des Cluster und wird vom API-Server unterhalten.

API server[Bearbeiten | Quelltext bearbeiten]

Der API Sever ist eine der wichtigsten Komponenten und bedient alle anderen Komponenten mit Informationen mittels JSON über eine REST-Schnittstelle. Diese Schnittstelle bietet allen Internen sowie Externen Diensten die Möglichkeit mit dem Kubernetes Cluster zu kommunizieren. Der API Server persistiert alle Informationen 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änging von den zur Verfügung stehenden Ressourcen. Er verwaltet die Auslastung der Nodes und überberwacht die Last derer. Dafür muss dieser 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 Stati zu lesen und zu schreiben.

Kubernetes Node[Bearbeiten | Quelltext bearbeiten]

Der Kubernetes Node, auch bekannt als Minion, ist ein einzelner Server auf dem die Container gestartet werden. Auf jedem Node ist 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 nicht Erreichbarkeit vom Node 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 dem Container Servicen 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.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. First GitHub commit for Kubernetes. In: github.com. 7. Juni 2014.
  2. Releases · kubernetes/kubernetes · GitHub. Abgerufen am 15. Juli 2017.
  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. Google Made Its Secret Blueprint Public to Boost Its Cloud (en-US)
  9. Google veröffentlicht Vollversion Kubernetes 1.0. In: ZDNet.de. 22. Juli 2015.
  10. Cloud Native Computing Foundation soll Container-Technologien zusammenbringen. In: pro-linux.de. 22. Juni 2015.
  11. Kubernetes Components. Webseite kubernetes.io; abgerufen am 8. Juli 2017 (amerikanisches Englisch).