Zum Hauptinhalt springen
Version: 3.1

Plattformbasis konfigurieren

Das Inventory ist die Soll-Konfiguration einer konkreten UDSP-Installation. Es legt Zielcluster, Plattformdomain, gemeinsame Dienste, Mandanten, aktivierte Komponenten, Persistenz und externe Zugänge fest.

Erstellen Sie ein Inventory immer aus der Vorlage des ausgewählten Releases:

cp 02_core_platform/default_inventory.yml \
inventories/customer-prod.yml

Ein Inventory aus einem anderen Release kann fehlende, umbenannte oder nicht mehr unterstützte Variablen enthalten. Erstellen Sie deshalb kein reduziertes Inventory vollständig von Hand.

Diese Seite führt zunächst durch die Entscheidungen des Standardpfads. Die vollständige Parameterreferenz am Ende bildet zusätzlich alle globalen Felder der releasegebundenen Vorlage ab – einschließlich optionaler und nur aus Kompatibilitätsgründen mitgeführter Werte.

Konfigurationsmodell

Eine Soll-Konfiguration

Drei Ebenen bestimmen die Installation

Werte werden von der Umgebung über die gemeinsame Plattformbasis bis zu den einzelnen Mandanten zunehmend spezifischer.

01
all.vars

Umgebung

Definiert die technische Identität und den Zugriff auf den Zielcluster.

  • DOMAIN
  • ENVIRONMENT
  • kubeconfig_file
  • Proxywerte
02
controller.vars

Plattformweite Basis

Konfiguriert Infrastrukturbezug und gemeinsam genutzte Plattformdienste.

  • inv_k8s
  • inv_email & inv_registry
  • Operatoren & Security
  • Observability & Backup
03
inv_tenants[]

Mandanten

Beschreibt Identität, Domain und aktivierte Komponenten jedes Mandanten.

  • Realm & Präfix
  • Mandantendomain
  • Datenpfade
  • Anwendungen

Ausgeführt auf localhost: full_install.yml liest die Werte unter controller; der Abschnitt kubernetes gehört ausschließlich zum separaten MicroK8s-Basiscluster.

Wiederkehrende Konventionen

Ein direkt unter einer Komponente stehendes enable ist immer deren Aktivierungsschalter:

  • enable: true nimmt die Komponente oder optionale Funktion in den Rollout auf.
  • enable: false überspringt sie beim Ausführen des Playbooks.

Beispielsweise stehen apisix, stellio, frost, grafana und pgadmin jeweils für die gleichnamigen UDSP-Komponenten. Ihre enable-Schalter werden deshalb in den folgenden Feldtabellen nicht wiederholt. Wichtig: Das spätere Umschalten auf false deinstalliert eine bereits vorhandene Komponente nicht automatisch.

Davon zu unterscheiden sind fachlich benannte Schalter wie mqtt_enable, ui_enabled, use_quantumleap oder enforce_policies. Sie verändern eine konkrete Funktion und werden deshalb bei der jeweiligen Komponente erläutert.

1. Globale Identität der Umgebung

all:
vars:
DOMAIN: "platform.example.org"
ENVIRONMENT: "prd"
kubeconfig_file: "customer-prod.conf"

HTTPS_PROXY: ""
HTTP_PROXY: ""
NO_PROXY: ""
https_proxy: ""
http_proxy: ""
no_proxy: ""
VariableBedeutungÄnderbarkeit nach Erstinstallation
DOMAINzentrale Plattformdomain für gemeinsame Dienstenur mit Migrationsplanung
ENVIRONMENTtechnischer Umgebungspräfix, beispielsweise dev, stg oder prdnicht nachträglich umbenennen
kubeconfig_fileDatei unter $HOME/.kube/änderbar, wenn sie auf denselben Zielcluster zeigt
Proxyvariablenausgehender HTTP-/HTTPS-Zugriff für Deployment und Komponentenänderbar; no_proxy sorgfältig pflegen

Verwenden Sie für DOMAIN und Mandantendomains nur Hostnamen, kein https:// und keinen abschließenden Slash.

2. Deployment-Umgebung und Cluster

children:
controller:
hosts:
localhost:
ansible_host: 127.0.0.1
ansible_connection: local
ansible_python_interpreter: "{{ ansible_playbook_python }}"
vars:
inv_k8s:
config:
context: "customer-prod"
ingress_class: "public"
disable_ipv6: false
storage_class:
rwo: "fast-rwo"
rwo_retain: "fast-rwo-retain"
provisioner: "csi.example.org"
cert_manager:
le_email: "platform-operations@example.org"
staging_issuer_name: "letsencrypt-staging"
prod_issuer_name: "letsencrypt-production"

Die Namen für Context, IngressClass und StorageClasses müssen exakt mit dem Zielcluster übereinstimmen. Die StorageClasses werden vor dem Rollout automatisch geprüft.

FeldBedeutungWas Sie eintragen
ansible_hostAdresse der Deployment-Umgebungfür den offiziellen lokalen Bereitstellungspfad 127.0.0.1 beibehalten
ansible_connectionArt der Ansible-Verbindunglocal, weil das Playbook auf derselben Deployment-Umgebung ausgeführt wird
ansible_python_interpreterPython-Laufzeit für die Ansible-Module{{ ansible_playbook_python }} verwendet dieselbe Python-Umgebung wie das gestartete Playbook
inv_k8s.config.contextKubeconfig-Context des Zielclustersexakt den mit kubectl config get-contexts geprüften Context
inv_k8s.ingress_classbereits vorhandene IngressClass für alle öffentlichen UDSP-Endpunktebeispielsweise public oder nginx
inv_k8s.disable_ipv6deaktiviert IPv6 in den dafür vorgesehenen APISIX-, Loki- und pgAdmin-Einstellungennur auf true setzen, wenn der Zielcluster beziehungsweise das Netzwerk kein IPv6 unterstützt
inv_k8s.storage_class.rwoStorageClass für reguläre ReadWriteOnce-Volumesden exakten Namen einer vorhandenen StorageClass
inv_k8s.storage_class.rwo_retainStorageClass für persistente Daten, die beim Löschen des Claims erhalten bleiben solleneine vorhandene StorageClass mit passender Retain-Strategie; in einer Sandbox kann sie mit rwo identisch sein
inv_k8s.storage_class.provisionerdokumentierter technischer CSI- beziehungsweise Storage-Provisionerden Provisioner der ausgewählten StorageClass eintragen, beispielsweise ebs.csi.aws.com; der aktuelle Rollout wählt seine Volumes über die beiden StorageClass-Namen aus

Zertifikatsausstellung konfigurieren

Der standardmäßige Bereitstellungspfad installiert cert-manager und erzeugt einen Staging- sowie einen Produktions-Issuer für Let's Encrypt. Die Namen und die Kontaktadresse werden im Clusterabschnitt des Inventory festgelegt:

inv_k8s:
ingress_class: "public"
cert_manager:
le_email: "platform-operations@example.org"
staging_issuer_name: "letsencrypt-staging"
prod_issuer_name: "letsencrypt-production"

Die konfigurierte IngressClass muss Port 80 für die ACME-HTTP-01-Challenge und Port 443 für die späteren HTTPS-Zugriffe erreichen. Die unter Voraussetzungen prüfen festgelegten Domains müssen bereits auf diesen Ingress-Endpunkt zeigen.

Prüfen Sie die Zertifikatsausstellung zunächst über den Staging-Issuer. Verwenden Sie den Produktions-Issuer erst, nachdem DNS, Ingress und die Challenge erfolgreich verifiziert wurden.

