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):

  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.

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.

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
Halluzination
ChatGPT erfindet Gerichtsakten

Ein Anwalt wollte sich von ChatGPT bei der Recherche unterstützen lassen - das Ergebnis ist eine Blamage.

Halluzination: ChatGPT erfindet Gerichtsakten
Artikel
  1. Blue Byte: Im Bann der ersten Siedler
    Blue Byte
    Im Bann der ersten Siedler

    Vor 30 Jahren wuselten die ersten Siedler über den Bildschirm. Golem.de hat den Aufbauspiel-Klassiker von Blue Byte neu ausprobiert.
    Von Andreas Altenheimer

  2. Forschung: KI findet Antibiotikum gegen multirestistentes Bakterium
    Forschung
    KI findet Antibiotikum gegen multirestistentes Bakterium

    Forscher zeigen, dass die Hoffnungen in KI bei der Entwicklung von Medikamenten berechtigt sind. Ihre Entwicklung soll deutlich schneller werden.

  3. Mikromechanik: Zotac bringt ersten PC mit fast lautlosem MEMS-Lüfter
    Mikromechanik
    Zotac bringt ersten PC mit fast lautlosem MEMS-Lüfter

    Dank Mikromechanik soll Frores Airjet kleiner und leiser sein als Lüfter. Der erste PC damit wird aber recht teuer.

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 • Microsoft Xbox Wireless Controller 40,70€ • Lexar Play 1 TB 99,60€ • DAMN!-Deals mit AMD-Bundle-Aktion • Crucial P5 Plus 1 TB 72€ • MSI RX 7600 299€ • Inno3D RTX 4070 679€ • MindStar: ASRock RX 6800 XT Phantom OC 579€, PowerColor RX 6800 Fighter 489€ • Logitech bis -46% [Werbung]
    •  /