Beispiele für Flotten

Die Beispiele auf dieser Seite zeigen einige hypothetische Szenarien mit Flotten, die einige Konzepte und Best Practices aus unseren Leitfäden veranschaulichen. Bevor Sie diesen Leitfaden lesen, sollten Sie mit den Konzepten in Einführung in Flotten und Flottenanforderungen und Best Practices vertraut sein.

Beispiel 1: Flotten mit Produktions-, Staging- und Entwicklungsressourcen

In diesem ersten Beispiel gibt es vier Cluster. Zwei Cluster sind für die Produktion bestimmt (in zwei Regionen für die Redundanz), ein weiterer für Staging und Tests und der letzte für die Entwicklung. Alle Cluster sind im Besitz eines Plattformteams und werden zentral von diesem verwaltet. In diesem einfachen Beispiel gibt es zwei Dienste: frontend und backend. Komplexere Szenarien können jedoch eine größere Anzahl von Diensten und Clustern haben.

Diagramm zur Veranschaulichung eines Systems mit Produktions-, Staging- und Entwicklungsressourcen
Ein System mit Produktions-, Staging- und Entwicklungsressourcen

Ansatz 1: Separate Flotten für Produktion, Staging und Entwicklung

Ein möglicher Ansatz zur Nutzung von Flotten besteht darin, separate Flotten für Produktions-, Staging- und Entwicklungsressourcen zu erstellen.

Dazu erstellen wir drei separate Flotten-Hostprojekte und platzieren entweder Ressourcen in diesen Projekten oder registrieren im Falle unseres lokalen Entwicklungsclusters den Cluster für das Projekt example-dev. Aufgrund des Detaillierungsgrads haben wir in diesem Beispiel nicht auf die Gleichheit der Namespaces und Dienste geachtet, wir haben aber sichergestellt, dass die Namespaces der prod-east- und prod-west-Cluster gut normalisiert sind.

Der Vorteil dieses Ansatzes ist, dass wir eine starke Isolation zwischen den einzelnen Flotten haben. Der Hauptnachteil dieses Ansatzes besteht darin, dass wir drei verschiedene Flotten verwalten müssen, was das Erreichen einer Konsistenz zwischen Produktion, Staging und Entwicklung erschwert. Für Entwicklungsteams ist es auch schwieriger, gegen Dienste im Staging zu entwickeln.

Diagramm mit separaten Flotten für Produktions-, Staging- und Entwicklungsressourcen
Separate Flotten für Produktions-, Staging- und Entwicklungsressourcen

Ansatz 2: Eine Flotte für alle Ressourcen

Bei diesem Ansatz erstellen wir eine Flotte für alle Ressourcen.

Dazu können wir die Ressourcen im Projekt example belassen und die Flotte in diesem Projekt erstellen. Wir hätten unsere Produktions- und Staging-Ressourcen durch Platzieren in andere Flotten-Hostprojekte trennen können und eine freigegebene VPC verwenden können. In diesem Beispiel haben wir aber aus Gründen der Einfachheit darauf verzichtet.

Bei diesem Ansatz müssen wir sicherstellen, dass unsere Namespaces und Dienste innerhalb der Flotte normalisiert sind. Beispielsweise benennen wir unser generisches frontend in den Produktions- und Staging-Clustern in frontend-prod und frontend-staging um. Schließlich könnten wir zwar die ursprünglichen Namen für unsere Entwicklungs-Namespaces beibehalten, aber wir vergeben eindeutigere Namen (wie frontend-dev-alice), damit klar ist, dass es sich um Entwicklungs-Namespaces handelt.

Bei diesem Ansatz tauschen wir die Isolation gegen eine einfachere Verwaltung ein. Wir müssen die Service Mesh-Autorisierung nutzen, um unerwünschte Dienst-zu-Dienst-Kommunikation zu verhindern, können aber das gesamte System mit der einen Flotte problemlos verwalten. Eine solche Anordnung erlaubt es, Richtlinien auf alle Ressourcen anzuwenden. So können wir sicher sein, dass sich die Entwicklung genau so verhält wie die Produktion.

Diagramm, das eine einzelne Flotte mit Produktions-, Staging- und Entwicklungsressourcen veranschaulicht
Eine einzelne Flotte mit Produktions-, Staging- und Entwicklungsressourcen

