Ein Ansatz, der in vielen Projekten immer mehr an Bedeutung gewinnt, ist die Verwendung von Kubernetes als Bereitstellungsziel. Kubernetes bietet eine Vielzahl von Vorteilen und Anwendungsfällen, die es zu einer äußerst attraktiven Option machen. mgm nutzt Kubernetes bereits erfolgreich in einigen Projekten für effizientes Software-Deployment.

Kurz & knapp

  • Kubernetes bietet eine einheitliche Plattform für die Verwaltung von der Umgebungszugriffssteuerung über die Protokollierung bis hin zur Metrikerfassung.
  • Es gibt verschiedene Anwendungsfälle für Kubernetes, darunter die Vereinheitlichung der API für die Bereitstellung der Software.
  • Angesichts der Vielzahl von Werkzeugen und Optionen im Kubernetes-Ökosystem ist es wichtig, eine fundierte Entscheidung zu treffen, z. B. mit der Landschaftsübersicht der Cloud Native Computing Foundation (CNCF) oder mit den Tools, die mgm bereits erfolgreich einsetzt.

Kubernetes bietet eine alternative Methode zur herkömmlichen Softwarebereitstellung. Anstatt Software direkt auf einem Betriebssystem zu installieren, wird sie in Containern verpackt und unabhängig von anderen Workloads auf einem Betriebssystemkern ausgeführt. Diese Container-Images enthalten alle notwendigen Bibliotheksabhängigkeiten, was zu einer einfacheren und stabileren Bereitstellung führt.

Softwarebereitstellung: traditionell vs. Kubernetes

Im Vergleich zu virtuellen Maschinen (VMs) bieten Container, die von Kubernetes verwaltet werden, mehr Flexibilität und Skalierbarkeit. VMs erfordern komplexe APIs und haben feste Hardware-Ressourcen, während Kubernetes APIs auf den Host auslagert und eine abstrakte Sicht auf die Ressourcen bietet.

Container bieten gegenüber virtuellen Maschinen (VM) einige Vorteile.

Mit Kubernetes können Container in großen Clustern orchestriert und verwaltet werden, wodurch eine skalierbare und verteilte Umgebung entsteht.

Mit Kubernetes können Container in großen Clustern orchestriert und verwaltet werden, wodurch eine skalierbare und verteilte Umgebung entsteht.

Häufige use cases von Kubernetes

  1. API für die Bereitstellung der Software vereinheitlichen

Ein zentraler use case, der bei vielen Projekten zu beobachten ist, besteht in der Notwendigkeit, die API für die Bereitstellung der Software zu vereinheitlichen. Dies umfasst nicht nur die Bereitstellungs-API selbst, sondern auch Speicherzugriffsberechtigungen und Ingress-Routing. Durch die Verwendung von Kubernetes als Bereitstellungsziel können all diese APIs vereinheitlicht werden. Von der Umgebungszugriffssteuerung über die Protokollierung bis hin zur Metrikerfassung – Kubernetes bietet eine einheitliche Plattform für die Verwaltung dieser Aufgaben. Dies ist zweifellos eine der größten Stärken von Kubernetes.

  1. Skalierung von Build-Infrastrukturen und Testumgebungen

Ein weiterer häufiger use case besteht in der Skalierung von Build-Infrastrukturen und Testumgebungen. Dank der Entkopplung von Bereitstellung und Infrastruktur ermöglicht es Kubernetes, dynamisch bereitgestellte Testumgebungen und ephemere Build-Slaves problemlos zu realisieren. Container können innerhalb von Sekunden gestartet werden, ohne zusätzliche Konfiguration zu erfordern. Dies ermöglicht eine effiziente Skalierung und erleichter die Handhabung von Testumgebungen und Build-Prozessen.

  1. Streben nach Cloud-Native-Architekturen

Ein weiterer Faktor, der in einigen Projekten eine Rolle spielt, ist das Streben nach Cloud-Native-Architekturen. Cloud Native ist kein Modewort, sondern ein Ansatz, der von der Cloud Native Computing Foundation (CNCF) definiert wurde. Cloud Native-Technologien ermöglichen die Entwicklung und Ausführung skalierbarer Anwendungen in modernen Umgebungen wie öffentlichen, privaten und hybriden Clouds. Dieser Ansatz umfasst Container, Service-Meshes, Microservies, unveränderliche Infrastruktur und deklarative APIs.

