Anmelden / Registrieren Konto

Cloudnative Anwendungen

Einführung in Kubernetes Patterns

Patterns oder Muster beschreiben eine wiederholt nutzbare Lösung für ein Problem. Kubernetes Patterns sind Designmuster für containerbasierte Anwendungen und Services.  

Kubernetes kann Entwickler beim Programmieren cloudnativer Apps unterstützen und stellt dazu eine Library mit APIs und Tools zur Verfügung. 

Kubernetes liefert den Entwicklern und Architekten jedoch keine Richtlinien dazu, wie sie damit ein komplettes System erstellen, das bestimmte geschäftliche Anforderungen und Ziele erfüllt. 

Mithilfe von Patterns können Architekturen wiederverwendet werden. Anstatt die gesamte Architektur in Eigenregie zu entwickeln, können Sie bestehende Kubernetes Patterns verwenden, die außerdem sicherstellen, dass alle Komponenten wie erwartet funktionieren. 

Wenn Sie versuchen, wichtige geschäftliche Services auf Kubernetes bereitzustellen, dann ist ein Lernen nach Versuch und Irrtum einfach zu zeitaufwändig und kann zu Ausfällen und Unterbrechungen führen. 

Ein Pattern hingegen funktioniert wie eine Vorlage, die Ihnen zeigt, wie sich eine ganze Klasse ähnlicher Probleme lösen lässt. Ein Pattern umfasst jedoch mehr als nur die einzelnen Schritte zur Behebung eines bestimmten Problems.

Die Verwendung eines Patterns kann zu leicht unterschiedlichen Ergebnissen führen, da Patterns nicht konzipiert wurden, um identische Lösungen zu liefern. So kann es sein, dass sich zwei Systeme unterscheiden, obwohl beide das gleiche Pattern verwendet haben. Allerdings werden beide Systeme dieselben Grundeigenschaften aufweisen. 

Mithilfe von Kubernetes Patterns können Entwickler cloudnative Apps erstellen und Kubernetes als Runtime-Plattform verwenden.


Verschiedene Kubernetes Patterns

Patterns sind die Tools, die ein Kubernetes-Entwickler braucht und die Ihnen demonstrieren, wie Sie Ihr System erstellen können.

  • Foundational Patterns decken die Kernkonzepte von Kubernetes ab. Diese Patterns umfassen die grundlegenden Prinzipien und Praktiken, die für die Entwicklung containerbasierter, cloudnativer Anwendungen benötigt werden. 
  • Behavioral Patterns beschreiben die Muster, die über den Foundational Patterns liegen und für eine zusätzliche Feinabstimmung bei der Verwaltung verschiedener Container- und Plattforminteraktionen sorgen. 
  • Structural Patterns beziehen sich auf die Organisation von Containern in einem Kubernetes Pod. 
  • Configuration Patterns werden für die verschiedenen Methoden der Anwendungskonfiguration von Kubernetes eingesetzt. Diese Patterns umfassen die speziellen Schritte, durch die Anwendungen mit ihrer jeweiligen Konfiguration verbunden werden. 
  • Advanced Patterns umfassen erweiterte Konzepte dazu, wie beispielsweise die Plattform selbst erweitert oder Container Images direkt im Cluster erstellt werden können.

Use Cases für Kubernetes Patterns

Predictable Demands Patterns

Hierbei handelt es sich um Kubernetes Foundational Patterns. Diese Patterns stellen sicher, dass Ihre Apps die grundlegenden Prinzipien containerisierter Anwendungen erfüllen und so für die Automatisierung mit Kubernetes bereit sind. 

Sie definieren außerdem, warum jeder Container die Ressourcenanforderungen und Runtime-Abhängigkeiten der App „deklarieren“ muss. Dadurch kann Kubernetes den richtigen Standort zur Bereitstellung Ihrer App im Cluster bestimmen. 

Mit diesen Patterns lassen sich unter anderem Runtime-Abhängigkeiten, Ressourcenprofile, Pod-Prioritäten und Projektressourcen festlegen.

Beispiel: Ressourcenprofile

Sie müssen die Ressourcenanforderungen eines Containers, darunter CPU und Speicher, in Form von Anfrage und Limit festlegen. Eine solche Anfrage definiert die benötigten Mindestressourcen, ein Limit dagegen die maximale Menge an Ressourcen, die ein Container verbrauchen kann. 

Die Menge der Anfragen wird vom Scheduler verwendet, wenn dieser die Pods den Knoten zuweist. Der Scheduler wiederum plant lediglich Pods für Knoten ein, die genügend Kapazität dafür haben.  

Wenn keine Ressourcenanforderungen festgelegt wurden, erhält der jeweilige Container eine niedrigere Priorität und wird als erstes entfernt, wenn der Knoten nicht mehr genügend Ressourcen hat.

Configuration Patterns