FeldBedeutung
le_emailKontaktadresse für das Let's-Encrypt-Konto und wichtige Zertifikatsmeldungen
staging_issuer_nameName des ClusterIssuers für Tests ohne produktive Rate Limits
prod_issuer_nameName des ClusterIssuers, den die öffentlichen UDSP-Ingresses für gültige Zertifikate referenzieren

3. Mail und Registries

SMTP-Konfiguration

inv_email beschreibt das zentrale SMTP-Konto, über das Keycloak und aktivierte Anwendungen beispielsweise Einladungen, Passwort-Resets, Benachrichtigungen oder Alarmmeldungen versenden.

inv_email:
server: "smtp.example.org"
port: "587"
user: "udsp-mailer"
password: "<secret>"
email_from: "no-reply@example.org"
FeldBedeutungWas Sie eintragen
serverHostname des SMTP-Serversnur den DNS-Namen, beispielsweise smtp.example.org, ohne https://
portNetzwerkport des SMTP-Dienstesüblicherweise 587 für authentifiziertes SMTP mit STARTTLS
usertechnischer SMTP-Benutzerdas eigens für die UDSP angelegte Versandkonto
passwordPasswort dieses Benutzersdas zugehörige Secret; verschlüsselt übergeben und nicht offen committen
email_fromsichtbare Absenderadresseeine vom SMTP-Server für dieses Konto erlaubte Adresse, beispielsweise no-reply@example.org

Der aktuelle Standardpfad erwartet SMTP-Authentifizierung und STARTTLS. Lassen Sie deshalb vorab prüfen, dass Konto, Port und Absenderadresse in dieser Kombination zugelassen sind.

Ein tatsächlich erreichbarer SMTP-Dienst ist nur erforderlich, wenn Keycloak oder eine aktivierte Anwendung E-Mails versenden soll. Der Block inv_email muss im aktuellen Inventory dennoch strukturell vorhanden bleiben: full_install.yml liest seine fünf Felder zu Beginn jedes Laufs ein. Für eine Umgebung ohne Mailversand können bewusst neutrale Platzhalter verwendet werden; produktive Zugangsdaten sind erst mit aktivierter E-Mail-Funktion erforderlich.

Container-Registries

inv_registry legt fest, von welchen Registry-Adressen die im UDSP-Release referenzierten Container-Images geladen werden.

inv_registry:
dockerio: "docker.io"
quayio: "quay.io"
github: "ghcr.io"
FeldVerwendet fürStandardwert
dockerioImages, deren Quellrepository auf Docker Hub liegt, beispielsweise Node-RED oder Velerodocker.io
quayioImages aus Quay.io, beispielsweise MinIO- oder cert-manager-Komponentenquay.io
githubImages aus der GitHub Container Registry; gemeint ist nicht ein Git-Repositoryghcr.io

Wenn der Cluster diese öffentlichen Registries direkt erreichen darf, bleiben die Standardwerte unverändert. In abgeschotteten Umgebungen können hier interne Mirrors oder Registry-Präfixe eingetragen werden.

Beispiel: Aus dockerio: "docker.io" und dem im Release definierten Repository nodered/node-red entsteht der vollständige Imagepfad docker.io/nodered/node-red. Bei einem internen Mirror muss derselbe nachgelagerte Repositorypfad dort verfügbar sein.

Die Werte werden vor die im Release definierten Imagepfade gesetzt. Tragen Sie deshalb kein https:// und keinen abschließenden Slash ein. Ein interner Mirror muss die erwarteten Repositorypfade vollständig bereitstellen. Diese drei Werte konfigurieren außerdem keine Zugangsdaten; erforderliche Image-Pull-Credentials und Netzwerkfreigaben müssen separat vorhanden sein.

4. Gemeinsame Plattformdienste

Gemeinsame Dienste werden einmal je Umgebung eingerichtet und stehen vor den Mandanten bereit.

inv_op_stack:
ns_name: "{{ ENVIRONMENT }}-operator-stack"
cert_manager_operator:
enable: true
ns_name: "{{ ENVIRONMENT }}-operator-stack"
postgres_operator:
enable: true
ns_name: "{{ ENVIRONMENT }}-operator-stack"
logical_backup:
enabled: false
endpoint: "https://s3.example.org"
bucket: "udsp-postgres-backups"
region: "eu-central-1"
access_key: "<secret>"
secret: "<secret>"
schedule: "0 0 * * *"
retention_time: "7 days"
minio_operator:
enable: true
enable_console_ingress: false
ns_name: "{{ ENVIRONMENT }}-operator-stack"
keycloak_operator:
enable: true
ns_name: "{{ ENVIRONMENT }}-operator-stack"
keel_operator:
enable: false
ns_name: "{{ ENVIRONMENT }}-operator-stack"
admin: "admin@{{ DOMAIN }}"
password: "<secret>"

inv_security:
ns_name: "{{ ENVIRONMENT }}-security-stack"
kyverno:
enable: true
enforce_policies: false
policy_reporter:
enable: true
ui_enabled: true
kyverno_plugin_enabled: true

Welche Komponenten damit konfiguriert werden

Inventory-BlockKomponente der UDSPAufgabe
cert_manager_operatorcert-managerstellt Zertifikatsressourcen und die automatische TLS-Erneuerung bereit
postgres_operatorPostgreSQLerzeugt und verwaltet über den Zalando PostgreSQL Operator die Datenbank-Cluster der Plattformkomponenten
minio_operatorMinIOverwaltet über den MinIO Operator mandantenbezogene MinIO-Instanzen und deren Speicher
keycloak_operatorKeycloakstellt über den Keycloak Operator die zentrale Keycloak-Instanz im Cluster bereit und gleicht deren Kubernetes-Zustand ab
keel_operatorKeelautomatisiert – sofern bewusst aktiviert – Image-Aktualisierungen von Workloads
kyvernoKyvernoprüft Kubernetes-Ressourcen gegen die mitgelieferten Sicherheitsrichtlinien
policy_reporterPolicy Reportersammelt und visualisiert die Ergebnisse der Kyverno-Prüfungen

Weitere Variablen

FeldBedeutung
inv_op_stack.ns_namegemeinsamer Namespace der Operatoren; die komponentenspezifischen ns_name-Werte sollten im Standardpfad darauf zeigen
postgres_operator.logical_backup.enabledaktiviert das gemeinsame S3-Ziel für alle komponentenbezogenen Schalter enable_logical_backup
postgres_operator.logical_backup.endpointS3-kompatibler Endpunkt des globalen PostgreSQL-Backupziels
postgres_operator.logical_backup.bucketvorhandener Bucket für logische Datenbank-Backups
postgres_operator.logical_backup.regionvom S3-Anbieter erwartete Region
postgres_operator.logical_backup.access_key / secretZugangsdaten eines technischen Kontos mit minimal erforderlichen Bucket-Rechten
postgres_operator.logical_backup.scheduleStandardzeitplan als Cron-Ausdruck
postgres_operator.logical_backup.retention_timeAufbewahrungsangabe des PostgreSQL-Operators, beispielsweise 7 days
minio_operator.enable_console_ingressveröffentlicht die MinIO-Operator-Konsole; nur nach bewusster Zugriffs- und Schutzbewertung aktivieren
keel_operator.admin / passwordadministrativer Zugang für Keel, sofern die Komponente aktiviert wird
inv_security.ns_nameNamespace für Kyverno und Policy Reporter, beispielsweise prd-security-stack
kyverno.enforce_policies: falseAudit-Modus: Verstöße werden gemeldet, neue oder geänderte Ressourcen aber nicht deshalb abgelehnt
kyverno.enforce_policies: trueEnforce-Modus: Kubernetes-Anfragen, die gegen die meisten mitgelieferten Regeln verstoßen, können blockiert werden
policy_reporter.ui_enabledstellt zusätzlich zur Reporter-API die administrative Weboberfläche bereit
policy_reporter.kyverno_plugin_enabledaktiviert die erweiterte Kyverno-Integration in der Reporter-Oberfläche

