Benutzer:Fzagoev/Kubernetes
Fzagoev/Kubernetes
| |
---|---|
Basisdaten
| |
Maintainer | Cloud Native Computing Foundation |
Entwickler | |
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
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
- 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
- Offizielle Website
- Kubernetes-Quellcode auf Github
- Kubernetes: Architektur und Einsatz – Eine Einführung mit Beispielen
- Why cloud-native open source Kubernetes matters (Engl.)
Einzelnachweise
- ↑ First GitHub commit for Kubernetes. In: github.com. 7. Juni 2014.
- ↑ What is Kubernetes? – Kubernetes
- ↑ Kubernetes on Microsoft’s Azure Container Service is now generally available auf techcrunch.com vom 21. Februar 2017.
- ↑ Kubernetes now available on IBM Bluemix Container Service auf ibm.com vom 19. März 2017.
- ↑ Why Red Hat Chose Kubernetes for OpenShift auf blog.openshift.com vom 7. November 2016.
- ↑ Highly available and scalable Kubernetes service
- ↑ Googles Kubernetes Engine
- ↑ https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm
- ↑ Avi Miller: Announcing Oracle Container Services 1.1.9 for use with Kubernetes. (oracle.com [abgerufen am 23. April 2018]).
- ↑ Google Made Its Secret Blueprint Public to Boost Its Cloud (Amerikanisches Englisch) Abgerufen am 7. Juli 2017.
- ↑ 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]).
- ↑ Google veröffentlicht Vollversion Kubernetes 1.0. In: ZDNet.de. 22. Juli 2015.
- ↑ Cloud Native Computing Foundation soll Container-Technologien zusammenbringen. In: pro-linux.de. 22. Juni 2015. Abgerufen am 7. Juli 2017.
- ↑ Kubernetes Components. Webseite kubernetes.io, abgerufen am 8. Juli 2017 (amerikanisches Englisch).
- ↑ Pods. Abgerufen am 3. März 2021 (englisch).
- ↑ Client Libraries. Abgerufen am 3. März 2021 (englisch).