Durch die Verwendung dieser Techniken können Unternehmen lose gekoppelte, widerstandsfähige und gut beobachtbare Systeme erstellen. Zusammen mit Automatisierung ermöglicht dies Ingenieuren, Änderungen häufig und vorhersehbar mit minimalem Aufwand durchzuführen. Die CNCF fördert und unterstützt ein Ökosystem von anbieterneutralen Open-Source-Projekten, um die Einführung von Cloud Native-Technologien voranzutreiben.

  1. Dynamische Skalierbarkeit von Anwendungen

Ein weiterer use case, der aus vielen Projekten übernommen werden kann, ist die dynamische Skalierbarkeit von Anwendungen. Insbesondere für zustandslose Anwendungen bietet Kubernetes Werkzeuge zur Skalierung basierend auf Metriken und Regeln. Diese Skalierungsfunktionen erleichtern die Bewältigung von Lastspitzen und stellen sicher, dass Anwendungen immer die erforderlichen Ressourcen zur Verfügung haben.

  1. Mandantenfähige Anwendungen

Darüber hinaus ermöglicht Kubernetes nicht nur die Skalierung einzelner Anwendungen, sondern bietet auch Möglichkeiten zur Unterstützung mandantenfähiger Anwendungen. Durch die Verwendung von Containern können mehrere Mandanten effizient auf einer gemeinsamen Infrastruktur gehostet werden. Kubernetes ermöglicht es, individuelle Ressourcenbeschränkungen und Berechtigungen für jeden Mandanten festzulegen und bietet Mechanismen zur einfachen Verwaltung der Mandantenfähigkeit. Früher mussten separate Anwendungsinstanzen für jeden Mandanten erstellt werden, was sowohl zeitaufwändig als auch kostspielig war. Mit Containern können Hardwareressorcen besser gemeinsam genutzt werden.

  1. API mithilfe von benutzerdefinierten Ressourcendefinitionen erweitern

Eine bemerkenswerte Eigenschaft von Kubernetes ist die Möglichkeit, seine API mithilfe von benutzerdefinierten Ressourcendefinitionen zu erweitern. Dadurch können Entwickler die API an ihre spezifischen Anforderungen anpassen und benutzerdefinierte Funktionen implementieren. Dieses Muster wird oft verwendet, um zustandsbehaftete Anwendungen zu verwalten, die komplexe Lebenszyklen aufweisen. Die Erweiterung der Kubernetes-API ermöglicht es, Unternehmen, Multi-Tenancy und andere komplexe Szenarien effektiv umzusetzen.

mgm setzt Kubernetes bereits seit langem als Container-Orchestrierungslösung in verschiedenen Projekten erfolgreich ein. Dies umfasst unter andere Projekte im Versicherungsbereich, die Kubernetes sowohl für Test- als auch für Produktionsumgebungen nutzen. In einem Projekt zur kommunalen Digitalisierung wird Kubernetes verwendet, um die Skalierbarkeit einer Anwendung sicherzustellen. In einer weltweiten Logistikplattform wird Kubernetes sowohl für Filialinstanzen als auch für das zentrale Backend genutzt.

Große Auswahl an Tools und Technologien für Kubernetes

Angesichts der Vielzahl von Werkzeugen und Optionen im Kubernetes-Ökosystem ist es wichtig, eine fundierte Entscheidung zu treffen. Die Cloud Native Computing Foundation (CNCF) bietet eine umfassende Landschaftsübersicht auf ihrer Website, die einen Einblick in die verfügbaren Tools und Technologien gibt. Die Auswahl an Tools und Orchestratoren ist beeindruckend, und selbst innerhalb von Kubernetes gibt es eine Vielzahl von Distributionen und Installationsprogrammen.

Kubernetes ist ein großer, aber nur ein Baustein in der Cloud Native Landscape.

Bei der Implementierung von Kubernetes sind zwei wesentliche Aspekte zu berücksichtigen:

  1. Welche Grundlagen sind erforderlich, um mit Kubernetes zu starten?
  2. Welche Tools und Technologien nutzen Unternehmen wie mgm aktive und können daher als bewährte Lösungen betrachtet werden?

Es ist wichtig zu beachten, dass das Wissen und die Erfahrung, die bei einem Kubernetes-Setup gewonnen wurden, auf andere Anwendungsstacks übertragbei sein können. Im Folgenden werden wir uns ausführlich mit diesen Fragen auseinandersetzen und versuchen, Antworten darauf zu finden. Unser Ziel ist es, ein umfassenderes Verständnis für die Chancen und Herausforderungen von Kubernetes zu erlangen.

Kubernetes-Tools: eine praxiserprobte Auswahl

