Containerisierung erfordert ab einer gewissen Größenordnung auch Automatisierung im Betrieb - Unterstützung bietet die Container-Orchestrierung. Kubernetes ist der de facto Standard in diesem Bereich, sehr leistungsfähig und reif für den produktiven Einsatz - bringt aber auch eigene Komplexität sowie eine steile Lernkurve mit sich und erfordert Veränderungen in Anwendungsarchitektur und Betrieb.

Kubernetes
Kubernetes ist eine open-source Plattform, mit der containerisierte Anwendungen bereitgestellt, verwaltet, überwacht und automatisch skaliert werden können. Es abstrahiert die zugrunde liegende Infrastruktur und stellt eine API für deklaratives Management von Container-Workloads bereit - und vereinfacht dadurch die Entwicklung, Bereitstellung, und Management containerbasierter Anwendungen für Entwicklungs- und Betriebsteams.
Der Name Kubernetes (oft auch k8s wegen den acht Buchstaben zwischen "K" und "s") kommt aus dem Griechischen und bedeutet "Steuerrad" oder "Steuermann". K8s hat sich als de-facto Standard für Container-Orchestrierung und Management etabliert. Aus diesem Grund betrachten wir im folgenden Artikel ausschließlich Kubernetes genauer.

Entstehung
Kubernetes ist aus dem internen Projekt "Borg" bei Google entstanden, in das 15 Jahre Container-Produktionserfahrung und viele best-practices aus der Community eingeflossen sind. Kubernetes wurde in der Version 1.0 im Jahre 2015 veröffentlicht und von Google der neu entstandenen Cloud Native Computing Foundation (CNCF) gespendet. Es wird seitdem in einem dreimonatigen Release-Zyklus konsequent weiterentwickelt (https://github.com/kubernetes/kubernetes).

Architektur
Ein Kubernetes-Cluster besteht aus mehreren physischen oder virtuellen Maschinen ("Nodes"), die in zwei Typen unterteilt werden: Master-Nodes, auf welchen sich die Kubernetes-Steuerungsebene befindet und Worker-Nodes, auf denen "Pods" ausgeführt werden. "Pods" sind die kleinste auf den Worker-Nodes einsetzbare Einheit und enthalten einen oder auch mehrere Container.
Bild1---Die-Komponenten--die-einen-Kubernetes-Cluster-bilden
Dies sind die Komponenten, die einen Kubernetes-Cluster bilden.

Steuerungsebene / Control-Plane
Die Steuerungsebene besteht aus mehrere Komponenten, die auf mindestens einem Master-Knoten ausgeführt werden. Um Hochverfügbarkeit zu erreichen, kann die Steuerungsebene auch auf mehrere Master-Knoten verteilt werden, von denen einer "Leader" ist und alle Aktionen ausführt.
Die Steuerungsebene besteht aus folgenden Komponenten:

  • Der Kubernetes API-Server, der von Administratoren per Befehlzeilen-Tool ("kubectl") und von den anderen Control Plane-Komponenten verwendet wird um mit dem Cluster zu kommunizieren, um Kubernetes-Objekte zu erstellen, zu untersuchen, zu ändern oder zu löschen.
  • Der Scheduler plant den Einsatz der Container - er weist bereitstellungsfähige Pods einem passenden, verfügbaren Worker-Node mit ausreichenden Ressourcen zu.
  • Der Controller Manager überwacht die einzelnen Controller, die dafür verantwortlich sind, den gewünschten Zustand im Cluster herzustellen und beizubehalten:
  • NodeController: Überwacht den Zustand der Nodes und behandelt Ausfälle von Nodes, z.B. durch Erweiterung des Clusters um zusätzlich allokierte, identische Nodes
  • EndpointController: er pflegt Endpunkte, d.h. stellt die Verbindung zwischen Services und Pods her
  • ServiceAccount- und Token-Controller: legt die Default-ServiceAccounts und Tokens bei der Erstellung von Namespaces an
  • etcd ist ein hochverfügbarer, verteilter Key-Value-Store (Datenspeicher für Schlüssel/Wert-Paare), der den Cluster-Zustand sowie Konfigurationsdetails persistent speichert.

Die Komponenten der Kontrollebene überwachen und steuern den Zustand des Clusters. Sie sorgen dafür, dass Anwendungscontainer mit der gewünschten Konfiguration auf den Worker-Nodes ausgeführt werden.

Worker-Nodes
Ein Worker-Node, auch bekannt als Minion, ist eine Maschine (VM, physischer Server,...) auf dem die Container-Workloads in Form von Pods ausführt werden. Die Überwachung und Steuerung erfolgt durch die Master-Nodes.
Folgende Komponenten werden auf den Worker-Nodes eines Kubernetes-Cluster ausgeführt:

  • Kubelet: Kubernetes-Manager auf Node-Ebene, der die Anforderungen der Control-Plane auf seinem Node umsetzt und der entkoppelt über das Container Runtime Interface (CRI) die Ausführung der Container steuert und überwacht.
  • Container-Runtime, z.B. Docker-containerd, die sämtliche Container ausführt
  • Kubernetes Service Proxy (Kube-Proxy) stellt die Kommunikation zu den Master-Nodes her und routet auch externe Zugriffe lastbalanciert auf die Service-Endpunkte im Cluster.

Modularer Aufbau
Kubernetes ist ein erweiterbares System, das an vielen Stellen durch Plugins an die jeweiligen Anforderungen bzw. Umgebungen angepasst werden kann.

  • Container Runtime Interface (CRI)
  • Container Network Interface (CNI)
  • Container Storage Interface (CSI)
  • Devices (z.B. GPUs)
  • Webhooks für Authentifizierung, Admission, API-Erweiterungen,...
  • Controllers
  • Operators
  • Scheduler
  • Custom Resource Definitions
  • ...
    Es ist ein mächtiges Ökosystem von Komponenten und Erweiterungen für Kubernetes entstanden und es wächst stetig weiter.

Erfahren Sie noch mehr zum Thema "Containerorchestrierung mit Kubernetes" in unserem vierten Teil.