Ansatz 3: Separate Flotten für Produktion und Nicht-Produktion

Bei diesem Ansatz verwenden wir einen Mittelweg, der die Staging- und Entwicklungsressourcen in einer Nicht-Produktions-Flotte vereint und die Produktion in einer separaten Flotte bereitstellt.

Dazu erstellen wir zwei Flotten-Hostprojekte: eins für den Produktionsbereich und eins für den Nicht-Produktionsbereich. Außerdem ordnen wir unsere Ressourcen direkt den Projekten zu, bei denen der dev-Cluster lokal in unserer Nicht-Produktions-Flotte registriert ist. Wir müssen die Namespaces und Dienste zwischen unseren Staging- und Entwicklungsressourcen normalisieren, um für mehr Übersichtlichkeit zu sorgen. Zum Beispiel benennen wir frontend im Staging-Cluster in frontend-staging um.

Der Vorteil besteht darin, dass die Produktion von der Nicht-Produktion getrennt ist. Beispielsweise können wir Entwicklungsdienste für die Kommunikation mit Staging-Diensten aktivieren. Dann kann das frontend der Entwicklerin Alice mit einem backend im Staging kommunizieren, während sie ihren Dienst entwickelt.

Diagramm mit Produktions- und Nicht-Produktions-Flotten
Produktions- und Nicht-Produktions-Flotten

Fazit

Jeder in Beispiel 1 beschriebene Ansatz ist richtig. Welche Variante für Ihre Organisation geeignet ist, hängt von der Isolation gegenüber der Konsistenz (und einfachen Verwaltung) ab; also je nachdem, wie viel Isolation zwischen unterschiedlichen Ressourcentypen erforderlich ist und wie viel Konsistenz benötigt wird. Mehr Konsistenz ist mit weniger Flotten leichter zu erreichen. Der dritte Ansatz stellt einen möglichen Kompromiss dar, der die Produktion vollständig isoliert hält und den Entwicklern die Möglichkeit gibt, gegen Staged-Dienste zu arbeiten.

Beispiel 2: Flotten mit unterschiedlichen Ressourceninhabern

Für dieses Beispiel haben wir zwei Teams, Team A und Team B. Diese Teams besitzen und verwalten ihre eigenen Cluster und haben beide die Namespaces frontend und backend für die von ihnen erzeugten Dienste verwendet. Allerdings sind weder frontend noch backend von Team A identisch mit Team B. Die beiden Teams möchten ein Service Mesh erstellen, damit ihre Dienste interagieren können.

Diagramm zur Veranschaulichung eines Systems mit den Ressourcen von zwei Teams
Ein System mit Ressourcen von zwei Teams

Diese Cluster können nicht ohne Weiteres zu einem Teil desselben Mesh-Netzwerks gemacht werden. Ein guter Ausgangspunkt ist das Übertragen der Clustereigentümerschaft an ein zentralisiertes Plattformteam, um das Vertrauen untereinander zu fördern. Wenn sich Team A und Team B einander vertrauen, können sie sich alternativ auch koordinieren, um dieses Vertrauen zu bilden. Im nächsten Schritt wird die Namespace-Verwendung normalisiert damit frontend und backend nicht mehr in den Clustern dieser beiden Teams überlastet sind. Anschließend können sie eine Flotte für alle Ressourcen einrichten und das Service Mesh erstellen.

Diagramm, das die Ressourcen von zwei Teams in einer einzelnen Flotte veranschaulicht
Ressourcen von zwei Teams in einer Flotte

Wenn sich diese Vertrauensebene nicht erreichen lässt, sollten Team A und Team B zwei separate Flotten bilden, in denen zwei unterschiedliche Flotten-Hostprojekte genutzt werden. Der Nachteil bei diesem Ansatz ist, dass sie jetzt die Mesh-Föderation nutzen müssen, die sich schwerer als ein einzelnes Mesh-Netzwerk verwalten lässt. Der Vorteil besteht darin, dass kein Team die bereitgestellten Namespaces und Dienste normalisieren muss und nur die explizite und ausdrücklich autorisierte Kommunikation möglich ist.

Diagramm, das die Ressourcen zweier Teams in separaten Flotten zeigt
Ressourcen zweier Teams in separaten Flotten