Kubernetes (Software)

Was ist Kubernetes?

Kubernetes (im Allgemeinen als “K8s” bezeichnet) ist ein Open-Source-Container-Orchestrierungssystem zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Ursprünglich wurde es von Google entwickelt und wird jetzt von der Cloud Native Computing Foundation verwaltet.

Ziel

Ziel ist es, eine Plattform für die Automatisierung der Bereitstellung, Skalierung und des Betriebs von Anwendungs-Containern über Host-Cluster bereitzustellen. Seit seiner ersten Veröffentlichung funktioniert Kubernetes mit einer Reihe von entsprechenden Container-Tools, einschließlich Docker.

Entstehung

Der Begriff Kubernetes stammt aus dem Griechischen und bedeutet so viel wie “Kapitän” oder “Steuermann” und wurde von den Herren Joe Beda, Craig McLuckie und Brendan Burns gegründet, denen rasch andere Google-Ingenieure, darunter auch Brian Grant und Tim Hockin, folgten und wurde erstmals von Google im Jahr 2014 angekündigt. Seine Entwicklung und sein Design sind stark von Googles Borg-System und vielen der Hauptakteure des Projekts, das zuvor mit Borgs gearbeitet hat, beeinflusst. Der ursprüngliche Codename für Kubernetes in Google war Projekt Seven, ein Verweis auf die Star Trek-Figur von Seven of Nine, die ein “freundlicherer” Borg ist. Die sieben Speichen auf dem Rad des Kubernetes-Logo sind eine Anspielung auf diesen Codenamen.

Kubernetes Version 1.0 wurde am 21.07.2015 veröffentlicht. Neben der Veröffentlichung gründete Google mit der Linux Foundation die Cloud Native Computing Foundation (CNCF) und bot K8s als Seed-Technologie an. Am 06.03.2018 erreichte K8s Projekt bei GitHub den neunten Platz und bei Autoren und Ausgaben den zweiten Platz beim Linux-Kernel.

Design

Kubernetes definiert eine Reihe von Bausteinen, sogenannte Grundelemente, die gemeinsam Mechanismen bereitstellen, mit denen Anwendungen basierend auf CPU, Arbeitsspeicher oder benutzerdefinierter Metriken bereitgestellt, verwaltet und skaliert werden. Es ist lose gekoppelt und erweiterbar, um unterschiedliche Workloads zu bewältigen. Diese Erweiterung wird zu einem großen Teil von der Kubernetes-API bereitgestellt, die sowohl von internen Komponenten als auch von Containern verwendet wird, die auf K8s laufen.

Pods

Die grundlegende Planungseinheit ist eine Pod. Es fügt eine höhere Abstraktionsebene hinzu, indem Container-Komponenten gruppiert werden. Ein Pod besteht aus einem oder mehreren Containern, die sich garantiert auf dem Host-Computer befinden und Ressourcen gemeinsam nutzen können.

Jedem Pod wird innerhalb des Clusters eine eindeutige Pod-IP-Adresse zugewiesen, sodass Anwendungen Ports ohne Konfliktrisiko verwenden können. Innerhalb des Pods können sich alle Container auf Localhost (definierter Domainname einer virtuellen IP-Adresse per Internetstandard) gegenseitig referenzieren. Ein Container innerhalb eines Pods hat jedoch keine Möglichkeit, einen anderen Container innerhalb eines anderen Pods direkt anzusprechen. Dazu muss die IP-Adresse des Pods verwendet werden.

Ein Anwendungsentwickler sollte jedoch niemals die IP-Adresse des Pods verwenden, um eine Funktion in einem anderen Pod zu referenzieren oder aufzurufen, da die IP-Adressen des Pods kurzlebig sind. Dem Pod, auf den er sich bezieht, kann beim Neustart eine andere Pod-IP-Adresse zugwiesen werden. Stattdessen sollten sie einen Verweis auf einen Dienst verwenden, der einen verweis auf den Ziel-Pod an der spezifischen Pod-IP-Adresse enthält.

Ein Pod kann einen Speicher definieren, z. B. ein lokales Festplattenverzeichnis oder eine Netzwerkfestplatte und es den Containern im Pod zur Verfügung stellen. Pods können manuell über die Kubernetes-API verwaltet werden oder ihre Verwaltung an einen Controller delegieren. Diese Datenträger sind auch die Basis für die Funktionen von ConfigMaps (um Zugriff auf die Konfiguration über das für den Container sichtbare Dateisystem zu gewähren) und Secrets (um Zugriff auf Anmeldeinformationen zu gewähren, die für den sicheren Zugriff auf Remote-Ressourcen erforderlich sind, indem diese Anmeldeinformationen nur im Dateisystem angezeigt werden).

