Benutzer:Fzagoev/Kubernetes

aus Wikipedia, der freien Enzyklopädie
QS-Informatik
Dieser Artikel wurde wegen inhaltlicher Mängel auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+)


Begründung: Deutlich Luft nach oben bei der Allgemeinverständlichkeit. Weite Teile des Artikels basieren offenkundig auf einer kaum bearbeiteten maschinellen Übersetzung. Dafür sprechen Satzbau und Wortwahl. --KS80 (Diskussion) 12:36, 10. Dez. 2020 (CET)

Fzagoev/Kubernetes

Logo
Basisdaten

Maintainer Cloud Native Computing Foundation
Entwickler Google
Erscheinungsjahr 2014[1]
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.[2]

Die Orchestrierung mittels Kubernetes wird von führenden Cloud-Plattformen wie Microsofts Azure,[3] IBM Cloud,[4] Red Hats OpenShift,[5] Amazons EKS,[6] Googles Kubernetes Engine,[7] und Oracles OCI[8][9] unterstützt.

Geschichte

Kubernetes (von griechisch κυβερνήτης ‚Steuermann‘) wurde ursprünglich von Joe Beda, Brendan Burns und Craig McLuckie entwickelt.[10] Kurze Zeit später stießen weitere Google-Entwickler wie Brian Grant und Tim Hockin hinzu. 2014 stellte Google Kubernetes als Open-Source-Projekt der Öffentlichkeit vor.[11]

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

Aufbau

Schematischer Aufbau

Der Cluster mit seinen Nodes wird über eine dedizierte Maschine, den „Kubernetes Master“, gesteuert, der mit den einzelnen Nodes über die, in diesen laufende, „Kubelets“ kommuniziert. Auf dem Kubernetes Master laufen 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.[14]

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

Der Kubernetes Master ist die Steuereinheit des Clusters, welcher die Pods und die darin enthaltenen Container auf die 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

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

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

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

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

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

Der 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 berichtet 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

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

cAdvisor

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.

Pod

Kubernetes orchestriert sogenannte „Pods“ als kleinste einsetzbare Einheit. Der Name nimmt Bezug auf englischen Ausdruck "Pod of whales" an, was soviel wie eine Gruppe von Walen bedeutet. Dies wiederum ist eine Anspielung auf das Wal-Thema der Docker-Container (auch im Docker-Logo).

Pods beinhalten einen oder auch mehrere Container, die sich dann eine Container-Runtime und die zugeteilten Ressourcen teilen. Pods werden auf einem „Nodes“ (physische oder virtuelle Maschinen in einem Cluster) deployt und ausgeführt.[15]

Jeder Pod hat eine endeutige Ip-Addresse im Cluster zugewiesen. Somit können Anwendungen ohne Konfliktpotential Ports benutzen. In einem Pod können die Container übereinanden über den Localhost kommunizieren, aber wenn ein Container nur aus einem Pod besteht, hat der Container keine Möglichkeit andere Container direkt anzusprechen, dazu muss die IP-Addresse des Pods benutzt werden.

ReplicaSet

Service

Volume

Namespace

ConfigMap und Secret

DaemonSet

Gewisse Ähnlichkeit zu ReplicaSet. Stellt sicher dass eine Kopie eines Pods auf einem Satz von Knoten in einem Kubernetes-Cluster läuft. ReplicaSet soll dann verwendet werden, wenn die Anwendung vollständig vom Knoten entkoppelt ist und mehrere Kopien auf einem Knoten laufen können.

DaemonSet soll dann genutzt werden, wenn nur eine Kopie auf allen Knoten im Cluster laufen soll (oder einer Untermenge). Beispiele hierfür sind Log und Monitoring

Label und Selector

Replication Controller und Deployments

Add-ons

Storage

Interaktion

Zur Interaktion mit dem Cluster steht das Kommandozeilentool kubectl zur Verfügung. Diese benutzt intern die sogenannte Cluster-Api, welche zur Erstellung, Konfiguration und Verwaltung der Cluster genutzt werden kann. Ein Schlüsselkonzept der API ist die Vorstellung, dass der Kubernetes-Cluster selbst eine Ressource / ein Objekt ist, das wie alle anderen Kubernetes-Ressourcen verwaltet werden kann. In ähnlicher Weise werden die Maschinen, aus welchen das Cluster besteht, auch als Kubernetes-Ressource behandelt. Zur Interaktion mit der Rest-Api stehen Clientbilotheken u. a. in den Programmiersprachen Go, Python, Java, C#, JavaScript, Clojure, Lisp, TypeScript, Perl, PHP, Ruby, Rust, Scala, Swift und Elixir zur Verfügung.[16]

Yaml-Syntax:


kostumize,



Paketmanager:

Helm


Distributionen

Cluster as a Service (CaaS)

  • Amazon Elastic Kubernetes Service (EKS)
  • Amazon Elastic Container Service (ECS)
  • Google Kubernetes Engine (GKS)
  • Azure Kubernetes Service (AKS)
  • Red Hat Openshift Container Platform
  • Pivotal Container Service

Andere

  • Minikube
  • Kubeadm
  • Kops

Microservices

Kubernetes wird häufig als eine Möglichkeit verwendet, eine auf Microservices basierende Implementierung zu hosten. Zusammen mit einer Palette an Werkzeugen bietet es alle Fähigkeiten, die erforderlich sind, um zentrale Probleme einer Microservice-Architektur zu lösen.

Literatur

Weblinks

Einzelnachweise

  1. First GitHub commit for Kubernetes. In: github.com. 7. Juni 2014.
  2. What is Kubernetes? – Kubernetes
  3. Kubernetes on Microsoft’s Azure Container Service is now generally available auf techcrunch.com vom 21. Februar 2017.
  4. Kubernetes now available on IBM Bluemix Container Service auf ibm.com vom 19. März 2017.
  5. Why Red Hat Chose Kubernetes for OpenShift auf blog.openshift.com vom 7. November 2016.
  6. Highly available and scalable Kubernetes service
  7. Googles Kubernetes Engine
  8. https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm
  9. Avi Miller: Announcing Oracle Container Services 1.1.9 for use with Kubernetes. (oracle.com [abgerufen am 23. April 2018]).
  10. Google Made Its Secret Blueprint Public to Boost Its Cloud (Amerikanisches Englisch) Abgerufen am 7. Juli 2017.
  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. Abgerufen am 7. Juli 2017.
  13. Kubernetes Components. Webseite kubernetes.io, abgerufen am 8. Juli 2017 (amerikanisches Englisch).
  14. Pods. Abgerufen am 3. März 2021 (englisch).
  15. Client Libraries. Abgerufen am 3. März 2021 (englisch).


Kategorie:Cloud Computing