© gudron/shutterstock.com
Was ist Kubernetes?

Einführung in Kubernetes


Als vor knapp fünf Jahren Docker auf den Markt kam, dachten viele noch an einen neuen Hype, der schnell wieder in den Tiefen des Internets verschwindet. Mittlerweile hat Docker jedoch seinen fünften Geburtstag gefeiert und die IT-Landschaft grundlegend verändert. Docker ist nicht mehr wegzudenken und genießt eine immer größer werdende Beliebtheit. Enormen Einfluss auf diesen Erfolg hatte von Anfang an unter anderem Google, das mit Kubernetes ein Open-Source-Projekt zur Administration mehrerer Docker-Container veröffentlicht hat. Wir möchten in diesem Artikel einen Überblick über Docker und Kubernetes geben und so ein Grundverständnis der Funktionalitäten schaffen.

Video: Kubernetes Patterns

Das Konzept der Container existiert seit über einem Jahrzehnt und wurde bereits in vielen bekannten Unix-basierten Betriebssystemen wie zum Beispiel Linux, Solaris oder FreeBSD eingesetzt. Jedoch war es erst Docker, das die Containertechnologie für Entwickler und den IT-Betrieb im täglichen Umgang zugänglich und handhabbar gemacht hat. Docker bewies die Portabilität und Skalierbarkeit von Anwendungen, weshalb immer mehr Entwickler und der IT-Betrieb dazu übergingen, die Container für das Bauen von Software und Auflösen von Abhängigkeiten zu verwenden. Auch in DevOps-Prozessen spielen Container eine entscheidende Rolle. Sie sind zu einem integralen Bestandteil automatisierter Software-Builds und der kontinuierlichen Integration und Bereitstellung (Continuous Integration/Continuous Delivery) von Pipelines geworden.

Während man in kleinen Infrastrukturen ohne Probleme das Lifecycle-Management der Container manuell handhaben kann, verliert man in verteilten Rechenzentren mit hunderten Containern schnell den Überblick. Das Verwalten vieler unterschiedlicher Container in Entwicklungs- und Produktionsumgebungen mit unterschiedlichen Netzwerk- und Festplattenanforderungen erforderte eine Lösung. Eine der bekanntesten Lösungen ist Kubernetes. Kubernetes ist ein Open-Source-System für das automatische Deployment, Skalieren und Verwalten von containerisierten Anwendungen. So ist Kubernetes auf seiner eigenenWebseite beschrieben. Urheber von Kubernetes ist Google, das Kubernetes als ein Google-Infrastructure-for-Everybody-Else-(GIFEE-)Projekt vollständig Open Source auf GitHub zur Verfügung gestellt hat. Neben Google als initialem und Hauptbeitragendem lebt das Projekt von vielen individuellen Entwicklern sowie beitragenden Firmen wie zum Beispiel Red Hat, Microsoft, NTT DATA oder Docker selbst. Kubernetes, auch bekannt unter dem Kürzel „k8s“, entstand nicht plötzlich aus dem Nichts. Google arbeitete bereits seit fünfzehn Jahren an einer Plattform zur Verwaltung von Containern. Damals hieß das Projekt noch „Borg“, wurde dann zu „Omega“ umbenannt und ist schließlich als Open-Source-Lösung unter dem Namen „Kubernetes“ erschienen.

Architektur