Der Policy Reporter wird im aktuellen Playbook innerhalb des Kyverno-Pfads installiert. Wird Kyverno deaktiviert, wird deshalb auch ein separat auf true gesetzter Policy Reporter nicht ausgerollt.

Die Reporter-UI wird nicht automatisch öffentlich bereitgestellt; das Playbook nennt nach der Installation einen kubectl port-forward-Aufruf für den administrativen Zugriff.

Für eine neue Umgebung sollte enforce_policies zunächst auf false bleiben. Prüfen Sie die entstehenden Reports, beheben oder begründen Sie Abweichungen und testen Sie anschließend true in Staging. Eine direkte Aktivierung kann verhindern, dass UDSP-Komponenten mit noch nicht policykonformen Manifests ausgerollt werden.

Aktuelle Ausnahme

Die Policy require-namespace-labels ist im derzeitigen Plattformcode fest auf Audit gesetzt. Sie blockiert deshalb auch bei enforce_policies: true keine Namespaces. Die übrigen mitgelieferten Validierungsregeln verwenden den Schalter.

Wichtige Beziehungen:

  • Keycloak, TimescaleDB, Stellio, FROST, GeoStack, Superset und CKAN verwenden den PostgreSQL-Operator.
  • Mandantenbezogene MinIO-Instanzen benötigen den MinIO-Operator.
  • Der Keycloak-Operator stellt die Keycloak-Instanz im Cluster bereit und hält deren Kubernetes-Ressourcen im gewünschten Zustand.
  • Realms, Clients, Rollen, Gruppen und Mappings werden anschließend durch die Ansible-Konfiguration des jeweiligen Mandanten beziehungsweise der jeweiligen Komponente über die Keycloak Admin API angelegt. Diese fachliche Keycloak-Konfiguration übernimmt nicht der Operator.
  • cert-manager wird von den standardmäßigen TLS-Ingresses erwartet.
  • Policy Reporter wird nur zusammen mit Kyverno installiert.

Aktivieren Sie postgres_operator.logical_backup.enabled erst, wenn das S3-Ziel vollständig eingerichtet und aus dem Cluster erreichbar ist. Dieses Ziel wird nicht nur für die mandantenbezogene PostgreSQL-/TimescaleDB verwendet, sondern auch für aktivierte logische Backups von Keycloak, Stellio, FROST, KomMonitor, Superset, CKAN und der Geo-Datenbank.

5. Observability und Backup

In diesem Abschnitt entscheiden Sie,

  • ob die UDSP Metriken, Logs, Dashboards und Alarmierungen selbst bereitstellt,
  • wie lange Metriken und Logs aufbewahrt werden,
  • wie viel persistenter Speicher die einzelnen Dienste anfordern und
  • ob Kubernetes-Ressourcen zusätzlich mit Velero gesichert werden.

Die Konfiguration hat zwei voneinander unabhängige Bereiche: inv_ml installiert den Observability-Stack, inv_velero den Backup-Dienst. Das folgende Beispiel zeigt nur die wichtigsten Stellgrößen. Behalten Sie die übrigen Felder aus dem default_inventory.yml des verwendeten Releases bei.

inv_ml:
enable: true
ns_name: "{{ ENVIRONMENT }}-observability-stack"
prometheus:
enable: true
replicas: 1
storage_size: 20Gi
retention_days: 14d
grafana:
enable: true
storage_size: 10Gi
alertmanager:
enable: true
replicas: 1
storage_size: 5Gi
loki:
enable: true
replicas: 1
retention_period: "168h"
storage_size: 20Gi
alloy:
enable: true
replicas: 1

inv_velero:
enable: false
ns_name: "velero"
operations_backup:
backup_storage_location: "primary-s3"
schedule: "0 0 * * *"
ttl: "168h0m0s"
exclude_namespaces:
- "velero"
- "kube-system"
- "kube-public"
- "kube-node-lease"
- "cloud-init-settings"
backup_storage_locations:
- location_name: "primary-s3"
endpoint: "https://s3.example.org"
bucket: "udsp-backups"
region: "eu-central-1"
access_key: "<secret>"
secret_key: "<secret>"
s3ForcePathStyle: "true"

Welche Komponenten damit konfiguriert werden

Inventory-BlockKomponente der UDSPAufgabe
prometheusPrometheussammelt und speichert Metriken aus Kubernetes und den Plattformdiensten
grafanaGrafana Monitoringvisualisiert zentrale Metriken und Logs für den Plattformbetrieb
alertmanagerAlertmanagergruppiert Alarme und leitet sie an konfigurierte Empfänger weiter
lokiLokispeichert und durchsucht zentral gesammelte Container-Logs
alloyGrafana Alloyliest Logs auf den Cluster-Nodes und sendet sie an Loki
inv_veleroVelerosichert Kubernetes-Ressourcen nach einem Zeitplan in ein externes S3-Backend

inv_ml.ns_name bestimmt den gemeinsamen Namespace des Observability-Stacks, beispielsweise prd-observability-stack. Prometheus, Grafana und Alertmanager werden gemeinsam über den Prometheus-Kube-Stack installiert. Wird Prometheus deaktiviert, werden dadurch auch Grafana und Alertmanager aus diesem Helm-Release nicht ausgerollt. Loki und Alloy werden dagegen separat installiert.

Metriken, Dashboards und Alarmierung

FeldBedeutungAuswirkung des Beispielwerts
prometheus.replicasAnzahl der Prometheus-Instanzen1: keine redundante Prometheus-Instanz
prometheus.storage_sizeangeforderte PVC-Größe je Prometheus-Instanz20Gi: bei einer Replik ein PVC mit 20 GiB
prometheus.retention_dayszeitliche Aufbewahrung der Metriken14d: Messwerte werden 14 Tage vorgehalten
grafana.storage_sizePVC für Grafana-Konfiguration, Plugins und lokale Zustände10Gi; die eigentlichen Prometheus-Metriken liegen nicht in diesem Volume
alertmanager.replicasAnzahl der Alertmanager-Instanzen1: keine redundante Alertmanager-Instanz
alertmanager.storage_sizeangeforderte PVC-Größe je Alertmanager-Instanz5Gi für Alarmzustände und Silences

retention_days begrenzt die Aufbewahrungszeit, nicht automatisch den maximal belegten Speicher. Ist das PVC vorher voll, gehen keine zusätzlichen 14 Tage hinein. Dimensionieren Sie storage_size deshalb anhand der Anzahl überwachter Targets, der Scrape-Intervalle und des gemessenen Wachstums in einer Testumgebung.

Logs sammeln und speichern

