Container-Orchestrierung mit Kubernetes – ein Leitfaden
Anwendungen in Containern haben die Art und Weise verändert, wie Unternehmen moderne Software entwickeln. Schließlich bieten Container ein hohes Maß an Flexibilität für die Ausführung von Cloud-nativen Anwendungen, indem sie sämtliche Dienste und Komponenten einer Anwendung verpacken und kapseln und so über verschiedene Umgebungen hinweg portabel machen. Die Verwaltung von Hunderten von Containern in einer Umgebung wird jedoch schnell zu einer Herausforderung. Hier kommen Container-Orchestrierungstools ins Spiel.
Es gibt zwar verschiedene Container-Orchestrierungstools wie Docker Swarm oder Apache Mesos, jedoch hat sich Kubernetes in den letzten Jahren zu einer der beliebtesten Plattformen für die Container-Orchestrierung entwickelt. Tech-Giganten nutzen Kubernetes, um Skalierbarkeit, Portabilität, Ausfallsicherheit und eine bessere Ressourcennutzung in ihren Anwendungen zu erreichen. Der CNCF Report 2022 bestätigt die breite Akzeptanz von Kubernetes in Unternehmen weltweit. Mit Kubernetes lassen sich viele Aufgaben des Container-Managements und der Anwendungsbereitstellung automatisieren.
Dieser Artikel beschreibt die Container-Orchestrierung mit Kubernetes und vergleicht verschiedene Kubernetes-Distributionen.
Was ist Container-Orchestrierung?
Container-Orchestrierung bezeichnet einen Prozess zur Automatisierung des Lebenszyklus-Managements von Containern in großen, dynamischen Umgebungen. Sie umfasst die Bereitstellung, Implementierung, Vernetzung, Skalierung, Verfügbarkeit und das Gesundheits-Monitoring.
Eine Container-Orchestrierung hilft auch bei der Verwaltung der Kommunikation zwischen Containern und der zugrundeliegenden Infrastruktur und bietet Überwachungs- und Log-Funktionen, um sicherzustellen, dass Anwendungen reibungslos laufen.
Durch die Automatisierung der Bereitstellung und Verwaltung von containerisierten Anwendungen trägt die Container-Orchestrierung dazu bei, dass Unternehmen ihre Anwendungen in verschiedenen Umgebungen schnell ausführen und skalieren können.
Wie funktioniert Container-Orchestrierung mit Kubernetes?
Ein klassisches Kubernetes-Setup besteht aus einem Master Node für die zentrale Steuerung und Verwaltung, Worker Nodes für die Ausführung von Containern, einem Netzwerk für die Kommunikation zwischen Nodes und Pods, einer Container-Runtime und der Kubernetes-API. Die Kubernetes-API ist das entscheidende Herzstück des Kubernetes-Ökosystems. Sie ermöglicht die Kommunikation zwischen den verschiedenen Komponenten und erlaubt es den Anwendern, ihre containerisierten Anwendungen zu definieren, zu verwalten und zu steuern. Die Kubernetes-API erleichtert die Erweiterbarkeit und Integration mit externen Tools, wodurch die gesamte Kubernetes-Plattform robuster, anpassungsfähiger und für verschiedene Anwendungsfälle geeignet wird.
Kubernetes hat als Orchestrierungsplattform den großen Vorteil, dass es die Verwaltung einer großen Menge an Containern ermöglicht. Der Funktionsumfang beinhaltet das automatische Überwachen, Ausrollen, Fixen, Kopieren und Migrieren von Containern. Wenn Sie mehr über die Architektur von Kubernetes und seine wichtigsten Objekte erfahren wollen, lesen Sie unseren Blogartikel „Was ist Kubernetes?“.
Was sind Kubernetes-Distributionen
Bei einer Kubernetes-Distribution handelt es sich um ein vorkonfiguriertes Paket für Kubernetes, das von kommerziellen Anbietern oder Open-Source-Communitys bereitgestellt wird. Kubernetes-Distributionen zielen darauf ab, die Konfiguration und Verwaltung von Kubernetes in Produktionsumgebungen zu vereinfachen.
Während man das ursprüngliche Kubernetes (Vanilla) selbstständig konfigurieren und bereitstellen muss – und somit eine entsprechende Expertise benötigt – liefern Kubernetes-Distributionen neben den Kernelementen eine Reihe von zusätzlichen Komponenten und Funktionen, die die Implementierung, Skalierung und Wartung von Kubernetes erleichtern.
Sie ermöglichen unter anderem häufig eine benutzerfreundliche Einrichtung von Kubernetes-Clustern auf den verschiedenen Cloud-Plattformen oder Bare-Metal-Servern. Zu den zusätzlichen Funktionen und Komponenten von Distributionen gehören unter anderem Ingress-Controller, CNI-Plugins (Container Network Interface), PersistantVolume-Ressourcen, aber auch Integrationen mit anderen Tools wie beispielsweise Monitoring-Lösungen oder Log-Analyse-Plattformen.
Gleichzeitig verfügen zahlreiche Distributionen über Sicherheits- und Compliance-Funktionen, um den Schutz des Clusters zu erhöhen, sowie über Wartungsmechanismen, etwa um die Aktualisierung auf neue Kubernetes-Versionen zu vereinfachen.
Welche Arten von Kubernetes-Distributionen gibt es?
Darüber hinaus gibt es verschiedene Arten von Kubernetes-Distributionen. Je nach Ausrichtung, Einsatzzweck und Funktionsumfang unterscheiden sich diese. So lassen sich einige Kubernetes-Distributionen On-Premises hosten, in der Cloud betreiben oder als Cloud-Service beziehen. Ferner unterscheidet sich der Grad der Selbstverwaltung der einzelnen Kubernetes-Distributionen.
Bei selbstverwaltetem Kubernetes (self-managed Kubernetes) ist der Nutzer für den Betrieb des Clusters, die Verwaltung des Betriebssystems auf den Nodes, Software-Upgrades, Backups und andere Wartungsaufgaben verantwortlich. Benutzer:innen haben jedoch die volle Kontrolle über den Cluster und seine Konfiguration, sodass sie den Cluster nach den jeweiligen Bedürfnissen optimieren können.
Bei managed Kubernetes wartet ein Cloud-Anbieter oder Dienstleister die Cluster-Infrastruktur und führt Upgrades, Backups und andere Wartungsaufgaben durch. Nutzer:innen sind nur noch für die Kubernetes-Anwendungen verantwortlich. Sie haben somit nur begrenzte Kontrolle über die Cluster. Die Anbieter bieten außerdem in der Regel einen gewissen Support für ihre gemanagten Kubernetes-Dienste an.
Zusammenfassend lässt sich sagen, dass eine selbstverwaltete Kubernetes-Distribution mehr Kontrolle und Anpassungsmöglichkeiten bietet, gleichzeitig jedoch mehr Fachwissen und Aufwand bei der Einrichtung und Wartung erfordert. Ein verwaltetes Kubernetes bietet im Gegenzug zwar weniger Kontrolle, punktet jedoch wiederum mit mehr Support und Benutzerfreundlichkeit.
Vorteile einer selbstverwalteten Kubernetes-Umgebung
Die Vorteile einer self-managed Kubernetes-Distribution sind:
Kontrolle: Anwender:innen haben die volle Kontrolle über Ihren Cluster und können alles so konfigurieren, wie sie es benötigen. Compliance- und regulatorische Anforderungen erfordern beispielsweise oft den Einsatz einer eigenen Infrastruktur anstelle einer Infrastruktur in der Public Cloud.
Anpassbarkeit/Flexibilität: Ein selbstverwaltetes Kubernetes bietet mehr Flexibilität bei der Einrichtung, Bereitstellung und Verwaltung des Clusters. Der Cluster lässt sich zudem an die jeweiligen Bedürfnisse anpassen, etwa indem man Hardware-, Netzwerk- und Speicherlösungen selbst auswählt.
Kostenkontrolle: Dank der großen Flexibilität bietet eine selbstverwaltete Kubernetes-Umgebung zahlreiche Möglichkeiten zur Kostenkontrolle. Die Wahlfreiheit erlaubt es Unternehmen, für ihre Kubernetes-Cluster erschwingliche Infrastruktur- und Rechenressourcen von Cloud-Anbietern oder lokalen Rechenzentren zu beziehen sowie ihre Kubernetes-Deployments individuell anzupassen, um etwa Kosten für Lizenzen zu senken.
Überlegungen zum Einsatz von self-managed Kubernetes
Eine selbstverwaltete Kubernetes-Umgebung bietet einerseits mehr Flexibilität und Anpassungsfähigkeit, erfordert andererseits jedoch spezielle Kenntnisse in den Bereichen Kubernetes-Administration, Infrastruktur und Sicherheit sowie erhebliche Investitionen in Ressourcen und Wartung.
DevOps-Ingenieure müssen den Cluster regelmäßig warten und aktualisieren, und Unternehmen müssen sicherstellen, dass sie über ausreichende Ressourcen verfügen, um Arbeitslasten zu bewältigen und den Cluster zu skalieren. Die Wartung eines selbstverwalteten Kubernetes-Clusters erfordert regelmäßige Überwachung, Fehlerbehebung und Datensicherung, um die Ausfallsicherheit der Daten zu gewährleisten.
Trotz des größeren Aufwands kann ein selbstverwaltetes Kubernetes jedoch für Unternehmen interessant sein, die spezielle Anforderungen haben, die nicht von einem gemanagten Kubernetes-Dienst abgedeckt sind.
Vorteile von Managed Kubernetes
Verwaltete Kubernetes-Dienste bietet ebenfalls eine Reihe von Vorteilen:
Fokus auf Geschäftsfunktionen: Managed Kubernetes abstrahiert die Komplexität der Verwaltung von Infrastruktur, Netzwerk und Storage. Für Entwicklerteams fällt die Verwaltung der zugrundeliegenden Infrastruktur weg, sodass sie sich auf die Entwicklung von Anwendungen konzentrieren können. Durch die schnellere Entwicklung und Bereitstellung lässt sich unter anderem die Markteinführungszeit und die Entwicklungskosten reduzieren.
Einfachere Wartung: Mit Managed Kubernetes Services müssen sich Unternehmen nicht mehr um die Verwaltung und Wartung des Kubernetes-Clusters kümmern. Der Cloud-Anbieter oder ein Dienstleister kümmert sich stattdessen um die Bereitstellung, Konfiguration, Verwaltung, Upgrades, Patches und Skalierbarkeit der Infrastruktur. So können sich Unternehmen auf die schnellere Entwicklung und Bereitstellung ihrer Anwendungen konzentrieren.
Skalierbarkeit und Zuverlässigkeit: Managed-Kubernetes-Lösungen bieten automatische Skalierung, Hochverfügbarkeit und attraktive Service Level Agreements (SLAs), die Ihre Anwendung zuverlässiger und skalierbarer machen.
Integration mit anderen Diensten: Managed-Kubernetes-Dienste bieten eine starke Integration mit anderen Services des (Cloud-)Anbieters an. Einige Beispiele sind CI/CD-Pipelines, Datenbanken, Monitoring-Tools usw.
Überlegungen zum Einsatz von Managed-Kubernetes-Diensten
Die Einführung eines verwalteten Kubernetes-Services kann erhebliche Vorteile für ein Unternehmen bringen. Gleichzeitig erfordert es jedoch eine gründliche Planung und Vorbereitung, um eine reibungslose Einführung zu ermöglichen und sicherzustellen, dass die Geschäftsanforderungen erfüllt werden.
Unternehmen mit strengen Compliance-Standards haben möglicherweise Bedenken über die Sicherheits- und Compliance-Zertifizierungen der Cloud-Anbieter. Die Entscheidung für ein durch einen Cloud-Dienstleister verwaltetes Kubernetes kann außerdem die Bindung an einen Anbieter und sein Ökosytem bedeuten, da durch die enge Verzahnung der Services Möglichkeiten für einen Anbieterwechsel oder Multi-Cloud-Ansätzen limitiert sind. Darüber hinaus kann die fehlende Kontrolle über die Master Nodes für Unternehmen, die mehr Anpassung oder Kontrolle benötigen, problematisch sein.
Die richtige Kubernetes-Distribution finden
Bei der Auswahl der richtigen Kubernetes-Distribution für Ihr Unternehmen spielen viele Faktoren eine Rolle, die zudem an die individuellen Anforderungen angepasst sein müssen.
Identifizieren Sie Ihren Anwendungsfall
Der erste Schritt bei der Auswahl eines Kubernetes-Orchestrierungstools ist die Identifizierung der Geschäftsanforderungen oder des Anwendungsfalls durch das Unternehmen. Folgende Faktoren können dabei helfen:
Art der Anwendung: Soll die Anwendung in einer Hybrid- oder Multi-Cloud laufen? Wird eine bestimmte Integration benötigt? GKE eignet sich beispielsweise für KI-intensive Anwendungen, da es eine starke Integration mit TensorFlow und TPUs bietet.
Skalierbarkeit: Welche Skalierungsmöglichkeiten benötigen das Unternehmen für seine Anwendungen? Gemanagte Kubernetes-Lösungen eines Cloud-Anbieters punkten besonders mit ihren integrierten Skalierungsmöglichkeiten. Bei der Skalierung können sich die verschiedenen Kubernetes-Distributionen deutlich unterscheiden. Einige Distributionen bieten beispielsweise – basieren auf den Anforderungen des Clusters – eine effiziente, automatisierte Skalierung von Knoten, während andere dies nicht tun.
Ressourcen-Anforderungen: Gibt es spezielle Ressourcen-Anforderungen im Unternehmen, wie hohe CPU, hohe I/O etc.?
Verfügbarkeit: Werden integrierte Hochverfügbarkeit oder Fehlertoleranz benötigt?
Ist das Tool mit der vorhandenen Infrastruktur kompatibel?
Im nächsten Schritt muss das Unternehmen überprüfen, ob das Tool mit der bestehenden Infrastruktur und den eingesetzten Anwendungen kompatibel ist. Dazu sollte das Tool:
- mit den vorhandenen Betriebssystemen kompatibel sein,
- zum vorhandenen Virtualisierungs- oder Containerisierungsmodell passen,
- bestehende Integrationen unterstützen und
- kompatibel mit der Netzwerkinfrastruktur sein.
Benutzerfreundlichkeit
Zur Evaluierung gehört unter anderem die Beantwortung der Frage, wie einfach es ist, mit der gewünschten Lösung zu arbeiten. Einige wichtige Fragen in diesem Zusammenhang sind:
- Erfordert das Tool eine lange Einarbeitungszeit?
- Ist die Benutzeroberfläche der Distribution benutzerfreundlich?
- Erfordert die Einrichtung und Wartung viel Aufwand und Fachwissen?
- Unterstützt die Lösung die Automatisierung verschiedener Aufgaben?
Support
Der Support ist ein weiterer wichtiger Faktor bei der Auswahl der richtigen Kubernetes-Distribution. Wichtige Punkte hierbei sind:
- Unterstützt das Tool automatische Software-Updates?
- Bietet das Tool SLA-basierten Support?
- Bietet das Tool technischen Support rund um die Uhr?
- Wie viel Community-Support steht zur Verfügung?
Kosten
Weitere Aspekte hängen mit den Kosten zusammen. Unternehmen sollten bei der bevorzugten Kubernetes-Lösung folgende Dinge berücksichtigen:
- Lizenzkosten für das Tool,
- Kosten für die Schulung des Personals,
- Infrastrukturkosten sowie
- Cloud-Kosten, die mit dem Tool verbunden sind.
Bei der Evaluierung der richtigen Kubernetes-Plattform gibt es mit dem Monitoring der Kubernetes-Infrastruktur einen weiteren Punkt, den man nicht ignorieren sollte. Ohne ein Monitoring erhält man nur rudimentäre oder limitierte Einblicke über den Zustand der Kubernetes-Cluster sowie deren Ressourcen-Auslastung. Der Artikel wird daher im folgenden noch einmal detaillierter auf diesen Aspekt eingehen.
Warum Kubernetes überwachen?
Die Überwachung einer Kubernetes-Infrastruktur ist unerlässlich, um Probleme sofort erkennen und beheben zu können. Kubernetes ist eine komplexe Lösung mit vielen Komponenten und Diensten, die gleichzeitig arbeiten. Die Fehlfunktion eines einzigen Dienstes oder einer Komponente kann eine Anwendung zum Stillstand bringen.
Dabei ist außerdem zu berücksichtigen, dass es für Kubernetes keine integrierte Monitoring-Lösungen mit Enterprise-Funktionalität gibt, sodass man die Standardinstallation von Kubernetes um zusätzliche Überwachungssoftware erweitern muss.
Anders verhält es sich mit gemanagten Kubernetes-Diensten, die über durch den jeweiligen Cloud-Anbieter bereitgestellte Monitoring-Tools verfügen. Diese beschränken sich jedoch auf die Cloud-Umgebung des Providers.
Aus diesem Grund ist es eine sinnvolle Option, die Monitoring-Lösung eines Drittanbieters zu nutzen, die sich einerseits auf dem Cluster betreiben lässt und andererseits über Umgebungen und Anbieter hinweg portabel ist.
Eine solche Kubernetes-Monitoring-Lösung ist Checkmk. Checkmk überwacht nicht nur die Ressourcen-Auslastung und den allgemeinen Zustand sämtlicher Kubernetes-Objekte, sondern bietet gleichzeitig Echtzeit-Einblicke in die Cluster-Performance. Dank der intuitiven, miteinander vernetzten Kubernetes-Dashboard ist die Analyse der Kubernetes-Umgebung von Cluster- bis hinunter auf Pod-Level mit wenigen Klicks möglich.
Mit einem richtigen Monitoring lassen sich Kostenoptimierung, Sicherheit auf allen Ebenen, Leistungsoptimierung usw. erreichen. Die Implementierung eines proaktiven Monitoring-Ansatzes ist hierfür jedoch entscheidend.
Beim Monitoring von Kubernetes, sollte man unter anderem folgende Metriken im Auge behalten:
- CPU-, IO- und Speicherverbrauch der verschiedenen Prozesse,
- Prozesse, die in laufenden Containern ausgeführt werden,
- Neustarts von Containern,
- Spitzen in der CPU- oder Speichernutzung eines oder mehrerer Container,
- Containergröße und Output anderer Container.
Fazit
In diesem Artikel wurden verschiedene Arten von Kubernetes-Distributionen besprochen, darunter Vanilla, Managed und Self-Managed Kubernetes. Wir haben die Vor- und Nachteile jeder Option sowie die Anwendungsfälle für jede Distributionsart diskutiert. Bei der Auswahl der richtigen Kubernetes-Lösung spielen verschiedene Faktoren eine Rolle, wie z.B. Anwendungstyp, Skalierbarkeit, Ressourcen und Verfügbarkeitsanforderungen.
Vanilla Kubernetes ist die “reine”, nicht modifizierte Version von Kubernetes aus dem Open-Source-Projekt. Es ermöglicht die vollständige Kontrolle und somit größtmögliche Flexibilität bezüglich der individuellen Anpassung von Kubernetes. Dies setzt jedoch ein tiefes Wissen über Kubernetes und seine Komponenten voraus, sodass sich Vanilla hauptsächlich für erfahrene DevOps-Teams beziehungsweise am besten für technisch versierte Personen und Organisationen geeignet.
Managed-Kubernetes-Distributionen sind von Cloud-Anbietern oder spezialisierten Dienstleistern vorkonfigurierte und verwaltete Versionen von Kubernetes, wie AKS, EKS oder GKE. Dabei übernehmen die Provider die Bereitstellung, Wartung und Skalierung der Kubernetes-Cluster. Dadurch können sich beispielsweise Entwickler-Teams auf die Entwicklung von Anwendungen konzentrieren, da ihnen die Verwaltung der Infrastruktur abgenommen wird.
Bei einem selbstverwalteten Kubernetes liegt die Verantwortung für die Bereitstellung, Konfiguration, Wartung und Verwaltung des Kubernetes-Clusters beim Unternehmen selbst. Es setzt also ebenfalls Fachkenntnisse und entsprechende Ressourcen voraus, bietet aber die meisten Anpassungsmöglichkeiten. Daher eignet sich eine selbstverwaltete Kubernetes-Distribution für Unternehmen mit Kubernetes-Know-how und einer entsprechenden Infrastruktur.
Unabhängig vom Kubernetes-Typ erfordert die Kubernetes-Orchestrierung eine proaktive Überwachung der Cluster und ihrer Komponenten. Monitoring-Lösungen wie Checkmk können eine umfassende Kubernetes-Überwachung mit aussagekräftigen Dashboards, Echtzeitwarnungen und wertvollen Einblicken in den Zustand der Kubernetes-Umgebung bieten und so bei der Verwaltung unterstützen.