Kubernetes

Kubernetes

Logo
Basisdaten

Hauptentwickler Cloud Native Computing Foundation
Entwickler Google
Erscheinungsjahr 2014[1]
Aktuelle Version 1.32.0[2]
(11. Dezember 2024)
Betriebssystem Linux
Programmier­sprache 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]) ist ein von Google entwickeltes Open-Source-System zur Verwaltung von Container-Anwendungen. In diesem Umfeld wird die Verwaltung der technischen Container-Infrastruktur auch als Orchestrierung bezeichnet. Es kann sowohl fremdgehostet von verschiedenen Anbietern für Cloud Computing gebucht, als auch selbst lokal auf eigener/fremder Hardware betrieben werden.

Geschichte

Google hat bereits nach der Jahrtausendwende einen großen Fokus auf Container gesetzt, sodass nahezu alle eigenen Dienste darin betrieben wurden. Dies führte aufgrund der Größe zu verschiedenen Problemen, weswegen das Unternehmen „Borg“ entwickelte: Ein System zur Verwaltung von Clustern. Borg verwaltete hunderttausende Aufgaben von tausenden Anwendungen, die verteilt auf zehntausenden Servern liefen. Zu den Hauptaufgaben gehört das Planen, (Neu-)Starten und Überwachen der Google-Dienste mit Fokus auf Skalierung und Hochverfügbarkeit. Die Komplexität von Ressourcenverwaltung und Fehlerbehandlung sollten von den Entwicklern abstrahiert werden, damit diese sich auf die Anwendung konzentrieren können. Zwar gab es Alternativen, diese waren aus Sicht von Google jedoch nicht widerstandsfähig genug und es fehlten Funktionen.[3]

Kubernetes (von altgriechisch κυβερνήτης kybernētēs „Steuermann“) wurde ursprünglich von Joe Beda, Brendan Burns und Craig McLuckie entwickelt.[4] 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.[5] Es handelt sich um eine Neuentwicklung von Borg, welches zu diesem Zeitpunkt bereits mehr als ein Jahrzehnt alt war. Man wollte die besten Ideen aus Borg in Kubernetes integrieren und darüber hinaus einige Probleme lösen, die in den Jahren zuvor mit Borg identifiziert wurden. Viele der von Google bereitgestellten Kubernetes-Entwickler waren zuvor an Borg beteiligt. Im Gegensatz zu Kubernetes war Borg ein internes System, welches nicht frei verfügbar war. Da sich Google bei Kubernetes für eine öffentliche Entwicklung als quelloffene Software entschieden hat, kann jeder den Nachfolger nutzen oder sogar daran mitarbeiten.[6]

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

Architektur

Schematischer Aufbau

Eine Kubernetes-Installation besteht aus dem Zusammenspiel mehrerer Hostrechner zu einem Cluster. Es gibt zwei Kategorien von hosts:

Control Plane
kümmert sich um Verwaltungsaufgaben im Cluster und führt keine Anwendungscontainer aus. Die Control Plane bietet eine API zur Konfiguration an[9], verwaltet alle spezifischen Konfigurationen in einer etcd-Instanz und wendet diese automatisch auf alle Anwendungen, sowie den Cluster selbst an. Es ist möglich, mehrere Instanzen der Control Plane gleichzeitig zu betreiben, um Hochverfügbarkeit zu erreichen.
Worker Nodes
dienen dazu, die eigentliche Arbeitslast der Anwendung abzuarbeiten. Die notwendige Anzahl und Leistung dieser „Worker Node Server“ ermittelt sich anhand der Ressourcenanforderung der Container. Je ressourcenintensiver die Container sind, desto mehr oder performantere Worker Nodes werden benötigt. Sie haben keine Verwaltungsaufgaben.

Kubernetes erzeugt ein Netzwerk, so dass die im Cluster verteilten Anwendungen untereinander kommunizieren können.[10]

Funktionen

Kubernetes bietet eine Reihe von Möglichkeiten die Orchestrierung von komplexen Container-basierten Anwendungen zu unterstützen.

  • Kubernetes fasst einen oder mehrere Container zu einem pod zusammen. Pods laufen zusammen auf einem node und werden im Cluster Netzwerk mit einer IP-Adresse, im Subnetz des jeweiligen Workernodes, angesprochen. Laufende pods werden anhand definierter Faktoren überwacht und bei einem Ausfall neu gestartet.
  • Mehrere dieser pods werden als service[11] mit einem network proxy[12], meist iptables, mit einer vom Workernode unabhängigen IP-Adresse zusammengefasst. So ist jeder Dienst immer unter dieser einen IP-Adresse erreichbar, auch wenn die dazugehörigen pods auf einem anderen Workernode neu gestartet werden.
    • Um eine Hochverfügbarkeit auch im Störungsfall aufrechtzuerhalten, können pods redundant auf mehreren Hosts betrieben werden. Dazu gibt es in Kubernetes Objekte, wie ReplicaSets und Deployments oder StatefulSets.
    • So kann eine sinnvolle Lastverteilung der eingehenden Anfragelast auf die einzelnen pods erfolgen. Bei hohem Anfragevolumen können zusätzliche pods gestartet werden.
    • services können entweder mit einem Nodeport[13] direkt oder durch einen ingress[14] per http bzw. https nach außen exponiert werden. Dazu muss ein Ingress Controller, z. B. ein Nginx installiert sein.[15]
  • configmaps und secrets können als Konfigurationsdateien und Passworte (z. B. für Datenbanken) in jeden Container in einem Pod gemounted werden.
  • Des Weiteren ermöglicht es Kubernetes, persistente Datenspeicher an die pods zu mounten (z. B. Storage Area Network).[16]

