Hierarchische Konfiguration: Beherrschbarkeit und Übersicht
Jedes Produkt wird dabei anhand einer hierarchischen dreistufigen Kaskade konfiguriert. Bei der Generierung der YAMLs werden die Kaskaden übereinandergelegt, so dass ein virtueller Satz an Konfigurationswerten entsteht. Virtuell deshalb, weil die finale Konfiguration nirgendwo direkt einsehbar ist.
Das Übereinanderlegen der Kaskaden gestalten wir so, dass spezifischere Werte allgemeinere Werte überschreiben. In Fällen, in denen wir diese Überschreibung erzwingen wollen, nutzen wir als Wert auf der allgemeineren Ebene den String undefined-.... Dadurch wird im generierten YAML sofort sichtbar, dass eine nötige Überschreibung fehlt.
Beispielsweise definieren wir in der Produkt-Konfig (values-product.yaml) die produktspezifischen Services (frontend, orders, stock) inklusive Version und benötigtem RAM. Da sich aber üblicherweise die Versionen der Microservices in test und prod unterscheiden, delegieren wir durch den String undefined-version das Definieren der letztlich genutzten Version an eine tiefere Ebene. In unserem Fall ist das die zweite Ebene der Konfig-Kaskade. Dabei haben wir auch die Möglichkeit, (in Zukunft) die Service-Versionen im Produkt - also in der dritten und untersten Kaskade - noch mal zu definieren, um so verschiedene Versionen in verschiedenen Produkten abbilden zu können.
Um den größtmöglichen Nutzen aus diesem System zu ziehen, müssen alle Konfigurationen in den values-...-Dateien stehen. Zwar ist es manchmal verlockend, in den Source-YAMLs einfach eine Verzweigung einzubauen, doch auf diese Weise fragmentiert man die Konfiguration, was auf Dauer die Beherrschbarkeit deutlich einschränkt.
Entwickeln wir zum Beispiel ein neues Feature, das einen bestimmten Konfigurationswert voraussetzt, sollten wir diesen Wert vorerst nur für test setzen - denn die Version des Microservice in prod kennt diesen Wert ja nicht. Soll das Feature irgendwann später dann nach prod ausgerollt werden, besteht die Möglichkeit, dass wir die Verzweigung in der Source-YAML vergessen und den Fehler womöglich erst nach langen Debug-Sessions bemerken. Ein Vergleich der beiden Konfig-Dateien würde das Fehlen des Wertes allerdings direkt offenbaren.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Kubernetes-Kontrollcenter: Mit YTT-Templates Kubernetes-Cluster besser verwalten | Die Sources - ein Mix aus YAML und Code |
Ich verstehe. Das Prinzip ist in der Tat ähnlich. Solange Ihr mit Helm zurecht kommt...
kwT
Kommentieren