Zum Inhalt

7 · Verteilungssicht

Die Verteilungssicht beschreibt, wo die Bausteine der ODI physisch laufen, welche Managed Services sie nutzen und wie neue Versionen automatisch in den Cluster gelangen.

Das Diagramm zeigt den IONOS Managed Kubernetes-Cluster mit seinen Namespaces als innere Knoten, die externen Managed Services (PostgreSQL, S3, NFS) rechts davon, den Ingress/TLS-Layer oben und die GitOps-Kette von openCode über die Container-Registry bis zum Cluster.

Infrastruktur bei IONOS

Die ODI läuft vollständig in der IONOS Cloud. Für alle Umgebungen (Stage und Produktion) stellt IONOS folgende Managed Services bereit, die kein eigenes Betriebswissen erfordern:

Managed Service Verwendung
Managed Kubernetes Laufzeitumgebung für alle Container-Workloads; Stage und Produktion sind je eigene Cluster mit eigenem Node-Pool
Managed PostgreSQL Persistenz für CKAN-Datenkatalog, Keycloak, FROST-Server (Sensordaten), GeoServer/PostGIS; Stage nutzt eine eigene Instanz (getrennt von Produktion)
Managed S3-Objektspeicher Dateispeicher für hochgeladene Datensätze (CSV, Parquet, JSON) und generierte Diagramm-Iframes (Visualization-Backend); Stage nutzt eigene Buckets
NFS-Fileservice Gemeinsam genutzter Dateispeicher für GeoServer-Daten und Triple-Store-Persistenz

Die Produktionsdomäne ist odi.schleswig-holstein.de, die Stage-Domäne odi-stage.schleswig-holstein.de. Alle Endpunkte sind über HTTPS erreichbar; TLS-Zertifikate stellt cert-manager mit Let's Encrypt aus.

Kubernetes-Namespaces

Der Cluster ist in thematische Namespaces aufgeteilt, die jeweils einem fachlichen Stack entsprechen:

Namespace Deployments (Auswahl) Persistenz
odi-staging staging-backend, frictionless-backend, metadata-service, ckan-service, ckan-harvester – (zustandslos; Katalog im CKAN-Namespace)
odi-schema-repo schema-backend, schema-staging-frontend, Redis Redis-PVC
odi-udp GeoServer, PostGIS, UDP-Manager, Masterportal, masterportal-service Managed PostgreSQL (PostGIS), NFS
odi-triple-* triple-converter-worker, Apache Jena Fuseki, sparql-frontend NFS / PVC (TDB-Daten)
odi-dynamic-data FROST-Server, frost-proxy, sensorthings-backend, sensorthings-webapp, MQTT-Broker Managed PostgreSQL
odi-visualization visualization-backend, visualization-frontend Managed S3
odi-ckan CKAN (oder Piveau), CKAN-Plugins Managed PostgreSQL, Managed S3
keycloak Keycloak Managed PostgreSQL
ingress-nginx NGINX Ingress Controller
cert-manager cert-manager, Let's Encrypt-Solver
flux-system Flux-Controller (source-controller, kustomize-controller, image-automation-controller)
monitoring Grafana, Loki, Promtail, VictoriaMetrics PVC

GitOps-Deployment mit FluxCD

Der gesamte Deployment-Prozess ist automatisiert. Nach einem git push auf main in einem Service-Repository läuft folgende Kette ab – ohne manuellen Deploy-Schritt:

  1. GitLab CI (odi-ci-templates) startet die Pipeline: bump-version erhöht das -dev-N-Suffix und committet zurück; build-image baut das Docker-Image mit Kaniko und pusht es in die Stage-Container-Registry (odi-container-registry-stage.cr.de-fra.ionos.com).
  2. Flux ImageRepository scannt die Stage-Registry alle 5 Minuten auf neue Image-Tags.
  3. Flux ImagePolicy wählt den neuesten Tag, der dem Muster ^\d+\.\d+\.\d+-dev-\d+$ entspricht.
  4. Flux ImageUpdateAutomation schreibt den neuen Tag in das Deployment-Manifest zurück und committet die Änderung ins Repository odi-kubernetes-stage.
  5. Flux Kustomization erkennt die Manifest-Änderung und wendet sie sofort auf den Cluster an (prune: true).

Die Produktion verwendet denselben Mechanismus mit festen Release-Tags (keine -dev-N-Suffixe) und dem Produktions-Kubernetes-Repository odi-kubernetes-prod.

Netzwerk und Absicherung

  • Ingress: NGINX Ingress Controller routet eingehenden HTTPS-Traffic zu den jeweiligen Services. Der geplante Traefik API-Gateway (noch im Aufbau) soll zukünftig API-Management-Funktionen (Rate-Limiting, Routing) übernehmen.
  • TLS: cert-manager stellt Let's Encrypt-Zertifikate für alle *.odi.schleswig-holstein.de-Subdomains aus und erneuert sie automatisch.
  • Secrets: Keycloak-Credentials, Registry-Pull-Secrets, Datenbankpasswörter und S3-Zugangsdaten werden out-of-band per kubectl erzeugt und sind nie im Git. Skripte und Vorlage liegen im Kubernetes-Repo unter secrets/.
  • Observability: Promtail sammelt Container-Logs und schickt sie an Loki. Grafana visualisiert Logs und Metriken (VictoriaMetrics). Alerting und On-Call-Prozesse sind Betriebssache von Dataport.

Details zu Stage und Produktion als gespiegelte Umgebungen beschreibt Umgebungen: Stage & Produktion. Den CI/CD-Ablauf im Detail erklärt CI/CD- & Flux-Pipeline.