Kubernetes hat sich als eine der beliebtesten Plattformen für die Orchestrierung von Containern etabliert. Für Entwickler, die in die Welt von Kubernetes eintauchen möchten, kann die Auswahl der richtigen Tools und Optionen jedoch eine Herausforderung darstellen. In diesem Artikel stellen wir Ihnen eine Auswahl von Kubernetes-Tools vor, die bei mgm verwendet werden, sowie deren Vor- und Nachteile.

Von der Installation über Overlay-Netzwerke bis hin zur Überwachsung und Protokollierung werfen wir einen Blick auf verschiedene Aspekte, die für Entwickler von Interesse sein könnten.

Kubernetes Distribution / Installer

Kube-admin: Das Standard-Installationsprogramm für Kubernetes ist eine der Möglichkeiten, mit Kubernetes zu starten. Dieses Installationsprogramm wird vom Kubernetes-Projek selbst gepflegt und hat in den letzten Jahren deutliche Verbesserungen erfahren. Dennoch ist es noch nicht vollautomatisiert und erfordert weiterhin manuelle Konfigurationen.

OpenShift: Die vollwertige Kubernetes-Distribution mit zusätzlichen Funktionen bietet viele Vorteile. Für den Einstieg kann sie aber zu komplex werden. Die Einarbeitung ist möglicherweise nicht für jeden geeignet. Es sollte beachtet werden, dass OpenShift3 veraltet ist und nicht mehr offiziell unterstützt wird. OpenShift4 hingegen bietet ein durchdachtes Design und automatisierte Einrichtungsmöglichkeiten.

Rancher: Rancher ist eine agnostische Kubernetes-Distribution, die gleichzeitig als Cluster-Management-Tool und Installationsprogramm fungiert. Es bietet eine Benutzeroberfläche mit benutzerdefinierten Abstraktionen. Rancher hat sich bei vielen Anwendern aufgrund seiner guten Automatisierungsfähigkeiten, einschließlich der reibungslosen Durchführung von Kubernetes-Upgrades, bewährt.

K3s: Die reduzierte Kubernetes-Distribution eignet sich ideal für Einzelknotenbereitstellungen oder Entwicklungscluster. Sie bietet eine einfache Einrichtung und wird von einigen Entwicklern wegen der Möglichkeit geschätzt, Kubernetes-Cluster innerhalb von Docker zu erstellen.

Minikube: Die ausgereifte Lösung für lokale Bereitstellungen auf Entwicklermaschinen läuft in einer eigenen virtuellen Maschine und bietet eine nativere Erfahrung im Vergleich zu anderen Tools wie K3s.

Docker für Mac/Windows: Die Kubernetes-Option ist zwar nicht so komfortabel und gut dokumentiert wie Minikube, die Entwicklung in diesem Bereich ist jedoch sehr dynamisch und es könnten in Zukunft weitere interessante Optionen hinzukommen.

Overlay Network

Flannel: Das einfachste und älteste Overlay-Netzwerk-Tool bietet im Vergleich zu anderen Lösungen weniger Funktionen. Es unterstützt keine Netzwerkrichtlinien in Kubernetes.

Weave Net: Die recht einfache Implementierung eines Overlay-Netzwerks bietet eine Unterstützung für Netzwerkrichtlinien. Im Gegensatz zu anderen Tools unterstützt es sogar Multicast, obwohl dies mit erheblichen Leistungseinbußen verbunden sein kann.

Ingress Controller

Ingress Nginx: Der Ingress Controller fungiert als Reverse-Proxy und ermöglicht es, HTTP-, HTTPS- und sogar TCP-Verkehr in das Cluster zu leiten.

Traefik: Ein weiterer Ingress Controller, der ähnliche Funktionen wie Ingress Nginx bietet. Er ermöglicht die Weiterleitung von HTTP-, HTTPS- und TCP-Verkehr in das Cluster und bietet Flexibilität bei der Verwendung von persistentem Speicher.

Persistent Storage

NFS Client Provisioner (Subdir provisioner): Der NFS Client Provisioner ist eine flexible und beliebte Lösung für die Bereitstellung von persistentem Speicher in Kubernetes. Es ermöglicht das Einbinden von NFS-Freigaben und das Bereitstellen des Speichers für Dienste, die dauerhafte Daten benötigen.

Packaging und Deployment

Plain YAML: Die einfachste Möglichkeit, Bereitstellungen zu verwalten und Software auf dem Cluster zu installieren. Plain YAML eignet sich besonders gut für einfache Anwendungsfälle.

Jsonnet: Jsonnet ist eine templating-fähige Sprache, die zwischen YAML und JSON liegt. Es bietet Unterstützung für die Erstellung von Vorlagen, kann jedoch aufgrund des Lernaufwands für eine zusätzliche Sprache komplexer sein.

