Was ist Kubernetes?

Kubernetes (abgekürzt gerne auch K8s) ist ein Open-Source-System zur Verwaltung von Container-Anwendungen (siehe Docker). Google hat Kubernetes 2014 veröffentlicht, und 2015 an die CNCF (Cloud Native Computing Foundation) übergeben. Näheres zur Geschichte von Kubernetes ist hier zu finden. Die Verwaltung der technischen Container-Infrastruktur bezeichnet man auch als sog. „Orchestrierung“. Im Allgemeinen wird Kubernetes also für sogenanntes Load-Balancing, also für Lastenausgleich von Containern verwendet. Man kann es sowohl fremdgehostet von verschiedenen Cloud-Dienstleistern buchen, als auch on-premise selbst auf eigener oder fremder Hardware betreiben. Zu den fremdgehosteten Anbetern gehören u.a. AWS, Azure und Digital Ocean. Zusätzlich zum großen Kubernetes gibt es  für kleinere Lösungen die leichtgewichtigen K3s, K3d, MicroK8s und K0s.


Wie funktioniert Kubernetes?

Architekturtechnisch kann man mit Kubernetes clientseitig als auch serverseitig arbeiten. Ein umfangreiches Tutorial befindet sich unten in den Quellenangaben.


Der Kubernetes-Client

Auf der Clientseite kommuniziert Kubernetes über eine eigene API. Hierfür gibt es das Kommandozeilentool kubectl („Kube Control“), mit dem man die Server ansteuert, einrichtet und verwaltet. Theoretisch kann man die komplette Konfiguration mithilfe der Befehle, die kubectl zur Verfügung stellt, vornehmen. In der Regel nimmt man jedoch die komplette Konfiguration, sei es Namespaces, Cluster, Services, Zertifikate, usw., in sogenannten Manifest-Dateien im YAML-Format vor, und sendet diese dann über kubectl an Kubernetes.


Der Kubernetes-Server

Auf der Serverseite gibt es einmal die Master-Server. Diese bilden die sogenannte Control Plane. Normalerweise kommen drei bis fünf Master zum Einsatz. Zusätzlich gibt es mehrere Worker-Server, auch Worker-Nodes genannt, die die eigentliche Arbeit verrichten, indem sie die Prozesse in den ihnen zugewiesenen Containern ausführen. Die Master-Server selbst überwachen und verwalten hierbei die Auslastung der Worker-Server. Ist ein Worker überlastet oder fällt einer aus, kümmern sich die Master darum, einem anderen Worker die auszuführenden Prozesse bzw. die entsprechenden Container zuzuweisen. Insgesamt bilden Master und Worker ein gemeinsames Netzwerk, welches man auch als Cluster bezeichnet.

„The Network is the Computer.“ – John Gage


„Kubernetes wirft Docker hinaus.“

Das war eine sinngemäße Schlagzeile Anfang Dezember 2020. Hierbei ging es darum dass die Docker-Engine bald nicht mehr unterstützt wird. Ursprünglich war Kubernetes rein technologisch nur eine Schicht über Docker. Man könnte für einen Lastenausgleich auch Docker Swarm verwenden, jedoch stößt dieses schnell an seine Grenzen. Kubernetes bietet hierbei eine viel höhere Performance. Mit der Zeit gab es neben Docker auch alternative Container-Implementierungen, die man nach und nach standardisiert hat. Dieser Standard bekam den Namen Container Runtime Interface (CRI). Außer Docker hielten sich fast alle Hersteller an den neuen CRI-Standard, auch Kubernetes. Docker selbst arbeitet jedoch mit einem proprietären Protokoll, weswegen Kubernetes eine entsprechende Adapter-Implementierung namens Dockershim entwickelt hat. Da dies technisch jedoch „unter der Haube“ sehr aufwendig ist, wurde Dockershim nicht mehr weiterentwickelt und seit Kubernetes Version 1.20 als Deprecated, also als veraltet, markiert. Bei den nachfolgenden Versionen war Kubernetes dann nicht mehr in der Lage Images als Docker-Container aufzurufen, sondern nur über die eigene Engine.


Quellenangaben


Verwandte Begriffe