FeldBedeutungAuswirkung des Beispielwerts
loki.replicasAnzahl der Loki-Single-Binary-Instanzen1: eine Loki-Instanz; das aktuelle Profil verwendet einen Replikationsfaktor von 1
loki.retention_periodzeitliche Aufbewahrung der Logs168h: sieben Tage
loki.storage_sizeangeforderte PVC-Größe je Loki-Instanz20Gi für Index- und Logdaten
alloy.replicasim Inventory vorhandener ChartwertIm aktuellen UDSP-Profil läuft Alloy als DaemonSet. Die tatsächliche Pod-Anzahl folgt daher den geeigneten Cluster-Nodes und nicht diesem Wert.

Loki und Alloy erfüllen unterschiedliche Aufgaben: Alloy sammelt, Loki speichert und durchsucht. Wird Loki aktiviert, Alloy aber deaktiviert, entsteht dadurch noch kein automatischer Logfluss. Umgekehrt benötigt Alloy ein konfiguriertes Ziel für die gesammelten Logs.

Backup mit Velero

FeldBedeutungWas Sie festlegen
ns_nameNamespace der Velero-Installationim Standard velero; dieser Namespace gehört auch in die Ausschlussliste
operations_backup.backup_storage_locationlogischer Name des S3-Ziels für den primären Sicherungsplanmuss auf location_name eines Eintrags unter backup_storage_locations verweisen
operations_backup.scheduleAusführungszeit als Cron-Ausdruck0 0 * * * startet die Sicherung täglich um Mitternacht
operations_backup.ttlAufbewahrungsdauer eines Velero-Backups168h0m0s entspricht sieben Tagen
operations_backup_2optionaler zweiter Sicherungsplan mit denselben Feldernfür ein unabhängiges zweites S3-Ziel verwenden; dessen eigener Aktivierungsschalter bleibt andernfalls false
exclude_namespacesNamespaces, die nicht in den Sicherungsplan aufgenommen werdenmindestens Velero selbst und die bewusst nicht zu sichernden System-Namespaces
location_nameinterne Kennung eines S3-Backendsohne das automatisch angehängte Suffix -backup eintragen
endpointvollständige URL der S3-kompatiblen APIbeispielsweise https://s3.example.org
bucketvorhandener Bucket für die Backupobjekteeigener, ausschließlich für diesen Sicherungspfad vorgesehener Bucket
regionvom S3-Anbieter erwartete Regionden exakten Anbieterwert verwenden
access_key / secret_keyZugangsdaten des technischen S3-Kontosnur mit minimal erforderlichen Bucket-Rechten und verschlüsselt ablegen
s3ForcePathStyleerzwingt S3-Pfadstil statt virtueller Bucket-Hostnamenfür viele S3-kompatible Dienste "true"; nach Vorgabe des Anbieters setzen

Ist Velero deaktiviert, werden weder der Dienst noch seine Zeitpläne installiert. Das deaktiviert nicht automatisch separate logische Datenbank-Backups. Aktivieren Sie Velero erst, wenn alle oben genannten Werte gepflegt sind, und führen Sie anschließend einen dokumentierten Wiederherstellungstest durch.

Velero ersetzt im aktuellen Rollout kein Datenbank-Backup

Die erzeugten Zeitpläne setzen snapshotVolumes: false. Sie sichern Kubernetes-Ressourcen, erstellen aber keine Snapshots der Persistent Volumes. Für PostgreSQL-Daten und andere zustandsbehaftete Dienste müssen deshalb zusätzlich die vorgesehenen logischen oder storage-spezifischen Backups aktiviert und separat wiederhergestellt werden können.

Startwerte sind keine Produktionsdimensionierung

Die angegebenen Replik- und Speicherwerte eignen sich als Ausgangspunkt für eine kleine Umgebung. Für Produktion müssen Ausfallsicherheit, PVC-Gesamtbedarf, Metrik- und Logwachstum, Aufbewahrungsfristen sowie das Backupziel gemeinsam geplant werden. Mehrere Repliken ersetzen kein Backup.

6. Identität, Verfügbarkeit und HYPERSENSUS

Die folgenden drei Blöcke schließen die gemeinsame Plattformbasis ab:

  • inv_idm legt den zentralen Keycloak-Zugang und dessen Betriebswerte fest.
  • inv_replicas übersetzt das gewählte Betriebsprofil in tatsächliche Komponenteninstanzen.
  • inv_hypersensus konfiguriert die nach den Mandanten installierte gemeinsame Plattformoberfläche.
inv_idm:
ns_name: "{{ ENVIRONMENT }}-idm-stack"
db_ns_name: "{{ ENVIRONMENT }}-idm-db-stack"
platform:
admin_first_name: "Platform"
admin_surname: "Admin"
admin_email: "admin@{{ DOMAIN }}"
master_username: "admin@{{ DOMAIN }}"
master_password: "<secret>"
keycloak:
realm_name: "operations"
k8s_secret_name: "master-secret"
scope: "openid"
enable_events: false
enable_adminEvents: false
log_level: "INFO"
theme: "ocp-custom"
theme_url: "https://gitlab.com/urban-dataspace-platform/customization/-/raw/htag_26/keycloak/minimum/theme.jar"
enable_logical_backup: false
group:
default_tenant_name: "default_dataspace"

inv_replicas:
keycloak:
db: 1
app: 1
gravitee:
api_mgmt: 1
gateway: 1
api_mgmt:
apisix: 1
etcd: 1
frost:
db: 1
mqtt: 1
http: 1
timescale:
db: 1
cm:
api_gateway: 1
kafka: 1
postgresql: 1
search_service: 1
subscription_service: 1

inv_hypersensus:
enable: true
version: "v2.0.0"
# backend_flask_secret: "<secret>"
frontend:
common_url: "{{ DOMAIN }}"
# nextauth_secret: "<secret>"
tenant_dropdown_enabled: false
registry:
username: ""
password: ""
# proxy:
# http: "http://proxy.example.org:3128"
# https: "http://proxy.example.org:3128"
# no_proxy: "localhost,127.0.0.1,.svc,.cluster.local"

Die Standardwerte mit jeweils einer Instanz erzeugen keine vollständige Redundanz der Plattformdienste – auch dann nicht, wenn der Kubernetes-Cluster selbst aus mehreren Workern besteht. Legen Sie Replikate deshalb zusammen mit Quorum-Anforderungen, verfügbarer Kapazität und der tatsächlichen Ausfallsicherheitsstrategie fest.

Für Keycloak und HYPERSENSUS müssen stabile Secrets vor dem produktiven Rollout festgelegt und verschlüsselt abgelegt werden. Automatisch erzeugte Laufzeitwerte erschweren ansonsten die reproduzierbare Wiederherstellung.

Alle Felder dieser Blöcke und ihre zulässigen Werte stehen zusätzlich in der vollständigen Parameterreferenz.

7. Mandanten

inv_tenants ist eine YAML-Liste. Jeder Eintrag legt die Identität und die gemeinsamen Werte eines technisch getrennten Mandanten fest. Die darunter folgenden Anwendungsblöcke werden anschließend auf der separaten Seite Mandanten konfigurieren ergänzt.

inv_tenants:
- tenant_realm: "stadt-a"
display_name: "Stadt A"
tenant_domain: "a.platform.example.org"
tenant_prefix: "stadta"

mailserver:
user: "{{ inv_email.user }}"
password: "{{ inv_email.password }}"
server: "{{ inv_email.server }}"
port: "{{ inv_email.port }}"
email_from: "{{ inv_email.email_from }}"

# ... Komponenten von Stadt A ...

- tenant_realm: "stadt-b"
display_name: "Stadt B"
tenant_domain: "b.platform.example.org"
tenant_prefix: "stadtb"