Labels und Selektoren

Mit Kubernetes können Clients (Benutzer oder interne Komponenten) Schlüsselwertpaare, sogenannte “Labels”, an jedes API-Objekt im System (z. B. Pods und Knoten) anhängen. Entsprechend sind “Label-Selektoren” Abfragen gegen Labels, die zu übereinstimmenden Objekten aufgelöst werden. Wenn ein Service definiert ist, können die Label-Selektoren festgesetzt werden, die vom Service-Router oder Load-Balancer verwendet werden, um die Pod-Instanzen auszuwählen, zu denen der Datenverkehr geleitet wird.

Durch einfaches Wechseln der Labels der Pods oder ändern der Label-Selektoren des Dienstes, kann gesteuert werden, welche Pods den Verkehr erhalten und welche nicht. Dies kann zur Unterstützung verschiedener Bereitstellungsmuster wie blau-grüner Bereitstellungen oder AB-Tests verwendet werden. Diese Fähigkeit, dynamisch zu steuern, wie Dienste Implementierungs-Ressourcen nutzen, sorgt für eine lose Kopplung innerhalb der Infrastruktur.

Controller

Ein Controller ist eine Abgleichschleife, die den tatsächlichen Clusterstatus auf den gewünschten Clusterstatus ausrichtet. Dies geschieht durch die Verwaltung einer Reihe von Pods. Eine Art von Controller ist ein Replikationscontroller, der die Replikation und Skalierung durch das Ausführen einer angegebenen Anzahl von Kopien eines Pods im gesamten Cluster übernimmt. Er behandelt auch das Erstellen von Ersatz-Pods, wenn der zugrunde liegende Knoten ausfällt.

Andere Controller, die Teil des Kern-Kubernetes-Systems sind, umfassen einen “DaemonSet-Controller” zum genauen Ausführen eines Pods auf jeder Maschine (oder einer Teilmenge von Maschinen) und einen “Job-Controller” zum Ausführen von Pods, die zum Abschluss laufen, z. B. als Teil eines Batch-Jobs. Die von einem Controller verwalteten Pods werden von Label-Selektoren bestimmt, die Teil der Controller-Definition sind.

Services

Ein Kubernetes-Dienst besteht aus einer Gruppe von Pods, die zusammenarbeiten, z. B. eine Schicht einer mehrschichtigen Anwendung. Die Gruppe von Pods, die einen Dienst ausmachen, wird durch einen Etikettenwähler definiert. K8s bietet zwei Arten der Dienstermittlung, indem Umgebungsvariablen oder K8s-DNS verwendet werden. Die Dienstermittlung weist dem Dienst eine stabile IP-Adresse und einen DNS-Namen zu und verteilt den Netzwerkverkehr dieser IP-Adresse auf eine Round-Robin-Art zwischen den Pods, die mit dem Selektor übereinstimmen (selbst wenn Fehler dazu führen, dass sich die Pods von Maschine zu Maschine bewegen).

Standardmäßig wird ein Dienst innerhalb eines Clusters verfügbar gemacht (z. B. können Back-End-Pods in einem Dienst gruppiert werden, wobei die Anforderungen der Frond-End-Pods zwischen ihnen ausgeglichen werden). Ein Dienst kann jedoch auch außerhalb eines Clusters (z. B. für Clients) bereitgestellt werden, um Front-End-Pods zu erreichen.

Kubernetes Cloud Services

Kubernetes wird als Dienst für mehrere öffentliche Clouds angeboten, einschließlich Amazon Web Services, Microsoft Azure, DigitalOcean und Google Kubernetes Engine in der Google Cloud-Plattform, IBM Cloud, Alibaba Cloud und Mail.Ru Cloud Solutions.

Architektur

Kubernetes folgt der Master-Slave-Architektur. Die Komponenten von K8s können in diejenigen unterteilt werden, die einen einzelnen Knoten verwalten und solche, die Teil der Steuerebene sind.

Der K8s Master ist die Hauptsteuereinheit des Clusters. Er verwaltet seine Arbeitslast und leitet die Kommunikation über das System. Die K8s-Steuerebene besteht aus verschiedenen Komponenten, von denen jede einen eigenen Prozess hat, der sowohl auf einem einzigen Master-Knoten als auch auf mehreren Master ausgeführt werden kann, die Hochverfügbarkeits-Cluster unterstützen.

Der Knoten, auch Worker oder Minion genannt, ist eine Maschine, auf der Container (Workloads) bereitgestellt werden. Jeder Knoten im Cluster muss eine Containerlaufzeit wie Docker sowie entsprechende Komponenten ausführen, um mit dem Master für die Netzwerkkonfiguration dieser Container zu kommunizieren.


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte