Die Sources - ein Mix aus YAML und Code

In den Source-YAMLs definieren wir die Bausteine und referenzieren die Konfigurationen. Für unseren orders Microservice sieht diese Datei folgendermaßen aus (→ github):

Stellenmarkt
  1. Sachbearbeiter (m/w/d) Filial-Hotline
    Dirk Rossmann GmbH, Burgwedel
  2. Systemadministrator*in Serversysteme Produktions-IT
    SCHOTT AG, Mitterteich
Detailsuche

  1. #@ load("@ytt:data", "data")
  2. #@ load("@k8syaml:main.lib.yaml", "createService", "createDeployment")
  3.  
  4. #@ serviceName = "orders"
  5.  
  6. #@ def getConfig():
  7. #@yaml/text-templated-strings
  8. serviceConfig: |
  9. maximumAmountPerOrder=(@= str(data.values.configs.maxOrderAmount) @)
  10. someOtherProp=someValue
  11. #@ end
  12.  
  13. --- #@ createService(serviceName, 8080)
  14. --- #@ createDeployment(serviceName, config=getConfig(), withDb=True)

Zuerst definieren wir den Namen des Microservice (Zeile 4), der in den beiden Funktionsaufrufen zur Erstellung von Kubernetes-Service und Kubernetes-Deployment verwendet wird. Die aufgerufenen Funktionen (Zeilen 13 und 14) importieren wir (Zeile 2) aus unserer main-Library.

Zusammengefasst bietet diese Library eine Sammlung an Funktionen, die wiederum YAML-Fragmente mit (internen) Funktionen kombinieren. Diese Kombination hält die YAML-Fragmente einerseits übersichtlich und bietet andererseits enorm vielfältige Möglichkeiten der Ausgestaltung. So entsteht eine mächtige und flexible Mischung aus statischem YAML und dynamischer Programmierung.

Golem Karrierewelt
  1. Kubernetes – das Container Orchestration Framework: virtueller Vier-Tage-Workshop
    11.-14.07.2022, Virtuell
  2. Kotlin für Java-Entwickler: virtueller Zwei-Tage-Workshop
    13./14.10.2022, Virtuell
Weitere IT-Trainings

Die für den Microservice benötigte Konfiguration geben wir per Multiline-String in die createDeployment()-Funktion. Innerhalb dieses Strings laden wir die produktspezifischen Konfig-Werte (hier nur einer, in Zeile 9) die den Standard-Werten innerhalb der createDeployment()-Funktion hinzugefügt werden. Auf diese Weise erhalten wir die finale Konfig-Datei, die dann in den Container gemountet wird.

Haben wir alle Bauteile und Konfigurationen zusammen, ist es Zeit, die YAMLs zu erzeugen, die wir im Cluster betreiben wollen. Dazu erschaffen wir uns ein kleines Bash-Skript, das uns für alle 4 benötigten Produkte sämtliche Kubernetes-Resourcen erzeugt. Diese wenden wir nun per kubectl apply... im Cluster an. Damit sind die Produkte live. Fertig - denken wir.

Skalierbare Container-Infrastrukturen: Das Handbuch für Admins & DevOps-Teams, inkl. Docker und Container-Orchestrierung mit Kubernetes und OpenShift

Nach kurzer Zeit fällt uns allerdings auf, dass der Datenbanktreiber Probleme mit der Entropie hat. Um das Problem zu lösen, müssten wir allen Pods mit Containern, die eine Datenbankverbindung aufbauen, einen bestimmten Datei-Mount hinzuzufügen. Also erweitern wir die createDeployment()-Funktion und starten unser Generierungs-Skript erneut.

Der Commit 44ae035 zeigt uns die daraus resultierenden Änderungen (bei Fehlern oder Problemen könnten wir gegensteuern) und die Auswirkung auf die generierten YAMLs: Mit wenigen Zeilen und einem kleinen if konnten wir alle betroffenen Deployments (orders, stock) anpassen.

Natürlich sind nicht immer alle Änderungen derart einfach zu integrieren. Trotzdem illustriert dieses kleine Beispiel das Potenzial sehr gut. Wäre der Fehler erst später aufgefallen, nachdem noch 7 weitere Produkte hinzugekommen sind, wäre die Änderung die gleiche gewesen, hätte aber trotzdem alle 13 Produkte angepasst.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Hierarchische Konfiguration: Beherrschbarkeit und Übersichtytt-basiertes Templating ist ein enormer Hebel 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6.  


Aktuell auf der Startseite von Golem.de
Unix-Nachfolger
Plan 9 sollte bessere Audio-Kompression bekommen als MP3

Die Entwicklung der Audio-Kompression und die schwierige MP3-Patentsituation hätte ohne das Nein eines Anwalts wohl anders ausgesehen.

Unix-Nachfolger: Plan 9 sollte bessere Audio-Kompression bekommen als MP3
Artikel
  1. Probefahrt mit Toyota bZ4X: Starker Auftritt mit kleinen Schwächen
    Probefahrt mit Toyota bZ4X
    Starker Auftritt mit kleinen Schwächen

    Das erste Elektroauto von Toyota kommt spät - und weist trotzdem noch Schwachpunkte auf. Der Hersteller verspricht immerhin schnelle Abhilfe.
    Ein Bericht von Franz W. Rother

  2. Hermit: Google analysiert italienischen Staatstrojaner
    Hermit
    Google analysiert italienischen Staatstrojaner

    Der Staatstrojaner einer italienische Firma funktioniert sogar in Zusammenarbeit mit dem ISP. Dafür braucht es nicht zwingend ausgefallene Exploits.

  3. Vision, Disruption, Transformation: Populäre Denkfehler in der Digitalisierung
    Vision, Disruption, Transformation
    Populäre Denkfehler in der Digitalisierung

    Der Essay Träge Transformation hinterfragt Schlagwörter des IT-Managements und räumt mit gängigen Vorstellungen auf. Die Lektüre ist aufschlussreich und sogar lustig.
    Eine Rezension von Ulrich Hottelet

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Prime Video: Filme leihen 0,99€ • Alternate: Gehäuse & Co. von Fractal Design • Nur noch heute: 16.000 Artikel günstiger bei MediaMarkt • MindStar (Samsung 970 EVO Plus 250GB 39€) • Hori RWA 87,39€ • Honor X7 128GB 150,42€ • Phanteks Eclipse P200A + Glacier One 280 157,89€ [Werbung]
    •  /