mailserver:
user: "{{ inv_email.user }}"
password: "{{ inv_email.password }}"
server: "{{ inv_email.server }}"
port: "{{ inv_email.port }}"
email_from: "{{ inv_email.email_from }}"

# ... Komponenten von Stadt B ...
FeldVerwendungWas Sie festlegen
tenant_prefixPräfix für Kubernetes-Namespaces und technische Ressourcennamenkurze, eindeutige und dauerhaft stabile Kennung des Mandanten
tenant_realmName des Keycloak-Realm und fachliche Mandantenidentitäteindeutigen Realm-Namen ohne URL verwenden
display_namelesbarer Name in Oberflächen und mandantenbezogenen Konfigurationenoffizieller Anzeigename, beispielsweise Stadt Beispiel
tenant_domainBasisdomain der öffentlich erreichbaren Mandantenendpunktevorhandenen DNS-Namen ohne https:// und ohne Pfad
mailserver.*SMTP-Konfiguration dieses Mandantenim Standard die zentralen Werte aus inv_email übernehmen; nur bei einem abweichenden Mandantenkonto ändern

Für jeden weiteren Mandanten wird ein vollständiger zusätzlicher Listeneintrag angelegt. tenant_realm, tenant_prefix und die vorgesehenen Domains müssen eindeutig sein. Vor dem Rollout müssen DNS, Mailkonfiguration, benötigte Kapazität und externe Zugänge auch für diesen Mandanten bereitstehen.

Ein Präfix wie stadta erzeugt zusammen mit ENVIRONMENT: prd beispielsweise Namespaces wie stadta-prd-ngsi-stack oder stadta-prd-data-management-stack. Ändern Sie den Präfix deshalb nach der Erstinstallation nicht ohne Migrationsplanung.

Welche Komponenten unter dem jeweiligen Listeneintrag ergänzt werden und was deren weitere Variablen bedeuten, beschreibt der nächste Schritt: Mandanten konfigurieren.

8. Secrets sicher behandeln

Das Inventory kann Passwörter, API-Schlüssel, Registry Tokens und S3-Credentials enthalten.

  • Committen Sie produktive Inventories nicht unverschlüsselt.
  • Verwenden Sie Ansible Vault oder geschützte CI/CD-Dateivariablen.
  • Trennen Sie Inventories für Entwicklung, Staging und Produktion.
  • Verwenden Sie Deploy Tokens mit minimal erforderlichen Rechten.
  • Rotieren Sie Zugangsdaten, wenn ein Inventory ungeschützt weitergegeben wurde.
  • Prüfen Sie Logs auf versehentlich ausgegebene Secrets; nicht alle älteren Tasks verwenden durchgehend no_log.

Beispiel mit Ansible Vault:

ansible-vault encrypt inventories/customer-prod.yml
ansible-playbook \
-i inventories/customer-prod.yml \
--ask-vault-pass \
-l localhost \
02_core_platform/full_install.yml

Inventory validieren

ansible-inventory \
-i inventories/customer-prod.yml \
--graph

ansible-playbook \
-i inventories/customer-prod.yml \
-l localhost \
02_core_platform/full_install.yml \
--syntax-check

Anschließend kann die im Playbook enthaltene Clusterprüfung separat ausgeführt werden:

ansible-playbook \
-i inventories/customer-prod.yml \
-l localhost \
02_core_platform/full_install.yml \
--tags validation

--syntax-check prüft Struktur und importierte Tasks, aber weder Erreichbarkeit noch fachliche Konsistenz. Die Validierung ersetzt deshalb keinen Staging-Rollout.

Vollständige Parameterreferenz

Releasegebundene Referenz

Alle Felder der Plattformbasis

Die Tabellen bilden die einstellbaren globalen Felder des Default-Inventory ab. Kommentierte optionale Felder und mitgeführte Kompatibilitätsblöcke sind ausdrücklich gekennzeichnet. Die Vorlage des tatsächlich verwendeten Releases bleibt strukturell maßgeblich.

Umgebung, Quellen und Proxy

Globale Werte unter all.vars. Sie gelten unabhängig vom einzelnen Mandanten.

Inventory-PfadBedeutungErwarteter Wert
DOMAINBasisdomain der gemeinsamen Plattformdienste.Hostname ohne Protokoll oder Pfad
ENVIRONMENTStabiler technischer Präfix der Umgebung.dev, stg oder prd
kubeconfig_fileKubeconfig-Datei unter $HOME/.kube/.Dateiname, nicht der vollständige Pfad
HELM_REPOSITORYKompatibilitätsfeld für einen vorgeschalteten Helm-Proxy.Leer lassen, solange der verwendete Release es nicht auswertet
OPERATOR_STACKGemeinsamer Namespace der Plattformoperatoren.Üblicherweise {{ ENVIRONMENT }}-operator-stack
proxy_stateKompatibilitätsfeld für die Proxyverwaltung älterer Bereitstellungspfade.present oder absent; im aktuellen Plattform-Playbook ohne Wirkung
HTTP_PROXY / HTTPS_PROXYProxywerte für Komponenten und Tasks mit Großschreibung.Vollständige Proxy-URL oder leer
http_proxy / https_proxyDieselben Proxywerte für Werkzeuge mit Kleinschreibung.Vollständige Proxy-URL oder leer
NO_PROXY / no_proxyZiele, die den Proxy umgehen müssen.Kommagetrennte Hosts, Domains, Service- und Clusternetze
enterprise_root_certOptionale Unternehmens-CA für Komponenten wie Grafana, Node-RED, CKAN, Superset und GeoServer.PEM-kodiertes Zertifikat; Feld weglassen, wenn nicht benötigt

Mitgeführter Base-Cluster-Abschnitt

Der Block all.children.kubernetes stammt aus dem früher kombinierten Inventory. full_install.yml verwendet ihn nicht. Für ein separat aufgebautes Basiscluster ist heute das base-cluster-Repository maßgeblich.

Inventory-PfadBedeutungErwarteter Wert
kubernetes.hosts.<host>.ansible_hostAdresse eines durch das alte Cluster-Playbook verwalteten Servers.IP-Adresse oder DNS-Name
kubernetes.hosts.<host>.ansible_python_interpreterPython-Interpreter auf diesem Server.Üblicherweise /usr/bin/python3
kubernetes.hosts.<host>.ansible_ssh_private_key_fileSSH-Schlüssel für den alten Cluster-Aufbau.Geschützter lokaler Dateipfad
kubernetes.hosts.localhost.ansible_connectionLokale Verbindung für den Controller-Eintrag.local
platform_default_userSSH-Benutzer des alten MicroK8s-Bereitstellungspfads.Vorhandener Benutzer mit den erforderlichen Rechten
microk8s_versionZu installierender MicroK8s-Channel.Beispielsweise 1.25/stable
microk8s_dnsOptionale Upstream-DNS-Server für MicroK8s.Kommagetrennte IP-Adressen
microk8s_openebs_addonAktivierung des früher verwendeten OpenEBS-Add-ons.enable oder disable
default_storage_classStandard-StorageClass des alten Basisclusters.Name einer vorhandenen StorageClass
k8s_ingress_classIngressClass des alten Basisclusters.Beispielsweise public
gitlab_domainDomain einer optionalen GitLab-Installation im alten Clusterpfad.Hostname
RUNNER_REGISTRATION_TOKENRegistrierungstoken des früheren GitLab-Runner-Pfads.Geschütztes Token

Deployment-Umgebung und Kubernetes

Der Controller-Block bestimmt, wo Ansible läuft und gegen welchen Cluster der Rollout ausgeführt wird.

Inventory-PfadBedeutungErwarteter Wert
controller.hosts.localhost.ansible_hostLokale Controller-Adresse.127.0.0.1
controller.hosts.localhost.ansible_connectionVerbindungsart der offiziellen lokalen Bereitstellung.local
controller.hosts.localhost.ansible_python_interpreterPython-Interpreter der Ansible-Module.{{ ansible_playbook_python }} bei einer virtuellen Umgebung
inv_k8s.config.contextKubeconfig-Context des Zielclusters.Exakt vorhandener Context
inv_k8s.ingress_classIngressClass aller öffentlichen Plattformendpunkte.Exakter Name im Zielcluster
inv_k8s.disable_ipv6Deaktiviert IPv6 in dafür vorgesehenen Komponenteneinstellungen.true oder false
inv_k8s.storage_class.rwoStorageClass für reguläre ReadWriteOnce-Volumes.Exakter StorageClass-Name
inv_k8s.storage_class.rwo_retainStorageClass für besonders zu erhaltende Daten.Exakter StorageClass-Name mit bewusst gewählter Reclaim Policy
inv_k8s.storage_class.provisionerDokumentierter CSI- beziehungsweise Storage-Provisioner.Provisioner-Name der StorageClass
inv_k8s.gitlab_access.user_emailE-Mail des mitgeführten GitLab-Zugangs.E-Mail-Adresse; aktueller Plattformpfad wertet das Feld nicht direkt aus
inv_k8s.gitlab_access.userBenutzer des mitgeführten GitLab-Zugangs.Benutzername; aktueller Plattformpfad wertet das Feld nicht direkt aus
inv_k8s.gitlab_access.tokenToken des mitgeführten GitLab-Zugangs.Geschütztes Token; aktueller Plattformpfad wertet das Feld nicht direkt aus
inv_k8s.cert_manager.le_emailKontaktadresse des ACME-Kontos.Gültige betriebliche E-Mail-Adresse
inv_k8s.cert_manager.staging_issuer_nameName des Test-ClusterIssuers.DNS-konformer Kubernetes-Name
inv_k8s.cert_manager.prod_issuer_nameName des produktiven ClusterIssuers.DNS-konformer Kubernetes-Name

Mail und Container-Registries

Zentrale Kommunikationswerte und Präfixe der vom Release verwendeten Imagequellen.

Inventory-PfadBedeutungErwarteter Wert
inv_email.serverHostname des SMTP-Servers.DNS-Name ohne Protokoll
inv_email.portPort des SMTP-Dienstes.Üblicherweise 587 für STARTTLS
inv_email.userTechnischer SMTP-Benutzer.Vom Mailbetreiber bereitgestelltes Konto
inv_email.passwordPasswort des SMTP-Benutzers.Secret
inv_email.email_fromErlaubte Absenderadresse.Gültige E-Mail-Adresse
inv_registry.dockerioRegistry-Präfix für Images von Docker Hub.docker.io oder internes Mirror-Präfix
inv_registry.quayioRegistry-Präfix für Images von Quay.io.quay.io oder internes Mirror-Präfix
inv_registry.githubRegistry-Präfix für GitHub Container Registry.ghcr.io oder internes Mirror-Präfix

Operatoren und logische PostgreSQL-Backups

Operatoren werden einmal je Plattformumgebung installiert. Der PostgreSQL-Operator stellt zusätzlich ein gemeinsames S3-Ziel für aktivierte logische Datenbank-Backups bereit.

Inventory-PfadBedeutungErwarteter Wert
inv_op_stack.ns_nameGemeinsamer Namespace der Operatoren.DNS-konformer Namespace
inv_op_stack.cert_manager_operator.enable / ns_nameAktiviert cert-manager und legt dessen Namespace fest.true oder false; Namespace
inv_op_stack.postgres_operator.enable / ns_nameAktiviert den PostgreSQL-Operator und legt dessen Namespace fest.true oder false; Namespace
inv_op_stack.postgres_operator.logical_backup.enabledAktiviert die globale Unterstützung logischer PostgreSQL-Backups.true oder false
inv_op_stack.postgres_operator.logical_backup.endpointS3-kompatibler Endpunkt des Backupziels.Vom Anbieter erwartete URL
inv_op_stack.postgres_operator.logical_backup.bucketBucket für die logischen Datenbank-Backups.Vorhandener Bucketname
inv_op_stack.postgres_operator.logical_backup.regionS3-Region des Buckets.Exakter Anbieterwert
inv_op_stack.postgres_operator.logical_backup.access_keyTechnischer Zugriffsschlüssel.Secret mit minimalen Bucket-Rechten
inv_op_stack.postgres_operator.logical_backup.secretGeheimer Schlüssel des technischen S3-Kontos.Secret
inv_op_stack.postgres_operator.logical_backup.scheduleStandardzeitplan der logischen Backups.Cron-Ausdruck
inv_op_stack.postgres_operator.logical_backup.retention_timeAufbewahrung durch den PostgreSQL-Operator.PostgreSQL-Dauer, z. B. 7 days oder 2 weeks
inv_op_stack.minio_operator.enable / ns_nameAktiviert den MinIO-Operator und legt dessen Namespace fest.true oder false; Namespace
inv_op_stack.minio_operator.enable_console_ingressVeröffentlicht die Operator-Konsole über einen Ingress.true oder false; nur nach bewusster Zugriffsbewertung aktivieren
inv_op_stack.keycloak_operator.enable / ns_nameAktiviert den Keycloak-Operator und legt dessen Namespace fest.true oder false; Namespace
inv_op_stack.keel_operator.enable / ns_nameAktiviert Keel und legt dessen Namespace fest.true oder false; Namespace
inv_op_stack.keel_operator.adminAdministrativer Keel-Benutzer.E-Mail-Adresse
inv_op_stack.keel_operator.passwordPasswort des Keel-Administrators.Secret

Zentrale Identität mit Keycloak

inv_idm beschreibt die gemeinsame Keycloak-Instanz. Die Mandanten-Realms werden später unter inv_tenants ergänzt.

Inventory-PfadBedeutungErwarteter Wert
inv_idm.ns_nameNamespace der Keycloak-Anwendung.Üblicherweise {{ ENVIRONMENT }}-idm-stack
inv_idm.db_ns_nameNamespace der Keycloak-Datenbank.Üblicherweise {{ ENVIRONMENT }}-idm-db-stack
inv_idm.platform.admin_first_nameVorname des initialen Plattformadministrators.Freier Text
inv_idm.platform.admin_surnameNachname des initialen Plattformadministrators.Freier Text
inv_idm.platform.admin_emailKontakt- und Benutzeradresse des Plattformadministrators.Gültige E-Mail-Adresse
inv_idm.platform.master_usernameAnmeldename des initialen Master-Administrators.Im Standard dieselbe E-Mail-Adresse
inv_idm.platform.master_passwordInitiales Master-Passwort.Starkes Secret
inv_idm.keycloak.realm_nameName des gemeinsamen Betriebs-Realm.Stabiler Realm-Name, im Standard operations
inv_idm.keycloak.k8s_secret_nameKubernetes-Secret mit dem administrativen Zugang.DNS-konformer Secret-Name
inv_idm.keycloak.scopeStandard-OIDC-Scope.Im Standard openid
inv_idm.keycloak.enable_eventsSpeichert Benutzerereignisse in Keycloak.true oder false
inv_idm.keycloak.enable_adminEventsSpeichert administrative Ereignisse.true oder false
inv_idm.keycloak.log_levelLog-Level der Keycloak-Laufzeit.Unterstützter Keycloak-Level, z. B. INFO
inv_idm.keycloak.themeName des aktiven Keycloak-Themes.Im Theme-Artefakt vorhandener Name
inv_idm.keycloak.theme_urlBezugsadresse des Theme-Artefakts.Erreichbare HTTPS-URL
inv_idm.keycloak.enable_logical_backupAktiviert das logische Backup der Keycloak-Datenbank.true oder false; globales PostgreSQL-Backupziel erforderlich
inv_idm.group.default_tenant_nameVoreingestellte Datenraumgruppe neuer Plattformbenutzer.Existierender Gruppenname