Alle Anwendungen müssen konfiguriert werden, und auch wenn das Speichern von Konfigurationen im Quellcode eine einfache Option ist, können Sie Konfigurationen nicht automatisch flexibel anpassen, ohne das App-Image neu zu erstellen. Mit externen Konfigurationen können Sie Anpassungen auf der Basis der Umgebung vornehmen.

Über Configuration Patterns lassen sich Ihre Apps durch externe Konfigurationen spezifisch an die verschiedene Entwicklungs-, Integrations- und Produktivumgebungen anpassen. 

Beispiel: EnVar-Konfiguration

Das EnVar-Konfigurationsmuster eignet sich am besten für kleine Sets von Konfigurationsvariablen, bei denen universell unterstützte Umgebungsvariablen verwendet werden können, um eine Konfiguration zu externalisieren. 

Durch eine Externalisierung können Sie auch nach der Erstellung der App Änderungen an der Konfiguration vornehmen. Im Gegensatz dazu würde eine hartcodierte Konfiguration eine neue App-Erstellung erfordern.

Die Verwendung von Umgebungsvariablen zur Externalisierung der Konfiguration funktioniert deshalb so gut, weil diese Variablen von allen Betriebssystemen definiert und über alle Programmiersprachen aufgerufen werden können. 

Mit Umgebungsvariablen werden hartcodierte Standardwerte üblicherweise beim Build definiert und während der Runtime überschrieben.

In Kubernetes können Variablen direkt in der Pod-Spezifikation eines Controllers wie im Deployment oder ReplicaSet festgelegt werden. Sie können Umgebungsvariablen Werte direkt zuweisen und sie getrennt von der Pod-Definition verwalten.

Alternativ können Sie eine Delegation zu Kubernetes Secrets (für vertrauliche Daten) und ConfigMaps (für nicht vertrauliche Konfigurationen) verwenden.

Advanced Patterns

Diese Patterns umfassen komplexe Themen sowie die neuesten Implementierungen von Patterns. Controller, Operator, Elastic Scale und Image Builder Patterns sind alles Beispiele für erweiterte Kubernetes Patterns.

Beispiel: Elastic Scale

Dieses Pattern wird für die horizontale Skalierung von Anwendungen verwendet, indem die Zahl der Pod-Replikas angepasst wird. Eine vertikale Skalierung erfolgt, indem die Ressourcenanforderungen für Pods angepasst werden. Der Cluster selbst kann durch eine Änderung der Anzahl der Cluster-Knoten skaliert werden.

Obwohl Sie die Skalierung auch manuell durchführen können, kann Kubernetes die Skalierung mithilfe von Elastic Scale Patterns automatisch abhängig von der Last ausführen. 

Mit Kubernetes können Sie die Ressourcen eines Containers, die gewünschten Replikas für einen Service oder die Anzahl der Knoten in einem Cluster ändern. Außerdem lassen sich damit externe Lasten und kapazitätsrelevante Events überwachen, der Container-Status analysieren und die Skalierung für die gewünschte Performance durchführen. 

Durch die automatische horizontale Skalierung von Pods können Sie App-Kapazitäten definieren, die nicht festgelegt sind und doch für sich verändernde Lasten ausreichen. Hierfür wird ein horizontaler Pod Autoscaler verwendet. 

Um diesen nutzen zu können, muss der Metrikserver aktiviert werden, ein Aggregator für Ressourcennutzungsdaten im Cluster. Außerdem muss ein CPU-Ressourcen-Limit definiert werden. Sie können eine Definition für den horizontalen Pod Autoscaler über die Befehlszeile erstellen. 

Mit dem Controller des Autoscaler werden ausgehend von dieser Definition kontinuierlich skalierungsrelevante Metriken zu den Pods abgerufen. 

Außerdem berechnet der Controller des Autoscaler die erforderliche Anzahl an Replikas basierend auf dem aktuellen und dem gewünschten Wert und passt die deklarierten Replikas an, um den neuen gewünschten Zustand zu erhalten.


Kubernetes für das Unternehmen

Red Hat® OpenShift® ist eine unternehmensfähige Kubernetes-Plattform. Damit erhalten Entwickler Self-Service-Umgebungen, in denen sie Anwendungen und automatisierte Full Stack-Operationen auf beliebigen Infrastrukturen entwickeln können.

Red Hat OpenShift integriert alle zusätzlichen Technologiekomponenten, die Kubernetes leistungsstark und unternehmenstauglich machen, darunter Registry, Networking, Telemetrie, Sicherheit, Automatisierung und Services.

Mit OpenShift können Entwickler neue containerisierte Apps erstellen, sie hosten und in der Cloud mit der Skalierbarkeit, Kontrolle und Orchestrierung bereitstellen, die man braucht, um aus einer guten Idee schnell und einfach ein neues Geschäft zu machen.

Kubernetes hat noch viel mehr zu bieten