Einsatz

Vergleich traditioneller Ansatz vs. virtuelle Maschinen vs. Containerisierung von Anwendungen

Container sind eine natürliche Weiterentwicklung virtueller Maschinen zur effizienten Nutzung verfügbarer Hardware-Ressourcen. Da ein Container in vielen Fällen lediglich einen kleinen Teil einer größeren Anwendung enthält (Microservices), braucht es oftmals viele Container, um eine große Anwendung vollständig bereitzustellen.

Im Betrieb von Container-Anwendungen spielen Verwaltungsaufgaben wie die Bereitstellung, die Anfragelast-bezogene automatische Skalierung sowie das Monitoring der zum Betrieb notwendigen Anwendungscontainer und ihrer Infrastruktur eine wichtige Rolle. Kubernetes dient als Werkzeug zur Unterstützung dieser Orchestrierungsaufgaben.

Eingesetzt wird Kubernetes dabei bereits in kleinen und einfachen Containerumgebungen bis hin zu komplexen und verteilten Anwendungsfällen großer Technologieanbieter und ihrer containerbasierten Cloud-Produkte. Einige Beispiele sind hier: Microsofts Azure,[17] IBM Cloud,[18] Red Hat OpenShift,[19] Amazons EKS,[20] Googles Kubernetes Engine[21] und Oracles OCI.[22][23]

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.
  • Kevin Welter: Kubernetes: Das Praxisbuch für Entwickler und DevOps-Teams. Rheinwerk Computing, 2024, ISBN 978-3-8362-9883-4.
Commons: Kubernetes – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

  1. First GitHub commit for Kubernetes. In: github.com. 7. Juni 2014;.
  2. Release 1.32.0. 11. Dezember 2024 (abgerufen am 25. Dezember 2024).
  3. Abhishek Verma, Luis Pedrosa, Madhukar R. Korupolu, David Oppenheimer, Eric Tune, John Wilkes: Large-scale cluster management at Google with Borg. In: Proceedings of the European Conference on Computer Systems (EuroSys). Bordeaux, France 2015 (research.google [abgerufen am 4. April 2023]).
  4. Google Made Its Secret Blueprint Public to Boost Its Cloud. Abgerufen am 7. Juli 2017 (amerikanisches Englisch).
  5. Cade Metz: Google Open Sources Its Secret Weapon in Cloud Computing. In: Wired. 10. Juni 2014, ISSN 1059-1028 (amerikanisches Englisch, wired.com [abgerufen am 29. Juli 2019]).
  6. Borg: The Predecessor to Kubernetes. 23. April 2015, abgerufen am 4. April 2023 (englisch).
  7. Google veröffentlicht Vollversion Kubernetes 1.0. In: ZDNet.de. 22. Juli 2015, abgerufen am 7. Juli 2017.
  8. Cloud Native Computing Foundation soll Container-Technologien zusammenbringen. In: pro-linux.de. 22. Juni 2015, abgerufen am 7. Juli 2017.
  9. kubernetes.io – The Kubernetes API
  10. kubernetes.io – Cluster Networking
  11. kubernetes.io – service/
  12. kubernetes.io – kube-proxy
  13. kubernetes.io – service/nodeport
  14. kubernetes.io – ingress/
  15. kubernetes.io – Ingress Controllers
  16. Storage Volume
  17. Kubernetes on Microsoft’s Azure Container Service is now generally available auf techcrunch.com vom 21. Februar 2017.
  18. Kubernetes now available on IBM Bluemix Container Service auf ibm.com vom 19. März 2017.
  19. Why Red Hat Chose Kubernetes for OpenShift auf blog.openshift.com vom 7. November 2016.
  20. Highly available and scalable Kubernetes service
  21. Googles Kubernetes Engine
  22. Überblick über Container Engine for Kubernetes, auf docs.cloud.oracle.com
  23. Avi Miller: Announcing Oracle Container Services 1.1.9 for use with Kubernetes. (oracle.com [abgerufen am 23. April 2018]).