Master: Wie fast alle verteilten IT-Plattformen besteht auch Kubernetes aus mindestens einem Master und mehreren Nodes. Es ist möglich, beide Komponenten auf einem einzelnen System zu betreiben. Das wird unter anderem bei Minikube, einer lokalen Testumgebung, basierend auf VirtualBox, so zur Verfügung gestellt. Der Master verwaltet und veröffentlicht die Schnittstelle (API), über die er angesteuert werden kann, und überwacht den Zustand des vollständigen Clusters. Darüber hinaus plant und steuert der Master auch das Deployment auf den jeweiligen Nodes. Der Master kann zum Beispiel aus Gründen der Hochverfügbarkeit auch auf mehreren Systemen betrieben und hinter einen Load Balancer, der in Kubernetes integriert ist, gesetzt werden. Der Master definiert sich durch folgende drei Komponenten:

  • Der API-Server ist die zentrale Anlaufstelle für alle Befehle des gesamten Clusters und erlaubt dem Administrator die Konfiguration der einzelnen Kubernetes-Objekte. Der API-Server überwacht außerdem die Konsistenz zwischen den Parametern in etcd und den bereitgestellten Containern. Mit anderen Worten validiert und konfiguriert der API-Server die Daten der Pods, Services und ReplicaSets. Er weist Pods den einzelnen Nodes zu und synchronisiert die Pod-Information mit der Service-Konfiguration.

  • Der Service Controller Manager verarbeitet die in den jeweiligen Replikationsaufgaben definierten Replikationsprozesse. Die dazu benötigten Informationen werden in der etcd festgehalten, die durch den Controller Manager auf Änderungen hin überwacht wird. Bei einer Änderung liest der Controller Manager die Informationen aus der Datenbank und führt die nötigen Schritte aus, um den gewünschten Zustand zu erreichen, zum Beispiel das Skalieren eines ReplicaSet oder das Löschen eines Pods. Auch der Controller Manager bedient sich hierbei des API.

  • Der Scheduler organisiert innerhalb des Clusters die Lastverteilung auf einzelne Nodes. Das erreicht er, indem er die aktuellen Anforderungen erfasst, den aktuellen Zustand aller Nodes analysiert und schließlich die Last auf einen oder mehrere Nodes neu verteilt.

Jeder einzelne Node beinhaltet jeweils die Container-Runtime Docker, einen Agenten, der mit dem Master kommuniziert, sowie weitere grundlegende Komponenten, die unter anderem für das Monitoring, Logging und die Service Discovery zuständig sind. An dieser Stelle sei erwähnt, dass es natürlich auch möglich ist, statt Docker zum Beispiel rkt auf einem Node zu verwenden.

kubectl ist ein Kommandozeilenprogramm, das für alle gängigen Betriebssysteme zur Verfügung steht. Es wird für die Kommunikation mit dem Kubernetes-API-Server benötigt. Darüber lassen sich alle verfügbaren Befehle des API-Servers ausführen, wie zum Beispiel das Hinzufügen und Löschen von Pods, ReplicaSets oder Services. Außerdem kann man darüber auch auf die Logdateien zugreifen und den generellen Zustand des Kubernetes-Clusters überprüfen.

etcd ist eine verteilte Schlüssel-Wert-Datenbank von CoreOS, die als Single Source of Truth (SSOT) für alle Objekte innerhalb des Kubernetes-Clusters zur Verfügung steht. Diese Datenbank dient als Abstraktion zwischen den einzelnen Anwendungen und der eigentlichen Infrastruktur. Primär wird dieser Speicher durch den Master verwendet, um unterschiedliche Informationen zu den Nodes, Pods und den darin befindlichen Containern zu erhalten.

Nodes, auch Worker Nodes genannt, dienen nicht nur dem Master als Kommunikationspartner, sie dienen vielmehr den einzelnen Containern und stellen diesen CPU-, Arbeitsspeicher-, Netzwerk- und Festplattenressourcen zur Verfügung. Ein Node kann ein dediziertes System in einem Rechenzentrum, aber auch eine virtuelle Maschine (VM) bei einem Cloud-Provider sein. Auch das Mischen von virtuellen Maschinen und dedizierten Systemen über mehrere Rechenzentren hinweg ist innerhalb eines Clusters möglich. Auf einem Node sind für gewöhnlich folgende Dienste zu finden:

  • Der Dienst kubelet, der den API-Dienst des Masters überwacht und sicherstellt, dass sich alle auf dem Node befindlichen Container im gewünschten Zustand befinden.

  • Der Dienst kube-proxy dient den auf dem Node befindlichen Pods als einfacher Load Balancer und Netzwerk-Proxy.

Ein Pod besteht aus einem oder mehreren Containern. Pods stellen eine logische Gruppe für Container dar und stellen den einzelnen Containern die zugeteilten Ressourcen zur Verfügung. Dies ermöglicht, mehrere voneinander abhängige Container gemeinsam lauffähig zu halten. Pods können mittels ReplicaSets während der Laufzeit skaliert, also in ihrer Anzahl vergrößert oder verkleinert, werden. Pods sind die kleinste deploybare Einheit. Dabei wird die Konfiguration der einzelnen Kubernetes-Objekte über den Master abgewickelt. Dieser entscheidet anhand der konfigur...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang