Was ist Kubernetes?

Container haben die Software-Entwicklung – aber auch andere Bereiche der IT – grundlegend verändert. Software läuft mit der neuen Technik in einer speziell ausgelegten virtuellen Umgebung. Alles, was die Anwendung benötigt, befindet sich im Container und bleibt auch dort – sicher und zuverlässig. Mehrere Instanzen können so auch nebeneinander laufen.

Damit solche Container aber leicht verwaltet werden können – denn selten arbeitet man nur mit einem gleichzeitig –, bedarf es unterstützender Tools. Kubernetes (auch als „K8s“ bekannt) ist ein Werkzeug zur Container-Verwaltung, das auch mit großen Mengen an Containern umgehen kann.

Managed Kubernetes
Kubernetes als Managed Service von IONOS Cloud

Die ideale Plattform für performante und hochskalierbare Container-Anwendungen. Umfassend ins IONOS Cloud Ökosystem integriert und rund um die Uhr professionell betreut.

Kubernetes ist erst wenige Jahre alt und hat dennoch bereits jetzt einen guten Ruf. Grund dafür dürfte – zumindest auch – die Verknüpfung zum IT-Riesen Google sein. Das Unternehmen hatte das Open-Source-Projekt seinerzeit angeschoben, einige Google-Mitarbeiter haben an Kubernetes mitentwickelt; zugleich haben aber auch viele Entwickler abseits von Google an der Software gearbeitet. 2015 wurde Kubernetes schließlich in einer ersten Version veröffentlicht. Inzwischen ist das Tool mit vielen verschiedenen Cloud-Plattformen wie Azure oder AWS kompatibel und kann dort eingesetzt werden.

Das war aber zunächst gar nicht das Ziel. Ausgangspunkt von Kubernetes waren bei Google die Systeme Borg und Omega, womit intern Cluster verwaltet werden sollten. Über virtuelle Cloud-Anwendungen hatte man damals noch gar nicht nachgedacht. Dann entschied man sich allerdings, eine quelloffene Version zu veröffentlichen und somit die Entwicklung von Kubernetes zu publik zu machen.

Kubernetes ist in der von Google entwickelten Programmiersprache Go geschrieben und zielt sowohl auf den Gebrauch in der Cloud ab als auch auf den Einsatz auf lokalen Rechnern oder in On-Premises-Rechenzentren. Das Bekenntnis zur Cloud lässt sich auch am weiteren Verlauf der Entwicklung des Projekts erkennen: Inzwischen treibt Google mit einigen weiteren Unternehmen unter dem Dach der Cloud Native Computing Foundation (siehe auch: Was ist Cloud Native?) das Open-Source-Projekt weiter voran – mit der Hilfe der sehr weitreichenden Community

Fakt

Der Hersteller von Mobile Games Niantic hat Pokémon GO mithilfe von Kubernetes entwickelt. In einer interessanten Case Study kann man das Vorgehen nachlesen.

Wie funktioniert Kubernetes?

Kubernetes ist ein Container-Orchestrierungs-System. Das bedeutet: Die Software soll nicht etwa Container erstellen, sondern diese verwalten. Dafür setzt Kubernetes auf Automatisierung von Prozessen. So fällt es Entwicklern leichter, Anwendungen zu testen, zu warten oder zu veröffentlichen. Die Kubernetes-Architektur besteht aus einer klaren Hierarchie:

  • Container: Ein Container enthält Anwendungen und Software-Umgebungen.
  • Pod: Diese Einheit in der Kubernetes-Architektur versammelt Container, die für eine Anwendung zusammenarbeiten müssen.
  • Node: Einer oder mehrere Pods laufen auf einem Node, der sowohl eine virtuelle als auch eine physikalische Maschine sein kann.
  • Cluster: Mehrere Nodes werden bei Kubernetes zu einem Cluster zusammengefasst.

Zudem basiert die Kubernetes-Architektur auf dem Prinzip von Master und Slave. Als Slaves, also die kontrollierten Teile des Systems, werden die beschriebenen Nodes eingesetzt. Sie stehen unter der Verwaltung und Kontrolle des Kubernetes-Masters.

Zu den Aufgaben eines Masters gehört es zum Beispiel, Pods auf Nodes zu verteilen. Durch die ständige Überwachung kann der Master auch eingreifen, sobald ein Node ausfällt, und diesen direkt doppeln, um den Ausfall zu kompensieren. Der Ist-Zustand wird immer mit einem Soll-Zustand verglichen und bei Bedarf angepasst. Solche Vorgänge geschehen automatisch. Der Master ist aber auch der Zugriffspunkt für Administratoren. Diese können darüber die Container orchestrieren.

Master und Nodes haben jeweils einen spezifischen Aufbau.

Compute Engine
Die ideale IaaS für Ihre Workloads
  • Kostengünstige vCPUs und leistungsstarke dedizierte Cores
  • Höchste Flexibilität ohne Mindestvertragslaufzeit
  • Inklusive 24/7 Experten-Support

Kubernetes Node

Der Slave (oder auch Minion) ist ein physischer oder virtueller Server, auf dem ein oder mehrere Container aktiv sind. Auf dem Node befindet sich eine Laufzeitumgebung für die Container. Außerdem ist das sogenannte Kubelet aktiv. Hierbei handelt es sich um einen Bestandteil, der die Kommunikation zum Master ermöglicht. Die Komponente startet und stoppt zudem Container. Mit dem cAdvisor hat das Kubelet einen Dienst, der die Ressourcenauslastung aufzeichnet. Dies ist für Analysen interessant. Schließlich gibt es noch den Kube-proxy, mit dem das System Load-Balancing durchführt und Netzwerkverbindungen über TCP oder andere Protokolle ermöglicht.

Kubernetes-Master

Der Master ist ebenfalls ein Server. Um die Kontrolle und Überwachung der Nodes zu gewährleisten, läuft auf dem Master der Controller Manager. Diese Komponente wiederum hat mehrere Prozesse in sich vereint:

  • Der Node Controller überwacht die Nodes und reagiert, wenn dieser ausfällt.
  • Der Replication Controller stellt sicher, dass immer die gewünschte Zahl von Pods gleichzeitig läuft.
  • Der Endpoints Controller kümmert sich um das Endpoint-Objekt, das für die Verbindung von Services und Pods zuständig ist.
  • Service Account & Token Controller verwalten den Namespace und erstellen API-Zugriffstoken.

Neben dem Controller Manager läuft eine Datenbank namens etcd. In dieser Key-Value-Datenbank ist die Konfiguration des Clusters gespeichert, für den der Master zuständig ist. Mit der Komponente Scheduler kann der Master automatisiert die Verteilung von Pods auf Nodes übernehmen. Die Verbindung zum Node funktioniert über den im Master integrierten API-Server. Dieser stellt eine REST-Schnittstelle zur Verfügung und tauscht per JSON Informationen mit dem Cluster aus. So können z. B. auch die verschiedenen Controller auf die Nodes zugreifen.

Hinweis

Die Orchestrierung von Clustern geht auch bei IONOS. Wir bieten unterschiedliche Pakete zur individuellen Erstellung von Kubernetes-Clustern an.

Kubernetes und Docker: Konkurrenten?

Die Frage, ob man lieber Kubernetes oder Docker verwenden sollte, ist nicht zu beantworten. Denn sie stellt sich gar nicht – man benutzt die beiden Programme miteinander. Docker (oder eine andere Container-Plattform wie rkt) ist auch bei Kubernetes für das Zusammenstellen und Ausführen des Containers zuständig. Kubernetes greift auf diese Container zu und übernimmt die Orchestrierung bzw. die Automatisierung von Prozessen. Kubernetes allein kann die Erstellung von Containern nicht leisten.