Gemeinsame Namespaces und Komponentenvorgaben

Diese Blöcke liefern Namespaces und gemeinsame Laufzeitwerte, die von den mandantenbezogenen Komponenten verwendet werden.

Inventory-PfadBedeutungErwarteter Wert
inv_am.apim.ns_nameNamespace des nur noch für Bestandsinstallationen vorgesehenen Gravitee-Pfads.Namespace
inv_am.apim.management_log_levelLog-Level der Gravitee-Verwaltung.Unterstützter Log-Level
inv_am.apim.gateway_log_levelLog-Level des Gravitee-Gateways.Unterstützter Log-Level
inv_am.apim.default_basic_authLegacy-Basic-Auth-Wert für Gravitee.Secret; nur für Bestandsinstallationen
inv_am.apim.portal_applicationAnzeigename der Legacy-Portal-Anwendung.Freier Text
inv_am.apisix.ns_nameGemeinsamer APISIX-Namespace.Üblicherweise {{ ENVIRONMENT }}-api-management-stack
inv_am.apisix.loki_namespaceNamespace des von APISIX verwendeten Loki-Ziels.Namespace der internen oder externen Loki-Installation
inv_am.apisix.prometheus_namespaceNamespace des von APISIX verwendeten Prometheus-Ziels.Namespace der internen oder externen Prometheus-Installation
inv_cm.fiware.ns_nameNamespace des Legacy-FIWARE-Pfads.Namespace
inv_cm.frost.ns_nameBasisname des FROST-Namespace.Namespace
inv_cm.stellio.ns_nameBasisname des Stellio-Namespace.Namespace
inv_cm.stellio.set_tcp_keepaliveOptionaler TCP-Keepalive-Workaround für Stellio.true oder false; Feld nur bei bekannten Idle-Verbindungsproblemen ergänzen
inv_dm.ns_nameGemeinsamer Namespace der Datenmanagementdienste.Namespace
inv_dm.grafana.rbac.createLässt das Grafana-Chart eigene RBAC-Ressourcen erzeugen.true oder false
inv_dm.grafana.rbac.psp_enabledLegacy-Schalter für PodSecurityPolicies.Im Standard false
inv_dm.grafana.rbac.psp_use_app_armorLegacy-AppArmor-Schalter des Grafana-Charts.Im Standard false
inv_dm.grafana.service_account.createLässt das Grafana-Chart einen ServiceAccount erzeugen.true oder false
inv_dm.grafana.datasources.timescale_nameAnzeigename der TimescaleDB-Datenquelle.Freier, in Grafana eindeutiger Name
inv_dm.grafana.datasources.stellio_postgres_nameAnzeigename der Stellio-PostgreSQL-Datenquelle.Freier, in Grafana eindeutiger Name
inv_kom.ns_nameBasisname des KomMonitor-Namespace.Namespace
inv_gd.ns_nameGlobaler Basisname des GeoStack-Namespace.Namespace
inv_documentation.ns_nameNamespace einer gemeinsam genutzten Dokumentationsinstanz.Namespace

Policy-Prüfung

Kyverno prüft Kubernetes-Ressourcen; Policy Reporter bereitet die Ergebnisse administrativ auf.

Inventory-PfadBedeutungErwarteter Wert
inv_security.ns_nameGemeinsamer Namespace des Security-Stacks.Namespace
inv_security.kyverno.enableInstalliert Kyverno und die mitgelieferten Regeln.true oder false
inv_security.kyverno.enforce_policiesWechselt unterstützte Regeln von Audit auf Enforce.false für Beobachtung; true erst nach Prüfung in Staging
inv_security.policy_reporter.enableInstalliert Policy Reporter zusammen mit Kyverno.true oder false
inv_security.policy_reporter.ui_enabledAktiviert die administrative Reporter-Weboberfläche.true oder false
inv_security.policy_reporter.kyverno_plugin_enabledAktiviert die erweiterte Kyverno-Integration der Reporter-UI.true oder false

Observability

inv_ml steuert Metriken, Dashboards, Alerting, Logs, Langzeitarchivierung und Datenbankexporter.

Inventory-PfadBedeutungErwarteter Wert
inv_ml.enable / ns_nameAktiviert den Observability-Stack und legt dessen Namespace fest.true oder false; Namespace
inv_ml.thanos.enableAktiviert die langfristige Prometheus-Ablage über Thanos.true oder false
inv_ml.thanos.unique_labels[].key / valueKennzeichnet Metriken dieser Plattforminstanz eindeutig.Mindestens ein stabiles Schlüssel-Wert-Paar
inv_ml.thanos.s3_storage.bucketBucket der Thanos-Langzeitablage.Vorhandener Bucketname
inv_ml.thanos.s3_storage.endpointS3-Endpunkt für Thanos.Hostname ohne http:// oder https:// gemäß Inventory-Vorlage
inv_ml.thanos.s3_storage.regionS3-Region für Thanos.Exakter Anbieterwert
inv_ml.thanos.s3_storage.access_key / secret_keyZugang des technischen Thanos-Kontos.Secrets mit minimalen Bucket-Rechten
inv_ml.prometheus.enable / replicasAktiviert Prometheus und legt dessen Instanzzahl fest.true oder false; positive Ganzzahl
inv_ml.prometheus.storage_sizePVC-Größe je Prometheus-Instanz.Kubernetes-Größe
inv_ml.prometheus.retention_daysZeitliche Aufbewahrung der Metriken.Prometheus-Dauer, z. B. 14d
inv_ml.grafana.enableAktiviert das Grafana des Observability-Stacks.true oder false
inv_ml.grafana.deploy_default_dashboardsInstalliert die mitgelieferten Plattformdashboards.true oder false
inv_ml.grafana.storage_sizePVC-Größe von Grafana.Kubernetes-Größe
inv_ml.grafana.deploy_dashboards.minioInstalliert die mitgelieferten MinIO-Dashboards.true oder false
inv_ml.grafana.deploy_dashboards.apisixInstalliert die mitgelieferten APISIX-Dashboards.true oder false
inv_ml.alertmanager.enable / replicasAktiviert Alertmanager und legt dessen Instanzzahl fest.true oder false; positive Ganzzahl
inv_ml.alertmanager.storage_sizePVC-Größe je Alertmanager-Instanz.Kubernetes-Größe
inv_ml.alertmanager.ingress.enableVeröffentlicht Alertmanager über einen Ingress.true oder false; Zugriffsschutz vorher bewerten
inv_ml.alertmanager.receivers.slack_webhook_backupSlack-Ziel für Backup-Alarme.Webhook-URL oder leer
inv_ml.alertmanager.receivers.slack_webhook_postgresSlack-Ziel für PostgreSQL-Alarme.Webhook-URL oder leer
inv_ml.alertmanager.receivers.slack_webhook_criticalSlack-Ziel für kritische Plattformalarme.Webhook-URL oder leer
inv_ml.alertmanager.receivers.slack_webhook_warningSlack-Ziel für Warnungen.Webhook-URL oder leer
inv_ml.alertmanager.critical_alerts[]Alarmnamen, die als kritisch weitergeleitet werden.Liste vorhandener Prometheus-Alertnamen
inv_ml.alertmanager.warning_alerts[]Alarmnamen, die als Warnung weitergeleitet werden.Liste vorhandener Prometheus-Alertnamen
inv_ml.loki.enable / replicasAktiviert Loki und legt dessen Instanzzahl fest.true oder false; positive Ganzzahl
inv_ml.loki.deploy_default_dashboardsInstalliert die mitgelieferten Loki-Dashboards.true oder false
inv_ml.loki.retention_periodZeitliche Aufbewahrung der Logs.Dauer, z. B. 168h
inv_ml.loki.storage_sizePVC-Größe je Loki-Instanz.Kubernetes-Größe
inv_ml.loki.memory_limitMemory-Limit der Loki-Container.Kubernetes-Speicherwert
inv_ml.loki.gateway_replicasReplikate des Loki-Gateways.Positive Ganzzahl
inv_ml.promtail.enableAktiviert den älteren Promtail-Logsammler.true oder false; im Standard durch Alloy ersetzt
inv_ml.alloy.enable / replicasAktiviert Grafana Alloy; der aktuelle Rollout betreibt es als DaemonSet.true oder false; replicas ist im Inventory vorhanden, bestimmt aber nicht die Podzahl
inv_ml.exporters.postgres_exporter.enableExportiert PostgreSQL-Metriken nach Prometheus.true oder false
inv_ml.exporters.patroni_exporter.enableExportiert Patroni-Metriken nach Prometheus.true oder false