Helm2 und Helm3: Helm ist ein Paketmanager mit integrierter Templating- und Abhängigkeitsauflösungsfunktion für Kubernetes. Helm2 erforderte eine zusätzliche clusterseitige Komponente, während Helm3 diese Einschränkung behebt und zu einer soliden Option für die Bereitstellung von Software auf Kubernetes geworden ist.

Ansible: Ansible bietet umfassende Templating-Fähigkeiten, die für die Bereitstellung auf Kubernetes genutzt werden können. Obwohl Ansible mehr Funktionen bietet als Helm, wird Helm aufgrund der größeren Verfügbarkeit von vorgefertigter Software in der Regel empfohlen.

Operators: Operators bringen die Idee der Paketierung und Bereitstellung auf Kubernetes auf eine weitere Ebene. Sie bieten erweiterte Möglichkeiten zur Automatisierung von Anwendungen und können die Verwaltung komplexer Szenarien erleichtern.

Monitoring & Logging

Prometheus: Das leistungsstarke Tool eignet sich für die Überwachung und Sammlung von Metriken in Kubernetes. Es arbeitet zusammen mit Alertmanager und Grafana, um Abfragemetriken zu ermöglichen, Alarme zu generieren und Visualisierungen bereitzustellen.

Grafana Loki: Die moderne Lösung für die Protokollierung in Kubernetes ist effizienter und skalierbarer als die traditionelle ELK- oder EFK-Stacks (Elasticsearch, Logstash oder Fluentd und Kibana) und bietet ähnliche Funktionen zur Analyse und Visualisierung von Protokollen.

ELK (Elasticsearch, Logstash, Kibana): ELK ist ein beliebtes Stack für die Protokollierung und Analyse. Er besteht aus Elasticsearch als Suchindex, Logstash oder Fluentd als Sammler und Kibana zur Visualisierung. Es erfordert mehr Ressourcen, bietet jedoch eine umfassende Lösung für die Protokollanalyse.

Grafana: Grafana ist ein leistungsstarkes Visualisierungstool, das eng mit Prometheus und anderen Datenquellen integriert ist. Es ermöglicht die Erstellung ansprechender Dashboards und die Visualisierung von Metriken und Protokollen.

Alertmanager: Ein Tool, das mit Prometheus zusammenarbeitet und für das Management von Alarmen und Benachrichtigungen verantwortlich ist. Es ermöglicht die Konfiguration und Weiterleitung von Alarmen auf verschiedene Kommunikationskanäle.

Authorization / Authentication

Rancher: Die Plattform zur Verwaltung von Kubernetes-Clustern bietet eine benutzerfreundliche Benutzeroberfläche und verschiedene Funktionen für Authentifizierung und Berechtigungen.

Dex: Dex ist eine praktische Lösung, um einen Identitätsanbieter für den Kubernetes-Cluster bereitzustellen. Es erleichtert die korrekte Authentifizierung mit Kube Cuddle und vermeidet den Aufwand der Verwaltung von Dienstkonten.

KeyCloak: KeyCloak ist eine weitere Option für die Bereitstellung eines Identitätsanbieters für den Kubernetes-Cluster. Es bietet umfassende Funktionen zur Authentifizierung und Autorisierung für Benutzer und Dienste.

Service Meshes

Istio: Istio ist eine beliebte Service Mesh-Implementierung für Kubernetes. Es bietet erweiterte Funktionen für Traffic-Management, Sicherheit und Überwachung, erfordert jedoch zusätzliche Konfiguration und verfügt über eine höhere Komplexität im Vergleich zu anderen Service Meshes.

Kubernetes und Tools: Was zu beachten ist

Kubernetes ist zwar ein großer, aber nur ein Baustein in der Cloud Native Landscape. Um ein passendes Tool auszuwählen, benötigt man Zeit und Überlegung. Wir haben erkannt, dass ein wirklich brauchbares Cluster viel mehr erfordert als nur die Installation von Kubernetes. Es gibt eine Vielzahl von Tools und Konzepten, mit denen man sich vertraut machen muss. Bei der Einrichtung sollte man daher langsam Schritt für Schritt vorgehen, denn jeder Aspekt erfordert eine gewisse Lernkurve.

Es ist jedoch wichtig zu betonen, dass es bestimmte Konstanten gibt, wie die Kubernetes-API und bestimmte grundlegende Konzepte, die in den meisten Implementierungen vorhanden sind. Wenn Sie diese Konzepte verstehen und mit der Kubernetes-API vertraut sind, haben Sie bereits eine solide Basis, auf der Sie aufbauen können.