Eine Konkurrenz besteht höchstens zu Docker Swarm. Dabei handelt es sich um ein Orchestrierungswerkzeug des Herstellers von Docker. Dieses Tool arbeitet ebenfalls mit Clustern und bietet ähnliche Funktionen wie Kubernetes.

Tipp

Mehr über die Unterschiede und die Kombinationsmöglichkeiten der beiden Systeme lesen Sie in unserem "Kubernetes vs. Docker" Artikel.

Kubernetes in der Praxis: Anwendung und Vorteile

In der Software-Entwicklung spielt Kubernetes inzwischen eine große Rolle – besonders bei agilen Projekten. Der Zyklus von Entwicklung, Testing und Deployment (und allen möglichen Zwischenschritten) wird durch die Container-Orchestrierung vereinfacht. Kubernetes ermöglicht es, Container einfach von einer Stufe zur anderen zu verschieben und dabei viele Arbeitsschritte zu automatisieren.

Die Skalierung ist ein wichtiger Faktor – besonders, wenn man externen Cloud-Speicher anmietet: Um Kosten zu sparen, kann Kubernetes Ressourcen perfekt ausnutzen. Statt derzeit nicht benötigte Maschinen weiterlaufen zu lassen, kann Kubernetes diese Ressourcen wieder freigeben und entweder für andere Tasks einsetzen oder einfach gar nicht benutzen, was Kosten sparen kann. Dank Autoscaling achtet Kubernetes selbstständig darauf, nicht mehr Ressourcen zu verbrauchen, als tatsächlich notwendig sind. Doch auch andersherum ist schnelle Skalierung enorm wichtig: Veröffentlicht man seine Software zum ersten Mal, ist mitunter nicht korrekt abzuschätzen, wie der Zulauf aussehen wird. Damit bei extrem hoher Nachfrage das System nicht kollabiert, kann Kubernetes schnell weitere Instanzen zur Verfügung stellen.

Der Vorteil bei Kubernetes ist auch, dass man problemlos mehrere Plattformen miteinander verknüpfen kann. So ist es z. B. möglich, die Lösung in einer Hybrid Cloud einzusetzen. Teilweise befindet sich das System dann auf eigenen lokalen Servern und teilweise in einem entfernten Rechenzentrum – also der Cloud. Diese Möglichkeit wiederum erhöht die Skalierbarkeit noch mehr: Braucht man mehr Ressourcen, können diese beim Cloud-Anbieter in der Regel schnell und unkompliziert hinzugebucht werden.

Schließlich hilft Kubernetes Entwicklern auch dabei, den Überblick zu behalten. Jeder Container ist eindeutig markiert und man erhält Auskunft über den Status jeder einzelnen Instanz. Gleichzeitig ist eine Versionskontrolle Teil von Kubernetes. Updates können also auch nachträglich nachvollzogen werden. Überhaupt ist das Veröffentlichen von Updates einer der Hauptvorteile des Systems: Neue Versionen können so ausgerollt werden, dass überhaupt keine Downtime auftritt. Dafür werden Pods nach und nach geändert statt alle auf einmal. Das gilt sowohl für die interne Testversion als auch bei der Veröffentlichung von neuen Versionen für Endnutzer.

Da Kubernetes viele Aspekte der Orchestrierung eigenständig konfiguriert, entfallen einige Fallstricke bei der Arbeit. Deshalb gilt Kubernetes allgemein als sicheres System: Es kommt eher selten zu Ausfällen, und wenn doch einmal ein Pod nicht mehr wie geplant funktioniert, hat der Kubernetes-Master direkt Kenntnis davon und kann den Ausfall ersetzen.

Tipp

Sie möchten selbst mit Kubernetes arbeiten? In unserem Kubernetes-Tutorial machen Sie die ersten Schritte mit dem Werkzeug.

War dieser Artikel hilfreich?
Page top