Velero

inv_velero installiert den Backupdienst und definiert globale Sicherungspläne sowie ein oder mehrere S3-Ziele.

Inventory-PfadBedeutungErwarteter Wert
inv_velero.enable / ns_nameAktiviert Velero und legt dessen Namespace fest.true oder false; Namespace
inv_velero.certificateOptionale CA für ein S3-Ziel mit eigener PKI.PEM-kodiertes Zertifikat
inv_velero.operations_backup.backup_storage_locationLogischer Name des primären S3-Ziels.location_name eines Eintrags unter backup_storage_locations
inv_velero.operations_backup.schedule / ttlZeitplan und Aufbewahrung des primären Backups.Cron-Ausdruck; Go-Dauer
inv_velero.operations_backup_2.enableAktiviert einen zweiten globalen Sicherungsplan.true oder false
inv_velero.operations_backup_2.backup_storage_locationLogischer Name des zweiten S3-Ziels.Vorhandener location_name
inv_velero.operations_backup_2.schedule / ttlZeitplan und Aufbewahrung des zweiten Backups.Cron-Ausdruck; Go-Dauer
inv_velero.exclude_namespaces[]Namespaces, die nicht gesichert werden.Liste vorhandener Namespace-Namen
inv_velero.backup_storage_locations[].location_nameInterne Kennung eines S3-Ziels.Eindeutiger Name ohne automatisch angehängtes -backup
inv_velero.backup_storage_locations[].endpointS3-kompatibler Endpunkt.Vollständige URL
inv_velero.backup_storage_locations[].bucketBucket des Backupziels.Vorhandener Bucketname
inv_velero.backup_storage_locations[].regionRegion des S3-Ziels.Exakter Anbieterwert
inv_velero.backup_storage_locations[].access_key / secret_keyZugang des technischen Backupkontos.Secrets mit minimalen Bucket-Rechten
inv_velero.backup_storage_locations[].s3ForcePathStyleErzwingt Pfadstil für kompatible S3-Dienste."true" oder "false" nach Anbietervorgabe

Replikate der Plattformkomponenten

inv_replicas übersetzt das gewählte Betriebsprofil in die tatsächliche Anzahl zustandsbehafteter und zustandsloser Instanzen.

Inventory-PfadBedeutungErwarteter Wert
inv_replicas.keycloak.db / keycloak.appInstanzen der Keycloak-Datenbank und -Anwendung.Positive Ganzzahlen
inv_replicas.gravitee.api_mgmt / gravitee.gatewayReplikate des Legacy-Gravitee-Pfads.Positive Ganzzahlen
inv_replicas.api_mgmt.apisix / api_mgmt.etcdReplikate von APISIX und dessen etcd.Positive Ganzzahlen
inv_replicas.frost.db / frost.mqtt / frost.httpDatenbank-, MQTT- und HTTP-Instanzen von FROST.Positive Ganzzahlen
inv_replicas.timescale.dbInstanzen der mandantenbezogenen TimescaleDB.Positive Ganzzahl
inv_replicas.cm.api_gatewayReplikate des Stellio-API-Gateways.Positive Ganzzahl
inv_replicas.cm.kafkaReplikate der internen Stellio-Kafka-Laufzeit.Positive Ganzzahl passend zum Kafka-Quorum
inv_replicas.cm.postgresqlInstanzen der Stellio-Datenbank.Positive Ganzzahl
inv_replicas.cm.search_serviceReplikate des Stellio-Suchdienstes.Positive Ganzzahl
inv_replicas.cm.subscription_serviceReplikate des Stellio-Subscription-Dienstes.Positive Ganzzahl

HYPERSENSUS

Die mandantenübergreifende Oberfläche wird nach den einzelnen Mandanten installiert und verwendet deren Identitäten und Datenbankverbindungen.

Inventory-PfadBedeutungErwarteter Wert
inv_hypersensus.enableAktiviert HYPERSENSUS.true oder false
inv_hypersensus.versionGemeinsamer Image-Tag von Frontend und Backend.Freigegebener Versions-Tag
inv_hypersensus.backend_flask_secretOptional vorgegebener stabiler Backend-Schlüssel.Starkes Secret; wird sonst erzeugt
inv_hypersensus.frontend.common_urlGemeinsamer öffentlicher Hostname.Hostname ohne Protokoll; leer deaktiviert den gemeinsamen Einstieg
inv_hypersensus.frontend.nextauth_secretOptional vorgegebener stabiler NextAuth-Session-Schlüssel.Starkes Secret
inv_hypersensus.frontend.tenant_dropdown_enabledZeigt die Mandantenauswahl am gemeinsamen Einstieg.true oder false
inv_hypersensus.registry.username / passwordZugang zu privaten HYPERSENSUS-Artefakten.Deploy Token oder leer bei öffentlich erreichbaren Artefakten
inv_hypersensus.proxy.http / proxy.https / proxy.no_proxyOptionaler komponentenspezifischer Proxy.Proxy-URLs und kommagetrennte Ausnahmen

Optionaler GitLab Runner

Dieser globale Dienst ist kein notwendiger Bestandteil einer Standardinstallation und wird nur für bewusst integrierte CI/CD-Szenarien aktiviert.

Inventory-PfadBedeutungErwarteter Wert
inv_gitlab_runner.enableInstalliert einen GitLab Runner im Cluster.true oder false
inv_gitlab_runner.ns_nameNamespace des Runners.DNS-konformer Namespace
inv_gitlab_runner.tokenRunner-Token des vorgesehenen GitLab-Projekts oder der Gruppe.Geschütztes Token
inv_gitlab_runner.urlAdresse der zugehörigen GitLab-Instanz.Vollständige HTTPS-URL