Auswahl der Plattform-Komponenten
Festlegen, welche Schichten angepasst werden sollen (zum Beispiel Runtime, Datenbetrieb, Integrationskontrollen).
Zuletzt aktualisiert am
Migrieren Sie Spring Boot und PostgreSQL auf SKE und PostgreSQL Flex: Quelle und Ziel vorbereiten, Datenübernahme proben, Cutover prüfen und Betrieb übergeben.
Bestätigen Sie die zwei bewussten Ersetzungen: Aus einem VM-Service wird ein Kubernetes-Deployment, aus VM-lokalem PostgreSQL wird PostgreSQL Flex. Behalten Sie Spring-Music-JAR und fachliches Verhalten bei; dies ist Replatform, kein VM-Rehost oder Anwendungs-Refactor.
Replatform behält das Kernverhalten der Anwendung bei, ändert aber ausgewählte Plattform-Komponenten, um betriebliche oder wirtschaftliche Vorteile zu erreichen. Der Ansatz liegt zwischen Rehost und Refactor.
Auswahl der Plattform-Komponenten
Festlegen, welche Schichten angepasst werden sollen (zum Beispiel Runtime, Datenbetrieb, Integrationskontrollen).
Kompatibilitätsgrenzen
Technische Randbedingungen und Fallback-Optionen vorab prüfen.
Risikogesteuerte Sequenzierung
Änderungen so staffeln, dass in einem Cutover-Fenster nicht zu viele Unbekannte zusammenkommen.
Nachweise und Abnahme
Messbare Verbesserungen für Performance, Stabilität und Betriebsaufwand definieren.
Für zustandsbehaftete Workloads müssen Verantwortlichkeiten in Quelle und Ziel der Datenplattform vor dem Runtime-Cutover eindeutig festgelegt werden.
Landing-Zone-Controls und Guardrails als Ausgangspunkt für den Replatform-Pfad festlegen. Plattformvoraussetzungen für Runtime-, Daten- und Integrations-Schichten früh absichern, damit Substitutionen ohne Bruch in Governance und Betrieb eingeführt werden können.
Zielplattform-Mapping für den Replatform-Pfad über Runtime, Daten und Schnittstellen festlegen. Abhängigkeiten inklusive Identität, Netzwerk und Daten-Verantwortung explizit dokumentieren, damit jeder Wechsel vor Cutover einzeln validiert werden kann.
Erforderliche Plattform-Voraussetzungen und Sequenz für den kontrollierten Wechsel definieren. Rollback-Leitplanken, Readiness-Gates und Run-Ownership festlegen, damit Wellen auch bei mehreren gleichzeitigen Plattformänderungen planbar bleiben.
STACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Diese Architektur überführt die VM-basierte Spring-Boot- und PostgreSQL-Quelle in eine Kubernetes-Laufzeit mit Managed-Datenbank auf STACKIT. Dasselbe Anwendungs-JAR bleibt erhalten, während sich Bereitstellung, Deployment, Traffic-Steuerung, Daten-Recovery und Betriebsverantwortung ändern.
Die Referenzbasis verwendet einen SKE-Worker und PostgreSQL Flex mit Envoy Gateway, STACKIT DNS und Observability. Die zusätzlichen Dienste und die Multi-Zonen-Topologie des nachfolgenden optionalen Erweiterungsmusters werden nicht bereitgestellt.
Ein Init-Container prüft die Prüfsumme des auf einen Commit fixierten JARs, bevor Java startet. Anwendungscontainer sind austauschbar: Die maßgeblichen Albumdaten liegen in PostgreSQL Flex, nicht im Pod-Dateisystem oder auf einem Kubernetes PersistentVolume. Kubernetes Secrets liefern Datenbankzugangsdaten; eine externe Secret-Manager-Integration ist in dieser Basis nicht implementiert.
Die Flex-ACL verwendet standardmäßig die tatsächlichen SKE-Egress-CIDRs. Anwendung und Migrationsclient benötigen verschlüsselte Datenbankverbindungen. Der Migrationsclient verwendet eine isolierte Probedatenbank und ersetzt Anwendungsdaten erst nach expliziter Freigabe und verifiziertem Backup vor dem Cutover. Für den dumpbasierten Pfad sind weder eine Verbindung zur Datenbank der Quell-VM noch eine temporäre öffentliche Flex-ACL nötig.
Terraform installiert Envoy Gateway und anschließend ein lokales Routing-Chart. Der Anwendungs-Service ist vom Typ ClusterIP; Envoy stellt den öffentlichen LoadBalancer bereit. SKE-verwaltetes ExternalDNS veröffentlicht den HTTPRoute-Hostnamen anhand der Gateway-Adresse. Dies ist Gateway API, kein älterer Ingress-Controller und kein separat bereitgestellter STACKIT Application Load Balancer Service.
HTTP ist der getestete Standard. Stellen Sie für HTTPS ein vertrauenswürdiges TLS-Secret bereit
und konfigurieren Sie gateway_tls_secret_name nach dem Repository-Verfahren. Ausstellung und
Erneuerung von Zertifikaten bleiben externe Aufgaben. Die separaten Metrik-Listener sind in der
Referenz öffentlich und ohne Authentifizierung erreichbar; schützen Sie sie vor sensibler Nutzung.
Boot 2 Actuator bindet an das pod-lokale Loopback; der Metrikadapter veröffentlicht ausgewählte Messwerte. PostgreSQL-Exporter und SKE-Monitoring-Integration beliefern Observability. Terraform erstellt Grafana-Ordner und Dashboard. Dessen Verfügbarkeit allein weist jedoch weder Anwendungszustand noch durchgängiges Scraping oder funktionierende Alarmzustellung nach.
Die getestete Worker-Anzahl, der HTTP-Endpunkt und die Beispielanwendung bilden eine funktionale Basis, keine hochverfügbare Produktionsarchitektur. Wählen Sie eine unterstützte SKE-Version und passende Zonenkapazität. Bewerten Sie mehrere Worker, Zonenverteilung, Disruption Budgets, Replikasicherheit, Datenbankverfügbarkeit und das Traffic-Routing als separate Designentscheidungen mit Ausfalltests.
Der Datenbank-Rollback stellt das Ziel vor dem Cutover wieder her; Managed-Flex-Backups dienen der Service-Recovery. Keiner der beiden Wege leitet Benutzer automatisch zur Quell-VM zurück. Definieren Sie Schreibverantwortung, Befugnis zur Traffic-Umschaltung, Rollback-Deadline, Aufbewahrung und Recovery-Ziele vor der Migration.
Das folgende umfassendere Design zeigt mögliche Ergänzungen, keine vom Referenz-Terraform erstellten Ressourcen. Weitere Node Pools, Topologieregeln, persistente Volumes, RabbitMQ, Object Storage und Secret Manager benötigen eigene Implementierung, Verantwortlichkeiten und Validierung. Nutzen Sie sie nur bei nachgewiesener Workload-Anforderung; leiten Sie aus dem Diagramm keine Hochverfügbarkeit ab.
cp env.tfvars.example env.tfvarsservice_account_key_path = "/path/to/stackit-sa-key.json"create_project = truetarget_project_owner_email = "owner@sa.stackit.cloud"parent_container_id = "cmf-parent-container-id"ske_cluster_name = "rpltfk8s01"observability_instance_name = "cmf-rpltf-observability"dns_zone_name = "cmf-example.runs.onstackit.cloud"dns_zone_display_name = "cmf-example"observability_enabled = truecreate_observability_instance = truedns_enabled = truecreate_dns_zone = truedeploy_workload = trueenable_postgres_flex = trueenable_springboot_hpa = falseenable_load_generator = falsespringboot_replicas = 1deploy_postgres_migration_job = falsecreate_grafana_dashboard = trueflags.env):setup_project=truesetup_observability=truesetup_database=truesetup_workload=truesetup_loadgen=falsesetup_dns=trueterraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanErwartetes Ergebnis: springboot_url erreicht die Anwendung über das Gateway, die Anwendung
nutzt PostgreSQL Flex und grafana_dashboard_url öffnet das verwaltete Dashboard. Die
Bereitstellung importiert keine Quelldaten. Führen Sie nach der Zielvalidierung den separaten
Probe- und Cutover-Workflow aus; lassen Sie HPA während der gesamten Migration deaktiviert.
STACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenDieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenÜberführen Sie die Spring-Music-Anwendung von einer VM zu STACKIT Kubernetes Engine und ihre Daten von selbstverwaltetem PostgreSQL zu PostgreSQL Flex. Behalten Sie Anwendungs-JAR und fachliches Verhalten bei und führen Sie Kubernetes-Deployment, Gateway API, DNS und Managed Observability ein.
Dieses Runbook beschreibt die Freigaben und die betriebliche Reihenfolge rund um die Befehle
von scripts/migrate_postgres.py im Referenzrepository. Infrastrukturbereitstellung und
Datenbankaustausch sind getrennte Vorgänge. Ein erfolgreiches Terraform-Apply ist keine Migrationsabnahme.
Die Referenz migriert das Schema public und validiert public.album anhand von Zeilenanzahl
und deterministischem Fingerprint. Die getestete Eingabe ist das Rehost-Beispiel mit acht Alben,
kein Export einer Live-Quelle. Ein realer Workload benötigt einen eigenen kompatiblen Export,
eine Schemabewertung, fachliche Tests und Recovery-Ziele. Geben Sie Ausfallzeit frei: Dies ist
eine Migration mit Schreibstopp und Dump/Restore, keine Replikation oder unterbrechungsfreie Umschaltung.
Das Ziel verwendet eine eigene Anwendungs- und Probedatenbank, Datenbankverbindungen mit TLS-Pflicht und einen temporären clusterinternen Migrationsclient. Das Skript stoppt weder Quellschreiber noch schaltet es Client-Traffic um, konfiguriert öffentliches TLS oder automatisiert den Failback zur Quelle. Diese Aufgaben liegen beim Betreiber.
| Rolle | Verantwortete Entscheidung oder Nachweis |
|---|---|
| Migrationsleitung | Zeitfenster, Kontrollpunkte, Go/No-Go-Befugnis, Rollback-Deadline und Incident-Koordination |
| Anwendungsverantwortliche | Vollständige Erfassung der Schreiber, Quellschreibstopp, fachliche Abnahme und Abgleich von Schreibzugriffen nach dem Cutover |
| Plattform-Engineering | Freigegebener Terraform-Plan, SKE-Zugriff, Gateway- und DNS-Bereitschaft, pausierte Reconciliation |
| Datenbankverantwortliche | Konsistente Quellnachweise, Probe, geschütztes Backup, Restore-Integrität und Rollback-Ausführung |
| Betriebsverantwortliche | Telemetrie, Incident-Zuweisung, Recovery-Verantwortung, Aufbewahrung und Ende der Stabilisierung |
Diese Freigabepunkte erläutern das Kontrollmodell. Die folgenden Abschnitte liefern das ausführbare Verfahren und die Nachweisanforderungen für den technischen Walkthrough.
Bestätigen Sie Schreibkontrolle, pausierte Reconciliation, Verantwortlichkeiten, Abnahmekriterien und Rollback-Deadline.
bash scripts/validate_gateway.sh ausführen und Workload-Rollout sowie PostgreSQL-Konnektivität prüfen.enable_springboot_hpa = false, enable_load_generator = false und deploy_postgres_migration_job = false setzen; diese Einstellungen vor dem Pausieren der Infrastrukturautomatisierung anwenden.python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runpython3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicNehmen Sie nur mit übereinstimmenden Datennachweisen, erfolgreichen Clientanfragen, gesunder Laufzeit und tatsächlicher Telemetrie ab.
| Freigabepunkt | Erforderlicher Nachweis |
|---|---|
| Datenintegrität | Prüfsumme des Quellmanifests, erwartete Anzahl und Fingerprint stimmen mit dem wiederhergestellten Ziel überein; das Migrationsjournal benennt das richtige Projekt und die Datenbank |
| Laufzeit | Ursprüngliche Replikazahl wiederhergestellt, gesunder Rollout, keine unerklärten Neustarts oder Verbindungsfehler |
| Netzwerkverkehr | Gateway akzeptiert, HTTPRoute-Referenzen aufgelöst, DNS entspricht dem Gateway, tatsächliche Clientanfragen erreichen das beabsichtigte Ziel |
| Fachliches Verhalten | Migrierte Alben sichtbar und freigegebene Benutzerabläufe erfolgreich; Schreibtests besitzen einen vereinbarten Bereinigungs- und Abgleichplan |
| Datenbanktransport | Anwendung und Migration verlangen TLS; ACL erlaubt nur freigegebenes SKE-Egress oder explizit genehmigte Ausnahmen |
| Observability | Beide Scrape-Jobs liefern tatsächliche up=1-Messwerte, der Exporter meldet Datenbankzustand und Dashboard-Werte entsprechen dem Workload |
| Recovery | Backup vor dem Cutover, Prüfsumme, ursprünglicher Fingerprint und Journal privat aufbewahrt und in geschützten dauerhaften Speicher kopiert |
| Konfiguration | Geprüfter Plan nach der Migration ohne unerklärte Ressourcendrift; Betriebszustände von Quelle und Ziel dokumentiert |
Ein erfolgreicher öffentlicher HTTP-Aufruf erfüllt allein keine produktive HTTPS-Anforderung. Das Beispiel-Dashboard ersetzt keine unabhängige fachliche, Latenzperzentil-, Fehlerraten- oder Recovery-Validierung.
Stellen Sie bei einem freigegebenen Auslöser das geschützte Ziel wieder her; gleichen Sie Schreibzugriffe nach dem Cutover ab und entscheiden Sie den Quell-Failback separat.
Treffen Sie die vereinbarte Entscheidung vor der Deadline, wenn Dateninvarianten verletzt sind, ein kritischer fachlicher Ablauf nicht im Fehlerbehebungsfenster wiederhergestellt werden kann, Zielinstabilität die Abnahmegrenzen überschreitet oder keine vertrauenswürdige Telemetrie festgestellt werden kann. Bewahren Sie Migrationsjournal und Logs auf.
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDie Rückkehr der Benutzer zur VM ist eine separate Entscheidung: Quellintegrität bestätigen, angenommene Zielschreibzugriffe abgleichen, Client-Traffic nach dem freigegebenen Verfahren umleiten und genau einer Seite Schreibzugriffe erlauben. Der Restore des Ziels vor dem Cutover allein führt diese Schritte nicht aus.
Schlägt der Cutover fehl, bevor ein gültiges Backup dokumentiert ist, prüfen Sie Journal und
Datenbank gemeinsam mit den Datenbankverantwortlichen. Überschreiben Sie niemals das
Nachweisverzeichnis und starten Sie den Cutover nicht blind erneut. Prüfen Sie nach einem
beendeten Prozess verbliebene Pods mit Präfix springmusic-migration-* und das gestoppte
Deployment, bevor Sie fortfahren. Die lokale Migrationssperre koordiniert keine unterschiedlichen Ausführungshosts.
Übergeben Sie Konfiguration, Abnahmenachweise, Dashboards, Incident-Verantwortung und Entscheidungen zur Quellaufbewahrung.
Übergeben Sie den geprüften Konfigurationsstand, Workload- und Gateway-Inventar, Quellmanifest, Migrationsjournal, Backup-Orte, Abnahmeergebnisse, Dashboard-URL und Rollback-Entscheidung. Halten Sie Zugangsdaten aus dem Übergabedokument heraus und verweisen Sie auf den freigegebenen Secret-Speicher.
Vereinbaren Sie ein zum Workload passendes anfängliches Stabilisierungsfenster von 24 bis 72 Stunden. Benennen Sie Incident- und Datenbank-Recovery-Verantwortliche, bestätigen Sie Aufbewahrungs- und Restore-Verfahren und testen Sie Alarmzustellung, bevor Sie sich darauf verlassen. Flex-Backups ergänzen Migrationsdumps; ein verifizierter Dump-Rollback ist kein Nachweis für Managed-Service-Recovery.
Beenden Sie die Stabilisierung nur bei dauerhaft gesundem fachlichem Verhalten, vollständiger Telemetrie, ohne ungelöste kritische Probleme und mit Betriebsfreigabe. Nehmen Sie pausierte Automatisierung bewusst wieder auf. Bewahren Sie Quelldaten und geschützte Nachweise auf, bis die vereinbarten Aufbewahrungs- und Abgleichkriterien die Stilllegung erlauben. Beginnen Sie HPA- und Kapazitätsexperimente erst nach der Stabilisierung in einem separaten Änderungsfenster.
| Kontrollpunkt | Verantwortliche Rolle | Zeitstempel | Ergebnis | Nachweisreferenz |
|---|---|---|---|---|
| Ziel und Clientpfad bereit | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Geschützter Eintrag |
| Quellschreibstopp und finaler Export | Anwendungs- und Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Manifest und Freigabe |
| Finale Probe abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Probejournal |
| Backup vor dem Cutover nachgewiesen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Backup-Prüfsumme und Restore-Ergebnis |
| Cutover und Integrität abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Migrationsjournal |
| Fachlichkeit und Netzwerkverkehr abgenommen | Anwendungsverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Test- und Routing-Nachweise |
| Drift und Telemetrie geprüft | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Plan- und Metriknachweise |
| Übergabe oder Rollback abgeschlossen | Migrationsleitung | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Unterzeichnete Entscheidung |
STACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Überführen Sie die Spring-Music-Anwendung von einer VM zu STACKIT Kubernetes Engine und ihre Daten von selbstverwaltetem PostgreSQL zu PostgreSQL Flex. Behalten Sie Anwendungs-JAR und fachliches Verhalten bei und führen Sie Kubernetes-Deployment, Gateway API, DNS und Managed Observability ein.
Dieses Runbook beschreibt die Freigaben und die betriebliche Reihenfolge rund um die Befehle
von scripts/migrate_postgres.py im Referenzrepository. Infrastrukturbereitstellung und
Datenbankaustausch sind getrennte Vorgänge. Ein erfolgreiches Terraform-Apply ist keine Migrationsabnahme.
Die Referenz migriert das Schema public und validiert public.album anhand von Zeilenanzahl
und deterministischem Fingerprint. Die getestete Eingabe ist das Rehost-Beispiel mit acht Alben,
kein Export einer Live-Quelle. Ein realer Workload benötigt einen eigenen kompatiblen Export,
eine Schemabewertung, fachliche Tests und Recovery-Ziele. Geben Sie Ausfallzeit frei: Dies ist
eine Migration mit Schreibstopp und Dump/Restore, keine Replikation oder unterbrechungsfreie Umschaltung.
Das Ziel verwendet eine eigene Anwendungs- und Probedatenbank, Datenbankverbindungen mit TLS-Pflicht und einen temporären clusterinternen Migrationsclient. Das Skript stoppt weder Quellschreiber noch schaltet es Client-Traffic um, konfiguriert öffentliches TLS oder automatisiert den Failback zur Quelle. Diese Aufgaben liegen beim Betreiber.
| Rolle | Verantwortete Entscheidung oder Nachweis |
|---|---|
| Migrationsleitung | Zeitfenster, Kontrollpunkte, Go/No-Go-Befugnis, Rollback-Deadline und Incident-Koordination |
| Anwendungsverantwortliche | Vollständige Erfassung der Schreiber, Quellschreibstopp, fachliche Abnahme und Abgleich von Schreibzugriffen nach dem Cutover |
| Plattform-Engineering | Freigegebener Terraform-Plan, SKE-Zugriff, Gateway- und DNS-Bereitschaft, pausierte Reconciliation |
| Datenbankverantwortliche | Konsistente Quellnachweise, Probe, geschütztes Backup, Restore-Integrität und Rollback-Ausführung |
| Betriebsverantwortliche | Telemetrie, Incident-Zuweisung, Recovery-Verantwortung, Aufbewahrung und Ende der Stabilisierung |
Diese Freigabepunkte erläutern das Kontrollmodell. Die folgenden Abschnitte liefern das ausführbare Verfahren und die Nachweisanforderungen für den technischen Walkthrough.
Bestätigen Sie Schreibkontrolle, pausierte Reconciliation, Verantwortlichkeiten, Abnahmekriterien und Rollback-Deadline.
bash scripts/validate_gateway.sh ausführen und Workload-Rollout sowie PostgreSQL-Konnektivität prüfen.enable_springboot_hpa = false, enable_load_generator = false und deploy_postgres_migration_job = false setzen; diese Einstellungen vor dem Pausieren der Infrastrukturautomatisierung anwenden.python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runpython3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicNehmen Sie nur mit übereinstimmenden Datennachweisen, erfolgreichen Clientanfragen, gesunder Laufzeit und tatsächlicher Telemetrie ab.
| Freigabepunkt | Erforderlicher Nachweis |
|---|---|
| Datenintegrität | Prüfsumme des Quellmanifests, erwartete Anzahl und Fingerprint stimmen mit dem wiederhergestellten Ziel überein; das Migrationsjournal benennt das richtige Projekt und die Datenbank |
| Laufzeit | Ursprüngliche Replikazahl wiederhergestellt, gesunder Rollout, keine unerklärten Neustarts oder Verbindungsfehler |
| Netzwerkverkehr | Gateway akzeptiert, HTTPRoute-Referenzen aufgelöst, DNS entspricht dem Gateway, tatsächliche Clientanfragen erreichen das beabsichtigte Ziel |
| Fachliches Verhalten | Migrierte Alben sichtbar und freigegebene Benutzerabläufe erfolgreich; Schreibtests besitzen einen vereinbarten Bereinigungs- und Abgleichplan |
| Datenbanktransport | Anwendung und Migration verlangen TLS; ACL erlaubt nur freigegebenes SKE-Egress oder explizit genehmigte Ausnahmen |
| Observability | Beide Scrape-Jobs liefern tatsächliche up=1-Messwerte, der Exporter meldet Datenbankzustand und Dashboard-Werte entsprechen dem Workload |
| Recovery | Backup vor dem Cutover, Prüfsumme, ursprünglicher Fingerprint und Journal privat aufbewahrt und in geschützten dauerhaften Speicher kopiert |
| Konfiguration | Geprüfter Plan nach der Migration ohne unerklärte Ressourcendrift; Betriebszustände von Quelle und Ziel dokumentiert |
Ein erfolgreicher öffentlicher HTTP-Aufruf erfüllt allein keine produktive HTTPS-Anforderung. Das Beispiel-Dashboard ersetzt keine unabhängige fachliche, Latenzperzentil-, Fehlerraten- oder Recovery-Validierung.
Stellen Sie bei einem freigegebenen Auslöser das geschützte Ziel wieder her; gleichen Sie Schreibzugriffe nach dem Cutover ab und entscheiden Sie den Quell-Failback separat.
Treffen Sie die vereinbarte Entscheidung vor der Deadline, wenn Dateninvarianten verletzt sind, ein kritischer fachlicher Ablauf nicht im Fehlerbehebungsfenster wiederhergestellt werden kann, Zielinstabilität die Abnahmegrenzen überschreitet oder keine vertrauenswürdige Telemetrie festgestellt werden kann. Bewahren Sie Migrationsjournal und Logs auf.
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDie Rückkehr der Benutzer zur VM ist eine separate Entscheidung: Quellintegrität bestätigen, angenommene Zielschreibzugriffe abgleichen, Client-Traffic nach dem freigegebenen Verfahren umleiten und genau einer Seite Schreibzugriffe erlauben. Der Restore des Ziels vor dem Cutover allein führt diese Schritte nicht aus.
Schlägt der Cutover fehl, bevor ein gültiges Backup dokumentiert ist, prüfen Sie Journal und
Datenbank gemeinsam mit den Datenbankverantwortlichen. Überschreiben Sie niemals das
Nachweisverzeichnis und starten Sie den Cutover nicht blind erneut. Prüfen Sie nach einem
beendeten Prozess verbliebene Pods mit Präfix springmusic-migration-* und das gestoppte
Deployment, bevor Sie fortfahren. Die lokale Migrationssperre koordiniert keine unterschiedlichen Ausführungshosts.
Übergeben Sie Konfiguration, Abnahmenachweise, Dashboards, Incident-Verantwortung und Entscheidungen zur Quellaufbewahrung.
Übergeben Sie den geprüften Konfigurationsstand, Workload- und Gateway-Inventar, Quellmanifest, Migrationsjournal, Backup-Orte, Abnahmeergebnisse, Dashboard-URL und Rollback-Entscheidung. Halten Sie Zugangsdaten aus dem Übergabedokument heraus und verweisen Sie auf den freigegebenen Secret-Speicher.
Vereinbaren Sie ein zum Workload passendes anfängliches Stabilisierungsfenster von 24 bis 72 Stunden. Benennen Sie Incident- und Datenbank-Recovery-Verantwortliche, bestätigen Sie Aufbewahrungs- und Restore-Verfahren und testen Sie Alarmzustellung, bevor Sie sich darauf verlassen. Flex-Backups ergänzen Migrationsdumps; ein verifizierter Dump-Rollback ist kein Nachweis für Managed-Service-Recovery.
Beenden Sie die Stabilisierung nur bei dauerhaft gesundem fachlichem Verhalten, vollständiger Telemetrie, ohne ungelöste kritische Probleme und mit Betriebsfreigabe. Nehmen Sie pausierte Automatisierung bewusst wieder auf. Bewahren Sie Quelldaten und geschützte Nachweise auf, bis die vereinbarten Aufbewahrungs- und Abgleichkriterien die Stilllegung erlauben. Beginnen Sie HPA- und Kapazitätsexperimente erst nach der Stabilisierung in einem separaten Änderungsfenster.
| Kontrollpunkt | Verantwortliche Rolle | Zeitstempel | Ergebnis | Nachweisreferenz |
|---|---|---|---|---|
| Ziel und Clientpfad bereit | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Geschützter Eintrag |
| Quellschreibstopp und finaler Export | Anwendungs- und Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Manifest und Freigabe |
| Finale Probe abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Probejournal |
| Backup vor dem Cutover nachgewiesen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Backup-Prüfsumme und Restore-Ergebnis |
| Cutover und Integrität abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Migrationsjournal |
| Fachlichkeit und Netzwerkverkehr abgenommen | Anwendungsverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Test- und Routing-Nachweise |
| Drift und Telemetrie geprüft | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Plan- und Metriknachweise |
| Übergabe oder Rollback abgeschlossen | Migrationsleitung | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Unterzeichnete Entscheidung |
Überführen Sie die Spring-Music-Anwendung von einer VM zu STACKIT Kubernetes Engine und ihre Daten von selbstverwaltetem PostgreSQL zu PostgreSQL Flex. Behalten Sie Anwendungs-JAR und fachliches Verhalten bei und führen Sie Kubernetes-Deployment, Gateway API, DNS und Managed Observability ein.
Dieses Runbook beschreibt die Freigaben und die betriebliche Reihenfolge rund um die Befehle
von scripts/migrate_postgres.py im Referenzrepository. Infrastrukturbereitstellung und
Datenbankaustausch sind getrennte Vorgänge. Ein erfolgreiches Terraform-Apply ist keine Migrationsabnahme.
Die Referenz migriert das Schema public und validiert public.album anhand von Zeilenanzahl
und deterministischem Fingerprint. Die getestete Eingabe ist das Rehost-Beispiel mit acht Alben,
kein Export einer Live-Quelle. Ein realer Workload benötigt einen eigenen kompatiblen Export,
eine Schemabewertung, fachliche Tests und Recovery-Ziele. Geben Sie Ausfallzeit frei: Dies ist
eine Migration mit Schreibstopp und Dump/Restore, keine Replikation oder unterbrechungsfreie Umschaltung.
Das Ziel verwendet eine eigene Anwendungs- und Probedatenbank, Datenbankverbindungen mit TLS-Pflicht und einen temporären clusterinternen Migrationsclient. Das Skript stoppt weder Quellschreiber noch schaltet es Client-Traffic um, konfiguriert öffentliches TLS oder automatisiert den Failback zur Quelle. Diese Aufgaben liegen beim Betreiber.
| Rolle | Verantwortete Entscheidung oder Nachweis |
|---|---|
| Migrationsleitung | Zeitfenster, Kontrollpunkte, Go/No-Go-Befugnis, Rollback-Deadline und Incident-Koordination |
| Anwendungsverantwortliche | Vollständige Erfassung der Schreiber, Quellschreibstopp, fachliche Abnahme und Abgleich von Schreibzugriffen nach dem Cutover |
| Plattform-Engineering | Freigegebener Terraform-Plan, SKE-Zugriff, Gateway- und DNS-Bereitschaft, pausierte Reconciliation |
| Datenbankverantwortliche | Konsistente Quellnachweise, Probe, geschütztes Backup, Restore-Integrität und Rollback-Ausführung |
| Betriebsverantwortliche | Telemetrie, Incident-Zuweisung, Recovery-Verantwortung, Aufbewahrung und Ende der Stabilisierung |
Diese Freigabepunkte erläutern das Kontrollmodell. Die folgenden Abschnitte liefern das ausführbare Verfahren und die Nachweisanforderungen für den technischen Walkthrough.
Bestätigen Sie Schreibkontrolle, pausierte Reconciliation, Verantwortlichkeiten, Abnahmekriterien und Rollback-Deadline.
bash scripts/validate_gateway.sh ausführen und Workload-Rollout sowie PostgreSQL-Konnektivität prüfen.enable_springboot_hpa = false, enable_load_generator = false und deploy_postgres_migration_job = false setzen; diese Einstellungen vor dem Pausieren der Infrastrukturautomatisierung anwenden.python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runpython3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicNehmen Sie nur mit übereinstimmenden Datennachweisen, erfolgreichen Clientanfragen, gesunder Laufzeit und tatsächlicher Telemetrie ab.
| Freigabepunkt | Erforderlicher Nachweis |
|---|---|
| Datenintegrität | Prüfsumme des Quellmanifests, erwartete Anzahl und Fingerprint stimmen mit dem wiederhergestellten Ziel überein; das Migrationsjournal benennt das richtige Projekt und die Datenbank |
| Laufzeit | Ursprüngliche Replikazahl wiederhergestellt, gesunder Rollout, keine unerklärten Neustarts oder Verbindungsfehler |
| Netzwerkverkehr | Gateway akzeptiert, HTTPRoute-Referenzen aufgelöst, DNS entspricht dem Gateway, tatsächliche Clientanfragen erreichen das beabsichtigte Ziel |
| Fachliches Verhalten | Migrierte Alben sichtbar und freigegebene Benutzerabläufe erfolgreich; Schreibtests besitzen einen vereinbarten Bereinigungs- und Abgleichplan |
| Datenbanktransport | Anwendung und Migration verlangen TLS; ACL erlaubt nur freigegebenes SKE-Egress oder explizit genehmigte Ausnahmen |
| Observability | Beide Scrape-Jobs liefern tatsächliche up=1-Messwerte, der Exporter meldet Datenbankzustand und Dashboard-Werte entsprechen dem Workload |
| Recovery | Backup vor dem Cutover, Prüfsumme, ursprünglicher Fingerprint und Journal privat aufbewahrt und in geschützten dauerhaften Speicher kopiert |
| Konfiguration | Geprüfter Plan nach der Migration ohne unerklärte Ressourcendrift; Betriebszustände von Quelle und Ziel dokumentiert |
Ein erfolgreicher öffentlicher HTTP-Aufruf erfüllt allein keine produktive HTTPS-Anforderung. Das Beispiel-Dashboard ersetzt keine unabhängige fachliche, Latenzperzentil-, Fehlerraten- oder Recovery-Validierung.
Stellen Sie bei einem freigegebenen Auslöser das geschützte Ziel wieder her; gleichen Sie Schreibzugriffe nach dem Cutover ab und entscheiden Sie den Quell-Failback separat.
Treffen Sie die vereinbarte Entscheidung vor der Deadline, wenn Dateninvarianten verletzt sind, ein kritischer fachlicher Ablauf nicht im Fehlerbehebungsfenster wiederhergestellt werden kann, Zielinstabilität die Abnahmegrenzen überschreitet oder keine vertrauenswürdige Telemetrie festgestellt werden kann. Bewahren Sie Migrationsjournal und Logs auf.
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDie Rückkehr der Benutzer zur VM ist eine separate Entscheidung: Quellintegrität bestätigen, angenommene Zielschreibzugriffe abgleichen, Client-Traffic nach dem freigegebenen Verfahren umleiten und genau einer Seite Schreibzugriffe erlauben. Der Restore des Ziels vor dem Cutover allein führt diese Schritte nicht aus.
Schlägt der Cutover fehl, bevor ein gültiges Backup dokumentiert ist, prüfen Sie Journal und
Datenbank gemeinsam mit den Datenbankverantwortlichen. Überschreiben Sie niemals das
Nachweisverzeichnis und starten Sie den Cutover nicht blind erneut. Prüfen Sie nach einem
beendeten Prozess verbliebene Pods mit Präfix springmusic-migration-* und das gestoppte
Deployment, bevor Sie fortfahren. Die lokale Migrationssperre koordiniert keine unterschiedlichen Ausführungshosts.
Übergeben Sie Konfiguration, Abnahmenachweise, Dashboards, Incident-Verantwortung und Entscheidungen zur Quellaufbewahrung.
Übergeben Sie den geprüften Konfigurationsstand, Workload- und Gateway-Inventar, Quellmanifest, Migrationsjournal, Backup-Orte, Abnahmeergebnisse, Dashboard-URL und Rollback-Entscheidung. Halten Sie Zugangsdaten aus dem Übergabedokument heraus und verweisen Sie auf den freigegebenen Secret-Speicher.
Vereinbaren Sie ein zum Workload passendes anfängliches Stabilisierungsfenster von 24 bis 72 Stunden. Benennen Sie Incident- und Datenbank-Recovery-Verantwortliche, bestätigen Sie Aufbewahrungs- und Restore-Verfahren und testen Sie Alarmzustellung, bevor Sie sich darauf verlassen. Flex-Backups ergänzen Migrationsdumps; ein verifizierter Dump-Rollback ist kein Nachweis für Managed-Service-Recovery.
Beenden Sie die Stabilisierung nur bei dauerhaft gesundem fachlichem Verhalten, vollständiger Telemetrie, ohne ungelöste kritische Probleme und mit Betriebsfreigabe. Nehmen Sie pausierte Automatisierung bewusst wieder auf. Bewahren Sie Quelldaten und geschützte Nachweise auf, bis die vereinbarten Aufbewahrungs- und Abgleichkriterien die Stilllegung erlauben. Beginnen Sie HPA- und Kapazitätsexperimente erst nach der Stabilisierung in einem separaten Änderungsfenster.
| Kontrollpunkt | Verantwortliche Rolle | Zeitstempel | Ergebnis | Nachweisreferenz |
|---|---|---|---|---|
| Ziel und Clientpfad bereit | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Geschützter Eintrag |
| Quellschreibstopp und finaler Export | Anwendungs- und Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Manifest und Freigabe |
| Finale Probe abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Probejournal |
| Backup vor dem Cutover nachgewiesen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Backup-Prüfsumme und Restore-Ergebnis |
| Cutover und Integrität abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Migrationsjournal |
| Fachlichkeit und Netzwerkverkehr abgenommen | Anwendungsverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Test- und Routing-Nachweise |
| Drift und Telemetrie geprüft | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Plan- und Metriknachweise |
| Übergabe oder Rollback abgeschlossen | Migrationsleitung | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Unterzeichnete Entscheidung |
Überführen Sie die Spring-Music-Anwendung von einer VM zu STACKIT Kubernetes Engine und ihre Daten von selbstverwaltetem PostgreSQL zu PostgreSQL Flex. Behalten Sie Anwendungs-JAR und fachliches Verhalten bei und führen Sie Kubernetes-Deployment, Gateway API, DNS und Managed Observability ein.
Dieses Runbook beschreibt die Freigaben und die betriebliche Reihenfolge rund um die Befehle
von scripts/migrate_postgres.py im Referenzrepository. Infrastrukturbereitstellung und
Datenbankaustausch sind getrennte Vorgänge. Ein erfolgreiches Terraform-Apply ist keine Migrationsabnahme.
Die Referenz migriert das Schema public und validiert public.album anhand von Zeilenanzahl
und deterministischem Fingerprint. Die getestete Eingabe ist das Rehost-Beispiel mit acht Alben,
kein Export einer Live-Quelle. Ein realer Workload benötigt einen eigenen kompatiblen Export,
eine Schemabewertung, fachliche Tests und Recovery-Ziele. Geben Sie Ausfallzeit frei: Dies ist
eine Migration mit Schreibstopp und Dump/Restore, keine Replikation oder unterbrechungsfreie Umschaltung.
Das Ziel verwendet eine eigene Anwendungs- und Probedatenbank, Datenbankverbindungen mit TLS-Pflicht und einen temporären clusterinternen Migrationsclient. Das Skript stoppt weder Quellschreiber noch schaltet es Client-Traffic um, konfiguriert öffentliches TLS oder automatisiert den Failback zur Quelle. Diese Aufgaben liegen beim Betreiber.
| Rolle | Verantwortete Entscheidung oder Nachweis |
|---|---|
| Migrationsleitung | Zeitfenster, Kontrollpunkte, Go/No-Go-Befugnis, Rollback-Deadline und Incident-Koordination |
| Anwendungsverantwortliche | Vollständige Erfassung der Schreiber, Quellschreibstopp, fachliche Abnahme und Abgleich von Schreibzugriffen nach dem Cutover |
| Plattform-Engineering | Freigegebener Terraform-Plan, SKE-Zugriff, Gateway- und DNS-Bereitschaft, pausierte Reconciliation |
| Datenbankverantwortliche | Konsistente Quellnachweise, Probe, geschütztes Backup, Restore-Integrität und Rollback-Ausführung |
| Betriebsverantwortliche | Telemetrie, Incident-Zuweisung, Recovery-Verantwortung, Aufbewahrung und Ende der Stabilisierung |
Diese Freigabepunkte erläutern das Kontrollmodell. Die folgenden Abschnitte liefern das ausführbare Verfahren und die Nachweisanforderungen für den technischen Walkthrough.
Bestätigen Sie Schreibkontrolle, pausierte Reconciliation, Verantwortlichkeiten, Abnahmekriterien und Rollback-Deadline.
bash scripts/validate_gateway.sh ausführen und Workload-Rollout sowie PostgreSQL-Konnektivität prüfen.enable_springboot_hpa = false, enable_load_generator = false und deploy_postgres_migration_job = false setzen; diese Einstellungen vor dem Pausieren der Infrastrukturautomatisierung anwenden.python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runpython3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicNehmen Sie nur mit übereinstimmenden Datennachweisen, erfolgreichen Clientanfragen, gesunder Laufzeit und tatsächlicher Telemetrie ab.
| Freigabepunkt | Erforderlicher Nachweis |
|---|---|
| Datenintegrität | Prüfsumme des Quellmanifests, erwartete Anzahl und Fingerprint stimmen mit dem wiederhergestellten Ziel überein; das Migrationsjournal benennt das richtige Projekt und die Datenbank |
| Laufzeit | Ursprüngliche Replikazahl wiederhergestellt, gesunder Rollout, keine unerklärten Neustarts oder Verbindungsfehler |
| Netzwerkverkehr | Gateway akzeptiert, HTTPRoute-Referenzen aufgelöst, DNS entspricht dem Gateway, tatsächliche Clientanfragen erreichen das beabsichtigte Ziel |
| Fachliches Verhalten | Migrierte Alben sichtbar und freigegebene Benutzerabläufe erfolgreich; Schreibtests besitzen einen vereinbarten Bereinigungs- und Abgleichplan |
| Datenbanktransport | Anwendung und Migration verlangen TLS; ACL erlaubt nur freigegebenes SKE-Egress oder explizit genehmigte Ausnahmen |
| Observability | Beide Scrape-Jobs liefern tatsächliche up=1-Messwerte, der Exporter meldet Datenbankzustand und Dashboard-Werte entsprechen dem Workload |
| Recovery | Backup vor dem Cutover, Prüfsumme, ursprünglicher Fingerprint und Journal privat aufbewahrt und in geschützten dauerhaften Speicher kopiert |
| Konfiguration | Geprüfter Plan nach der Migration ohne unerklärte Ressourcendrift; Betriebszustände von Quelle und Ziel dokumentiert |
Ein erfolgreicher öffentlicher HTTP-Aufruf erfüllt allein keine produktive HTTPS-Anforderung. Das Beispiel-Dashboard ersetzt keine unabhängige fachliche, Latenzperzentil-, Fehlerraten- oder Recovery-Validierung.
Stellen Sie bei einem freigegebenen Auslöser das geschützte Ziel wieder her; gleichen Sie Schreibzugriffe nach dem Cutover ab und entscheiden Sie den Quell-Failback separat.
Treffen Sie die vereinbarte Entscheidung vor der Deadline, wenn Dateninvarianten verletzt sind, ein kritischer fachlicher Ablauf nicht im Fehlerbehebungsfenster wiederhergestellt werden kann, Zielinstabilität die Abnahmegrenzen überschreitet oder keine vertrauenswürdige Telemetrie festgestellt werden kann. Bewahren Sie Migrationsjournal und Logs auf.
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDie Rückkehr der Benutzer zur VM ist eine separate Entscheidung: Quellintegrität bestätigen, angenommene Zielschreibzugriffe abgleichen, Client-Traffic nach dem freigegebenen Verfahren umleiten und genau einer Seite Schreibzugriffe erlauben. Der Restore des Ziels vor dem Cutover allein führt diese Schritte nicht aus.
Schlägt der Cutover fehl, bevor ein gültiges Backup dokumentiert ist, prüfen Sie Journal und
Datenbank gemeinsam mit den Datenbankverantwortlichen. Überschreiben Sie niemals das
Nachweisverzeichnis und starten Sie den Cutover nicht blind erneut. Prüfen Sie nach einem
beendeten Prozess verbliebene Pods mit Präfix springmusic-migration-* und das gestoppte
Deployment, bevor Sie fortfahren. Die lokale Migrationssperre koordiniert keine unterschiedlichen Ausführungshosts.
Übergeben Sie Konfiguration, Abnahmenachweise, Dashboards, Incident-Verantwortung und Entscheidungen zur Quellaufbewahrung.
Übergeben Sie den geprüften Konfigurationsstand, Workload- und Gateway-Inventar, Quellmanifest, Migrationsjournal, Backup-Orte, Abnahmeergebnisse, Dashboard-URL und Rollback-Entscheidung. Halten Sie Zugangsdaten aus dem Übergabedokument heraus und verweisen Sie auf den freigegebenen Secret-Speicher.
Vereinbaren Sie ein zum Workload passendes anfängliches Stabilisierungsfenster von 24 bis 72 Stunden. Benennen Sie Incident- und Datenbank-Recovery-Verantwortliche, bestätigen Sie Aufbewahrungs- und Restore-Verfahren und testen Sie Alarmzustellung, bevor Sie sich darauf verlassen. Flex-Backups ergänzen Migrationsdumps; ein verifizierter Dump-Rollback ist kein Nachweis für Managed-Service-Recovery.
Beenden Sie die Stabilisierung nur bei dauerhaft gesundem fachlichem Verhalten, vollständiger Telemetrie, ohne ungelöste kritische Probleme und mit Betriebsfreigabe. Nehmen Sie pausierte Automatisierung bewusst wieder auf. Bewahren Sie Quelldaten und geschützte Nachweise auf, bis die vereinbarten Aufbewahrungs- und Abgleichkriterien die Stilllegung erlauben. Beginnen Sie HPA- und Kapazitätsexperimente erst nach der Stabilisierung in einem separaten Änderungsfenster.
| Kontrollpunkt | Verantwortliche Rolle | Zeitstempel | Ergebnis | Nachweisreferenz |
|---|---|---|---|---|
| Ziel und Clientpfad bereit | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Geschützter Eintrag |
| Quellschreibstopp und finaler Export | Anwendungs- und Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Manifest und Freigabe |
| Finale Probe abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Probejournal |
| Backup vor dem Cutover nachgewiesen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Backup-Prüfsumme und Restore-Ergebnis |
| Cutover und Integrität abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Migrationsjournal |
| Fachlichkeit und Netzwerkverkehr abgenommen | Anwendungsverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Test- und Routing-Nachweise |
| Drift und Telemetrie geprüft | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Plan- und Metriknachweise |
| Übergabe oder Rollback abgeschlossen | Migrationsleitung | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Unterzeichnete Entscheidung |
Überführen Sie die Spring-Music-Anwendung von einer VM zu STACKIT Kubernetes Engine und ihre Daten von selbstverwaltetem PostgreSQL zu PostgreSQL Flex. Behalten Sie Anwendungs-JAR und fachliches Verhalten bei und führen Sie Kubernetes-Deployment, Gateway API, DNS und Managed Observability ein.
Dieses Runbook beschreibt die Freigaben und die betriebliche Reihenfolge rund um die Befehle
von scripts/migrate_postgres.py im Referenzrepository. Infrastrukturbereitstellung und
Datenbankaustausch sind getrennte Vorgänge. Ein erfolgreiches Terraform-Apply ist keine Migrationsabnahme.
Die Referenz migriert das Schema public und validiert public.album anhand von Zeilenanzahl
und deterministischem Fingerprint. Die getestete Eingabe ist das Rehost-Beispiel mit acht Alben,
kein Export einer Live-Quelle. Ein realer Workload benötigt einen eigenen kompatiblen Export,
eine Schemabewertung, fachliche Tests und Recovery-Ziele. Geben Sie Ausfallzeit frei: Dies ist
eine Migration mit Schreibstopp und Dump/Restore, keine Replikation oder unterbrechungsfreie Umschaltung.
Das Ziel verwendet eine eigene Anwendungs- und Probedatenbank, Datenbankverbindungen mit TLS-Pflicht und einen temporären clusterinternen Migrationsclient. Das Skript stoppt weder Quellschreiber noch schaltet es Client-Traffic um, konfiguriert öffentliches TLS oder automatisiert den Failback zur Quelle. Diese Aufgaben liegen beim Betreiber.
| Rolle | Verantwortete Entscheidung oder Nachweis |
|---|---|
| Migrationsleitung | Zeitfenster, Kontrollpunkte, Go/No-Go-Befugnis, Rollback-Deadline und Incident-Koordination |
| Anwendungsverantwortliche | Vollständige Erfassung der Schreiber, Quellschreibstopp, fachliche Abnahme und Abgleich von Schreibzugriffen nach dem Cutover |
| Plattform-Engineering | Freigegebener Terraform-Plan, SKE-Zugriff, Gateway- und DNS-Bereitschaft, pausierte Reconciliation |
| Datenbankverantwortliche | Konsistente Quellnachweise, Probe, geschütztes Backup, Restore-Integrität und Rollback-Ausführung |
| Betriebsverantwortliche | Telemetrie, Incident-Zuweisung, Recovery-Verantwortung, Aufbewahrung und Ende der Stabilisierung |
Diese Freigabepunkte erläutern das Kontrollmodell. Die folgenden Abschnitte liefern das ausführbare Verfahren und die Nachweisanforderungen für den technischen Walkthrough.
Bestätigen Sie Schreibkontrolle, pausierte Reconciliation, Verantwortlichkeiten, Abnahmekriterien und Rollback-Deadline.
bash scripts/validate_gateway.sh ausführen und Workload-Rollout sowie PostgreSQL-Konnektivität prüfen.enable_springboot_hpa = false, enable_load_generator = false und deploy_postgres_migration_job = false setzen; diese Einstellungen vor dem Pausieren der Infrastrukturautomatisierung anwenden.python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runpython3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicNehmen Sie nur mit übereinstimmenden Datennachweisen, erfolgreichen Clientanfragen, gesunder Laufzeit und tatsächlicher Telemetrie ab.
| Freigabepunkt | Erforderlicher Nachweis |
|---|---|
| Datenintegrität | Prüfsumme des Quellmanifests, erwartete Anzahl und Fingerprint stimmen mit dem wiederhergestellten Ziel überein; das Migrationsjournal benennt das richtige Projekt und die Datenbank |
| Laufzeit | Ursprüngliche Replikazahl wiederhergestellt, gesunder Rollout, keine unerklärten Neustarts oder Verbindungsfehler |
| Netzwerkverkehr | Gateway akzeptiert, HTTPRoute-Referenzen aufgelöst, DNS entspricht dem Gateway, tatsächliche Clientanfragen erreichen das beabsichtigte Ziel |
| Fachliches Verhalten | Migrierte Alben sichtbar und freigegebene Benutzerabläufe erfolgreich; Schreibtests besitzen einen vereinbarten Bereinigungs- und Abgleichplan |
| Datenbanktransport | Anwendung und Migration verlangen TLS; ACL erlaubt nur freigegebenes SKE-Egress oder explizit genehmigte Ausnahmen |
| Observability | Beide Scrape-Jobs liefern tatsächliche up=1-Messwerte, der Exporter meldet Datenbankzustand und Dashboard-Werte entsprechen dem Workload |
| Recovery | Backup vor dem Cutover, Prüfsumme, ursprünglicher Fingerprint und Journal privat aufbewahrt und in geschützten dauerhaften Speicher kopiert |
| Konfiguration | Geprüfter Plan nach der Migration ohne unerklärte Ressourcendrift; Betriebszustände von Quelle und Ziel dokumentiert |
Ein erfolgreicher öffentlicher HTTP-Aufruf erfüllt allein keine produktive HTTPS-Anforderung. Das Beispiel-Dashboard ersetzt keine unabhängige fachliche, Latenzperzentil-, Fehlerraten- oder Recovery-Validierung.
Stellen Sie bei einem freigegebenen Auslöser das geschützte Ziel wieder her; gleichen Sie Schreibzugriffe nach dem Cutover ab und entscheiden Sie den Quell-Failback separat.
Treffen Sie die vereinbarte Entscheidung vor der Deadline, wenn Dateninvarianten verletzt sind, ein kritischer fachlicher Ablauf nicht im Fehlerbehebungsfenster wiederhergestellt werden kann, Zielinstabilität die Abnahmegrenzen überschreitet oder keine vertrauenswürdige Telemetrie festgestellt werden kann. Bewahren Sie Migrationsjournal und Logs auf.
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDie Rückkehr der Benutzer zur VM ist eine separate Entscheidung: Quellintegrität bestätigen, angenommene Zielschreibzugriffe abgleichen, Client-Traffic nach dem freigegebenen Verfahren umleiten und genau einer Seite Schreibzugriffe erlauben. Der Restore des Ziels vor dem Cutover allein führt diese Schritte nicht aus.
Schlägt der Cutover fehl, bevor ein gültiges Backup dokumentiert ist, prüfen Sie Journal und
Datenbank gemeinsam mit den Datenbankverantwortlichen. Überschreiben Sie niemals das
Nachweisverzeichnis und starten Sie den Cutover nicht blind erneut. Prüfen Sie nach einem
beendeten Prozess verbliebene Pods mit Präfix springmusic-migration-* und das gestoppte
Deployment, bevor Sie fortfahren. Die lokale Migrationssperre koordiniert keine unterschiedlichen Ausführungshosts.
Übergeben Sie Konfiguration, Abnahmenachweise, Dashboards, Incident-Verantwortung und Entscheidungen zur Quellaufbewahrung.
Übergeben Sie den geprüften Konfigurationsstand, Workload- und Gateway-Inventar, Quellmanifest, Migrationsjournal, Backup-Orte, Abnahmeergebnisse, Dashboard-URL und Rollback-Entscheidung. Halten Sie Zugangsdaten aus dem Übergabedokument heraus und verweisen Sie auf den freigegebenen Secret-Speicher.
Vereinbaren Sie ein zum Workload passendes anfängliches Stabilisierungsfenster von 24 bis 72 Stunden. Benennen Sie Incident- und Datenbank-Recovery-Verantwortliche, bestätigen Sie Aufbewahrungs- und Restore-Verfahren und testen Sie Alarmzustellung, bevor Sie sich darauf verlassen. Flex-Backups ergänzen Migrationsdumps; ein verifizierter Dump-Rollback ist kein Nachweis für Managed-Service-Recovery.
Beenden Sie die Stabilisierung nur bei dauerhaft gesundem fachlichem Verhalten, vollständiger Telemetrie, ohne ungelöste kritische Probleme und mit Betriebsfreigabe. Nehmen Sie pausierte Automatisierung bewusst wieder auf. Bewahren Sie Quelldaten und geschützte Nachweise auf, bis die vereinbarten Aufbewahrungs- und Abgleichkriterien die Stilllegung erlauben. Beginnen Sie HPA- und Kapazitätsexperimente erst nach der Stabilisierung in einem separaten Änderungsfenster.
| Kontrollpunkt | Verantwortliche Rolle | Zeitstempel | Ergebnis | Nachweisreferenz |
|---|---|---|---|---|
| Ziel und Clientpfad bereit | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Geschützter Eintrag |
| Quellschreibstopp und finaler Export | Anwendungs- und Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Manifest und Freigabe |
| Finale Probe abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Probejournal |
| Backup vor dem Cutover nachgewiesen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Backup-Prüfsumme und Restore-Ergebnis |
| Cutover und Integrität abgenommen | Datenbankverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Migrationsjournal |
| Fachlichkeit und Netzwerkverkehr abgenommen | Anwendungsverantwortliche | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Test- und Routing-Nachweise |
| Drift und Telemetrie geprüft | Plattform-Engineering | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Plan- und Metriknachweise |
| Übergabe oder Rollback abgeschlossen | Migrationsleitung | JJJJ-MM-TT HH:MM | Bestanden/Fehlgeschlagen | Unterzeichnete Entscheidung |
Dieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenDieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenDieses Asset wendet das Migration Framework auf ein Replatform von Spring Boot und PostgreSQL an: Die Anwendung wechselt vom VM-Service zu STACKIT Kubernetes Engine (SKE), die Datenbank von selbstverwaltetem PostgreSQL zu STACKIT PostgreSQL Flex. Geschäftsfunktion und Anwendungs-JAR bleiben unverändert; die Betriebsmodelle für Laufzeit und Datenbank ändern sich.
Das Referenzrepository ist die maßgebliche Quelle für Terraform, Helm-Charts, fest versionierte
Artefakte, Migrationsskripte und Validierung. Verwenden Sie einen geprüften Stand mit den hier
beschriebenen Gateway-API- und scripts/migrate_postgres.py-Workflows. Ein älterer Stand mit
direktem Datenbank-Import-Job implementiert dieses Verfahren nicht.
Cloud Foundry, Object Storage, die Zerlegung in Microservices und Anwendungsmodernisierung sind nicht Teil dieser Implementierung. Die alte Beispielanwendung demonstriert einen Plattformwechsel; sie ist keine Empfehlung, einen nicht mehr unterstützten Anwendungsstack produktiv einzusetzen.
Prüfen Sie das Architektur-Asset vor der Wahl von Kapazität und Netzwerkkontrollen. Es trennt die implementierte Topologie von Produktionserweiterungen wie öffentlichem HTTPS, hochverfügbaren Workern und geschützten Metriken.
Spring Boot auf SKE mit PostgreSQL Flex und Gateway API Implementierte Topologie, Laufzeit- und Datengrenzen sowie separat zu qualifizierende Produktionserweiterungen prüfen. Seite öffnenVerwenden Sie eine isolierte Linux-Laborumgebung mit Git, Terraform, kubectl, curl, jq,
getent, Python ab Version 3.11 sowie PostgreSQL-Server- und Client-Werkzeugen. Die
Rehost-Beispielskripte benötigen außerdem runuser, sha256sum, ein Betriebssystemkonto
postgres und Root-Rechte, um eine temporäre lokale Datenbank zu erstellen und zu prüfen.
Führen Sie die Beispielbefehle in dieser vorbereiteten Laborumgebung aus, nicht auf einem
produktiven Datenbankhost. Die privaten Artefakte müssen für den Migrationsbediener lesbar
bleiben; machen Sie sie nicht für alle Benutzer lesbar.
Beziehen Sie geprüfte Commit-IDs beider Repositorys vom Referenz-Maintainer und exportieren
Sie diese vorab als REHOST_REVISION und REPLATFORM_REVISION. Der Replatform-Stand muss
Gateway API und den freigabegesteuerten Migrationsworkflow enthalten. Setzen Sie nicht voraus,
dass der Remote-Standardbranch bereits die lokal getestete Implementierung enthält. Ist der
freigegebene Stand nicht verfügbar, beschaffen Sie ihn vor dem Walkthrough.
Ersetzen Sie beide Platzhalter durch die freigegebenen vollständigen Commit-IDs mit jeweils 40 Zeichen und setzen Sie diese im selben Bash-Terminal:
export REHOST_REVISION="REPLACE_WITH_REVIEWED_REHOST_COMMIT_ID"export REPLATFORM_REVISION="REPLACE_WITH_REVIEWED_REPLATFORM_COMMIT_ID"Führen Sie den folgenden Block vollständig aus einem leeren Arbeitsverzeichnis aus.
Die if-Prüfung lehnt fehlende, leere oder falsch formatierte IDs einschließlich unveränderter
Platzhalter ab. Jedes && führt den nächsten Befehl nur nach Erfolg des vorherigen aus.
Git prüft die Verfügbarkeit der Commits; die Formatprüfung allein bestätigt weder Freigabe
noch Repository-Inhalt.
if [[ ! ${REHOST_REVISION:-} =~ ^[0-9a-fA-F]{40}$ || ! ${REPLATFORM_REVISION:-} =~ ^[0-9a-fA-F]{40}$ ]]; then printf '%s\n' "Set both revision variables to reviewed full 40-character commit IDs." >&2 falseelse umask 077 && git clone https://github.com/stackitcloud/stackit-cmf-Rehost-springboot.git && git clone https://github.com/stackitcloud/stackit-cmf-replatform-springboot-k8s.git && git -C stackit-cmf-Rehost-springboot checkout --detach "$REHOST_REVISION" && git -C stackit-cmf-replatform-springboot-k8s checkout --detach "$REPLATFORM_REVISION" && test -f stackit-cmf-replatform-springboot-k8s/scripts/migrate_postgres.py && test -f stackit-cmf-replatform-springboot-k8s/scripts/validate_gateway.sh && cd stackit-cmf-replatform-springboot-k8s && printf '%s\n' "Workspace ready. Continue from this Replatform checkout." || { printf '%s\n' "Preparation failed. Resolve the error before continuing." >&2 false }fiFahren Sie erst nach der Meldung Workspace ready fort. Bei Fehlern bleibt das Terminal
offen; weitere Vorbereitungsbefehle werden übersprungen. Vorhandene oder teilweise geklonte
Verzeichnisse werden weder entfernt noch überschrieben: Prüfen Sie diese und bewahren Sie
lokale Änderungen, bevor Sie es in einem neuen leeren Arbeitsverzeichnis erneut versuchen.
Nach Erfolg befindet sich das Terminal für die nächsten Schritte im Replatform-Checkout.
Nutzen Sie ein freigegebenes STACKIT Projekt, einen Service Account, DNS-Delegation, SKE-Kapazität und ein geschütztes Terraform-Backend. Beziehen Sie Zugangsdaten über den freigegebenen Secret-Kanal, niemals aus diesem Trail. Die folgenden Befehle setzen diese Verzeichnisstruktur und eine geprüfte Konfiguration voraus; sie belegen keinen validierten Greenfield-Produktionsaufbau.
Qualifizieren Sie einen konsistenten Quelldump und sein Manifest, bevor Daten in den Migrationsworkflow eingehen.
Die Rehost-Referenz liefert scripts/create_source_dump.sh und scripts/validate_source_dump.sh
für ihr reproduzierbares Beispiel. Führen Sie diese im Rehost-Repository aus. Dessen Verzeichnis
artifacts liefert source-postgresql.dump und source-postgresql.manifest an den
Replatform-Workflow. Das Manifest erfasst Version 1, table=public.album, row_count,
album_fingerprint und dump_sha256.
Führen Sie ausschließlich für das reproduzierbare Beispiel die folgenden Befehle vom Replatform-Checkout in der vorbereiteten Laborumgebung aus. Die Skripte erstellen aus dem versionierten Beispiel-SQL eine temporäre PostgreSQL-Instanz, exportieren sie und führen einen unabhängigen Test-Restore aus. Verwenden Sie ein frisches Artefaktverzeichnis; überschreiben Sie keine Nachweise einer bereits laufenden Migration.
umask 077pushd ../stackit-cmf-Rehost-springbootbash scripts/create_source_dump.shbash scripts/validate_source_dump.shpopdErwartet wird eine erfolgreiche Validierung von acht Zeilen mit passendem Fingerprint. Diese Befehle lesen keine Quell-VM aus. Verwenden Sie für Probe und Cutover genau diese Artefakte weiter.
Ersetzen Sie für eine reale Quelle den Beispielgenerator durch ein freigegebenes Exportverfahren: Frieren Sie alle Schreibzugriffe ein und leiten Sie Dump im Custom-Format und Manifest aus demselben konsistenten Quellsnapshot ab. Das generierte Beispiel mit acht Alben ist kein Export einer beliebigen laufenden VM. Prüfen Sie vor dem Export PostgreSQL-Kompatibilität, Erweiterungen, Eigentümerschaft und Schemaabhängigkeiten.
Stellen Sie nur vertrauenswürdige Dumps wieder her, da sie SQL ausführen. Diese Implementierung
migriert das Anwendungsschema public und prüft public.album; von Flex verwaltete Schemas
sind bewusst ausgeschlossen. Andere Workloads benötigen eigene Invarianten und einen angepassten Schemaumfang.
Stellen Sie das Ziel aus einem geprüften Plan mit expliziten Angaben zu Projekt, Kapazität, Zugriff und DNS bereit.
Verwenden Sie Terraform, kubectl, curl, jq, getent und Python ab Version 3.11 unter Linux.
Kopieren Sie env.tfvars.example nach env.tfvars und passen Sie die tatsächlichen Variablen
dieser Datei an. Behalten Sie die getestete Provider-Lockdatei und unveränderliche Image- und
JAR-Referenzen bei. Bestätigen Sie vor dem Plan die Verfügbarkeit der SKE-Version,
Node-Pool-Kapazität, Projektberechtigungen und DNS-Delegation.
Starting with Kubernetes v1.33, we remove minor versions on the patch day that precedes the upstream maintenance end-of-life (EOL) date. The following table below lists the upstream EOL date for each Kubernetes minor version and the corresponding expiration date in SKE:
| Kubernetes minor version | End-of-life date | Expiration in SKE |
|---|---|---|
| v1.32 | 2026-02-28 | 2026-04-15 |
| v1.33 | 2026-06-28 | 2026-06-10 |
| v1.34 | 2026-10-27 | 2026-10-14 |
| v1.35 | 2027-02-28 | 2027-02-10 |
Please refer to the official Kubernetes Release History for up-to-date announcements of new versions.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Bevorzugen Sie ein freigegebenes Application-Landing-Zone-Projekt. Setzen Sie create_project = false
und geben Sie Projekt-ID und Pfad zum Service-Account-Schlüssel an. Die alternative Projekterstellung
setzt einen freigegebenen übergeordneten Container und Berechtigungen voraus; sie ersetzt keine
Landing-Zone-Governance. Zugangsdaten, State, gespeicherte Pläne und Migrationsnachweise gehören nie in die Versionsverwaltung.
Erstellen Sie für einen neuen Checkout die private Variablendatei, ohne eine vorhandene zu überschreiben:
umask 077test -e env.tfvars || cp env.tfvars.example env.tfvarschmod 600 env.tfvarsBearbeiten Sie diese Datei vor dem Plan: Tragen Sie freigegebenes Projekt und Service-Account-Pfad, Region, unterstützte SKE-Version, verfügbaren Node-Pool-Flavor samt Zone und delegierte DNS-Einstellungen aus dem Repository-Beispiel ein. Prüfen Sie Backend-Zugriff und Sperren, Quotas, Kosten sowie die Grenzen von HTTP und öffentlichen Metriken. Die folgenden Funktionsschalter bilden keine vollständige Umgebungskonfiguration.
Der optionale gemeinsame Wrapper bildet setup_project, setup_observability, setup_database,
setup_workload, setup_loadgen und setup_dns auf die Terraform-Schalter des Repositorys ab.
Sie wählen ausschließlich den Bereitstellungsumfang: Das Aktivieren der Datenbank erlaubt keinen
Datenaustausch und ersetzt niemals die separate Migrationsfreigabe.
Diese Werte aktivieren den vollständigen Workload- und Datenbankpfad. Sie ergänzen die Angaben zu Projekt, Region, Node Pool und DNS im Repository-Beispiel, ersetzen sie aber nicht.
deploy_workload = truedns_enabled = trueenable_postgres_flex = truepostgres_flex_target_database = "springmusic"postgres_flex_target_app_acl_cidrs = []observability_enabled = truecreate_observability_instance = truecreate_grafana_dashboard = trueenable_springboot_hpa = falseenable_load_generator = falsedeploy_postgres_migration_job = falseLassen Sie HPA und Lastgenerierung während der Migration deaktiviert. Wählen Sie
Alarmeinstellungen bewusst; die Alarmzustellung wurde im End-to-End-Test nicht validiert.
springboot_image wählt die Java-Laufzeit, nicht ein beliebiges vorgefertigtes Anwendungsimage.
Der Init-Container lädt das auf einen Commit fixierte Rehost-JAR und prüft vor dem Start seinen
SHA-256-Wert. Spiegeln Sie unveränderliche Artefakte für die Produktion in freigegebene Artefakt- und Image-Dienste.
Führen Sie die Befehle im Replatform-Repository aus und prüfen Sie den gespeicherten Plan vor dem Apply:
umask 077terraform initterraform validateterraform plan -var-file=env.tfvars -out=tfplanterraform apply tfplanbash scripts/validate_gateway.shBei leeren Anwendungs-ACL-Eingaben verwendet Terraform die tatsächlichen Egress-CIDRs des
SKE-Clusters für PostgreSQL Flex. Explizite Anwendungs- oder ältere ACL-Werte überschreiben
diesen Standard und müssen geprüft werden. Erlauben Sie nicht 0.0.0.0/0.
Der temporäre PostgreSQL-Client läuft in SKE und erhält den Dump über kubectl. Er verbindet sich
nicht direkt mit der Quell-VM; weder Quell- noch Arbeitsplatz-CIDRs benötigen temporären
Flex-Zugriff. JDBC und Datenbankwerkzeuge verwenden sslmode=require: Das erzwingt
Verschlüsselung, bietet aber nicht die Hostnamenprüfung von verify-full. Schützen Sie
Zugangsdaten in Kubernetes Secrets und im Terraform-Backend und validieren Sie bei Bedarf eine stärkere Zertifikatsprüfung.
Stellen Sie den finalen Dump in der isolierten Probedatenbank wieder her und verlangen Sie passende Nachweise, die jünger als 24 Stunden sind.
Führen Sie nach dem Infrastruktur-Apply einen isolierten Restore in springmusic_rehearsal aus.
Passen Sie das Quellverzeichnis an die freigegebenen Artefakte an und halten Sie den Nachweispfad privat.
python3 scripts/migrate_postgres.py rehearse \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-runDie Probe validiert Manifest, Dump-Prüfsumme, Zielidentität, Zeilenanzahl und Fingerprint, ohne die Anwendungsdatenbank zu ersetzen. Proben Sie nach dem Schreibstopp auf der Quelle erneut mit dem finalen Dump. Der Cutover verlangt passende Nachweise, die jünger als 24 Stunden sind. Eine erfolgreiche Probe mit einem älteren oder anderen Dump gibt die finale Eingabe nicht frei.
Der alte Pfad deploy_postgres_migration_job = true wird durch die Validierung gesperrt.
Nutzen Sie stattdessen den freigabegesteuerten Workflow. Stoppen Sie HPA, Lastgenerierung und
alle anderen Zielschreiber. Pausieren Sie Terraform- und GitOps-Reconciliation, solange das
Skript die Replikazahl steuert. Seine lokale Sperre schützt nur einen Checkout, nicht vor
gleichzeitigen Bedienern auf unterschiedlichen Rechnern.
python3 scripts/migrate_postgres.py cutover \ --artifacts ../stackit-cmf-Rehost-springboot/artifacts \ --evidence .tmp/migration-run \ --source-write-frozen --confirm-target springmusicDas Quellschreibstopp-Flag ist eine Bestätigung des Betreibers, keine automatische Abschaltung der Quelle. Der Cutover skaliert die Anwendung auf null, sichert das Ziel vor dem Cutover und prüft die Sicherung per Prüfsumme. Er weist ihre Wiederherstellbarkeit in der Probedatenbank nach und stellt erst dann die Quelle transaktional wieder her. Vor dem Wiederanlauf mit ursprünglicher Replikazahl werden die Daten geprüft. Bei Fehlern bleibt die Anwendung zur Untersuchung gestoppt. Bewahren Sie Nachweisjournal und Backup auf; überschreiben Sie sie nicht für einen erneuten Versuch.
Vergleichen Sie Datenbanknachweise mit dem Quellmanifest, prüfen Sie das Anwendungsverhalten über das Gateway und bestätigen Sie den Zustand beider Metrik-Jobs. Traffic-Umschaltung und fachliche Abnahme bleiben Betreiberaufgaben; das Skript ändert den Endpunkt der Quellanwendung nicht.
So stellen Sie die geschützte Zieldatenbank aus der Zeit vor dem Cutover wieder her:
python3 scripts/migrate_postgres.py rollback \ --evidence .tmp/migration-run --confirm-target springmusicDer Rollback prüft Zielidentität und Backup-Integrität, sichert das aktuelle Ziel separat, stellt die ursprünglichen Daten wieder her und verifiziert vor dem Wiederanlauf deren Fingerprint. Schreibzugriffe nach dem Cutover werden nicht zusammengeführt; bewahren Sie den Dump vor dem Rollback für einen expliziten Abgleich auf. Dies ist ein Zieldatenbank-Rollback, kein automatischer Failback zur Quell-VM.
Terraform verwaltet den Grafana-Ordner SCF Replatform und das Dashboard mit acht Panels an
der vorhandenen Datenquelle Thanos. Öffnen Sie es über grafana_dashboard_url.
Cluster-CPU, Cluster-Speicher, laufende Pods, Anwendungsanfragen sowie PostgreSQL-Zustand und
-Auslastung unterstützen Abnahme und spätere Optimierung. Ein manueller Dashboard-Import ist nicht nötig.
Anwendungsmetriken stammen aus dem pod-lokalen Boot-2-Actuator über den Metrikadapter auf Port 9090; der PostgreSQL-Exporter nutzt Port 9187. Prüfen Sie beide tatsächlichen Scrape-Ergebnisse, nicht nur die Dashboard-Darstellung. Fehlende Telemetrie ist ein Untersuchungsgrund, niemals der Nachweis fehlender Last.
Exportieren Sie eine kurzlebige Kubeconfig mit privaten Berechtigungen und prüfen Sie den Standard-Namespace der Referenz:
umask 077mkdir -p .tmpterraform output -raw kubeconfig > .tmp/replatform.kubeconfigexport KUBECONFIG="$PWD/.tmp/replatform.kubeconfig"kubectl get deploy,svc,pods -n springbootkubectl get gateway,httproute -n springbootkubectl rollout status deployment/springboot -n springbootbash scripts/validate_gateway.shDer Gateway-Validator prüft Akzeptanz, aufgelöste Routenreferenzen, DNS und Anwendungsantwort. Entfernen Sie die lokale Kubeconfig nach Gebrauch und beziehen Sie nach Ablauf eine neue. Ein erfolgreicher Rollout allein ist keine Daten- oder fachliche Abnahme.
Trennen Sie Migrations-Rollback von Flex-Service-Recovery und bewahren Sie geschützte Nachweise außerhalb kurzlebiger Ausführungsumgebungen auf.
Die Flex-Aufbewahrung wird explizit konfiguriert; der Standard dieser Referenz beträgt 32 Tage. Managed-Datenbankbackups und der Migrationsdump vor dem Cutover dienen unterschiedlichen Zwecken. Die Probe mit Letzterem weist weder Managed-Service-Restore noch Point-in-Time-Recovery oder Disaster Recovery der Anwendung nach. Benennen Sie Recovery-Verantwortliche und testen Sie den benötigten Service-Recovery-Pfad separat.
Bewahren Sie geschützte Nachweise und Backups bis zum Ende des Rollback-Fensters außerhalb eines
kurzlebigen Dev Containers auf. Prüfen Sie nach einem abgebrochenen Migrationsprozess verbliebene
Pods mit Präfix springmusic-migration-*, bevor Sie fortfahren; starten Sie ein ungeprüftes Ziel nicht durch Terraform neu.
Dieses Asset zeigt, wie das Anwendungsverhalten beim Wechsel der Betriebsmodelle für Laufzeit und Datenbank erhalten bleibt:
Diese Nachweise bestätigen weder einen vollständigen Greenfield-Durchlauf noch eine Migration aus einer produktiven Live-Quelle, unterbrechungsfreien Betrieb, Hochverfügbarkeit, öffentliches Gateway-TLS, interaktiven IDP-Login, Alarmzustellung oder Managed-Flex-Recovery. Der getestete Ein-Worker-Aufbau mit HTTP stellt Metriken ohne Authentifizierung bereit; erfüllen Sie die Produktionsanforderungen vor der Verwendung sensibler Daten. Aktualisieren Sie die Beispielanwendung und validieren Sie eine geeignete unterstützte Kubernetes-Version als separate kontrollierte Änderungen.
Referenzkonfiguration, Skripte und Validierungsnachweise Das Repository-README und die versionierte Implementierung liefern genaue Voraussetzungen, Variablen, Befehle und Recovery-Grenzen. Repository öffnenKehren Sie zum Optimize-Zyklus des Migration Framework zurück: repräsentative Betriebsnachweise sammeln, begrenzende Ebene identifizieren, eine kontrollierte Änderung umsetzen und Zuverlässigkeit, Performance sowie Kosten vor dem Beibehalten validieren.
Optimize startet, sobald Workloads auf STACKIT laufen und reale Daten aus dem Betrieb vorliegen. Das Modul überführt Beobachtungen aus dem Betrieb in messbare Verbesserungen für Performance, Stabilität und Wirtschaftlichkeit.
Optimize ist keine einmalige Aufgabe, sondern ein iterativer Zyklus, der sich mit früher Stabilisierung und Unterstützung direkt nach dem Cutover überschneiden kann.
Viele Entscheidungen zu Rightsizing und Tuning sind erst unter echter Last belastbar. Nach dem Cutover lassen sich Annahmen mit Daten aus dem Betrieb validieren und präzisieren.
Optimierungsentscheidungen sollten auf Laufzeitdaten basieren, nicht auf Annahmen. Für die praktische Umsetzung werden Workload-Telemetrie, Alerting und kontrollierte Infrastrukturänderungen kombiniert.
Für Replatform-Workloads auf Kubernetes umfasst Optimierung mehrere Ebenen und sollte als gemeinsamer Regelkreis gesteuert werden.
Zentrale Eingaben
Cutover-Berichte, Incident-Trends, SLO-Messwerte, Telemetrie-Baselines und Kostenberichte.
Ergebnisse
Priorisiertes Verbesserungs-Backlog, validierte Tuning-Änderungen und aktualisierte Betriebsstandards.
Governance-Effekt
Nachvollziehbare Trade-off-Entscheidungen zwischen Performance, Stabilität und Kosten.
STACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Wählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegWählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Wählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Wählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegWählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegWählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Wählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route wegSTACKIT
Der souveräne europäische Cloud-Anbieter hinter dem Framework, mit IaaS und PaaS aus deutschen und österreichischen Rechenzentren und voller Unabhängigkeit.
Wählen Sie nach Migrationsabnahme und Stabilisierung anhand des gemessenen Workload-Verhaltens jeweils eine Optimierung. Dieses Asset behandelt Pod-Ressourcen, Worker-Kapazität, optionales HPA und PostgreSQL Flex. Es behauptet nicht, dass diese Änderungen im Migrationstest erprobt wurden.
Führen Sie dieselbe Terraform-, Helm-, Spring-Music-JAR-, PostgreSQL-Flex- und Observability-Implementierung fort, die für Bereitstellung, Probe, Cutover und Rollback genutzt wurde. Führen Sie kein zweites Beispiel ein und keine Kapazitätsexperimente im Migrationsfenster durch.
Spring Boot Kubernetes Replatform Referenz Dieselben versionierten Variablen, Deployment-Ressourcen und Dashboards wie im Migrations- und Stabilisierungsworkflow verwenden. Repository öffnenÖffnen Sie grafana_dashboard_url oder den Ordner SCF Replatform. Terraform verwaltet acht Panels.

Aufnahme der Referenzbereitstellung vom 25. September 2026, 14:41 bis 15:41 UTC. Sie zeigt eine Stunde Testbetrieb mit geringer Last, keine repräsentative Basis für Produktions-Sizing. Bewerten Sie Anwendungsaktivität gemeinsam mit Datenbankverfügbarkeit und -auslastung, bevor Sie einen Optimierungskandidaten auswählen. Die folgende Tabelle erläutert die Grenzen dieser Signale.
| Panelgruppe | Unterstützte Entscheidung | Interpretationsgrenze |
|---|---|---|
| Cluster-CPU und -Speicher | Worker-Auslastung und Gesamtkapazität | Die CPU-Abfrage zeigt belegte Kerne, keinen Auslastungsprozentsatz; Cluster-Summen identifizieren keinen einzelnen Pod-Engpass |
| Laufende Pods | Vorhandensein des Workloads | Ein Scrape-Ersatzwert beweist nicht, dass alle Replikas gesund sind; Kubernetes-Rollout und Soll-Replikazahl prüfen |
| Anwendungsanfragen | Anfragerate und mittlere Dauer | Der Boot-2-Adapter liefert keine Latenzperzentile und kein vollständiges Fehlerraten-SLO |
| PostgreSQL-Verfügbarkeit und -Verbindungen | Datenbankerreichbarkeit und Verbindungsdruck | pg_up und tatsächlichen Scrape-Zustand unabhängig prüfen |
| PostgreSQL-Transaktionen | Commit- und Rollback-Trends | Veränderungen mit Anfragelast und Anwendungsverhalten korrelieren |
| PostgreSQL-Cache-Treffer | Verhalten des Lesecaches | Geringe Anfragelast und fehlende Zeitreihen begründen keinen Kapazitätsbedarf |
| Temporäre PostgreSQL-Bytes und Sperren | Untersuchung von Abfragen oder Konkurrenz | Mehr Rechenleistung behebt Abfrage- oder Sperrprobleme nicht automatisch |
Prüfen Sie vor der Interpretation echte up=1-Messwerte für beide Scrape-Jobs. Einige
Cluster-Panels enthalten Ersatzwerte; eine dargestellte Null belegt daher keinen Nullverbrauch.
Begrenzen Sie Abfragen auf den gewünschten Cluster und die Datenbank, wenn eine Datenquelle
mehrere Workloads enthält. Nutzen Sie zusätzliche Telemetrie und fachliche Tests für
Latenzperzentile, Fehler und Recovery-Ziele.
Erfassen Sie eine repräsentative Baseline einschließlich Spitzenzeiten, geplanter Arbeit, JVM-Aufwärmphase und Datenbankwartung. Vereinbaren Sie Beobachtungsfenster, fachliche SLOs, Kapazitätsreserve und Kostenziel vor der Änderung. Vierzehn Tage können ein Ausgangspunkt für die Beobachtung sein, sind aber keine feste Regel.
Bewahren Sie Baseline, vorherige Konfiguration, Rollback-Plan und Entscheidungsschwellen auf. Fehlende Metriken, fehlgeschlagene Alarmzustellung oder ausschließlich synthetischer Traffic reichen als Nachweis für eine produktive Verkleinerung nicht aus.
Bewerten Sie Datenbank- und Anwendungssignale gemeinsam. Mehr Pods erhöhen den Verbindungsbedarf und können den Engpass zu Flex verlagern. Trennen Sie Connection-Pool-Grenzen, teure Abfragen, Sperrkonflikte und Speicherdruck von tatsächlichen CPU- oder RAM-Engpässen.
Nutzen Sie die Anleitung zum PostgreSQL-Flex-Monitoring , um Service-Metriken zusammen mit dem Anwendungsverhalten zu interpretieren.
Die Referenz stellt postgres_flex_cpu, postgres_flex_ram, postgres_flex_replicas,
postgres_flex_storage_class und postgres_flex_storage_size bereit. CPU, RAM und die Auswahl
Single oder Replica bestimmen einen Flavor aus dem aktuellen Projektkatalog. Wählen Sie
eine angebotene Kombination; setzen Sie weder beliebige Werte noch einen Wechsel ohne Neuerstellung voraus.
Prüfen Sie Plan und Service-Einschränkungen vor der Freigabe. Behandeln Sie einen Datenbankaustausch als neue Migration mit verifizierter Recovery, nicht als Routine-Resize. Speicherwachstum und Service-Plan-Wechsel lassen sich möglicherweise nicht durch alte Variablenwerte zurücknehmen. Bestätigen Sie Recovery-Pfad und Wartungsfenster vor der Änderung.
Der getestete Migrations-Rollback stellt Anwendungsdaten wieder her; er macht weder Infrastruktur-Resizing rückgängig noch weist er Managed-Flex-Restore nach. Validieren Sie das erforderliche Recovery-Verfahren separat.
PostgreSQL-Flex-Flavors und Performance-Klassen Dokumentation öffnen| Beschreibung | ID | CPU | Memory | max_connections | shared_buffers | work_mem | maintenance_work_mem | effective_cache_size |
|---|---|---|---|---|---|---|---|---|
| Small, Compute optimized | 2.4 | 2 | 4 GB | 95 | 950 MB | 14 MB | 380 MB | 2660 MB |
| Small, Memory optimized | 2.16 | 2 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| Medium, Compute optimized | 4.8 | 4 | 8 GB | 195 | 1950 MB | 14 MB | 780 MB | 5460 MB |
| Medium, Memory optimized | 4.32 | 4 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| Large, Processor optimized | 8.16 | 8 | 16 GB | 385 | 3950 MB | 14 MB | 1580 MB | 11060 MB |
| X-Large, Compute optimized | 16.32 | 16 | 32 GB | 785 | 7950 MB | 14 MB | 3180 MB | 22260 MB |
| X-Large, Memory optimized | 16.128 | 16 | 128 GB | 3170 | 31950 MB | 14 MB | 12780 MB | 89460 MB |
max_connections angerechnet.Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
| Beschreibung | ID | Max. IOPS | Max. Durchsatz (MB/s) |
|---|---|---|---|
| Leistungsklasse 2 | premium-perf2-stackit | 1000 | 100 |
| Leistungsklasse 4 | premium-perf4-stackit | 2000 | 150 |
| Leistungsklasse 6 | premium-perf6-stackit | 5000 | 200 |
| Leistungsklasse 8 | premium-perf8-stackit | 10000 | 250 |
| Leistungsklasse 10 | premium-perf10-stackit | 15000 | 300 |
| Leistungsklasse 12 | premium-perf12-stackit | 20000 | 350 |
Aktuell bieten wir drei Typen von Instanzen an. Für jeden Typ ist ein anderer Satz an Flavor verfügbar.
Dieser Abschnitt wird mehrmals am Tag automatisch aus der STACKIT-Doku übernommen. Hier lässt er sich nicht ändern. Änderungen gehören in die STACKIT-Doku.
Die Referenz definiert Ressourcen im Spring-Boot-Deployment in main.tf, nicht über eigene
CPU- oder Speichervariablen. Java fordert 100m CPU und 512Mi Speicher an; die Limits liegen
bei 500m und 1Gi. JAVA_TOOL_OPTIONS setzt den initialen Heap auf 128 MiB und den maximalen
Heap auf 512 MiB. Beide Exporter-Sidecars besitzen jeweils ein eigenes Ressourcenbudget.
Vergleichen Sie tatsächlichen Working Set, Heap, Nicht-Heap-Speicher, Throttling, Startverhalten
und Sidecar-Verbrauch, bevor Sie das Deployment ändern. Lassen Sie neben dem Java-Heap Raum
für Threads und nativen Speicher. Ressourcenänderungen können Pods neu ausrollen und einen
Workload mit einer Replika unterbrechen; planen und validieren Sie entsprechend. Erfinden Sie
keine nicht unterstützten springboot_cpu- oder Speichervariablen.
Qualifizieren Sie Metriken, Replikaverantwortung, Anwendungssicherheit und Telemetrie pro Pod vor einem begrenzten HPA-Experiment.
HPA vergleicht die beobachtete Pod-CPU-Auslastung mit dem konfigurierten Ziel und passt die Replikazahl innerhalb von Mindest- und Höchstgrenzen an. Die Ressourcenmetrik setzt realistische Requests und eine verfügbare Kubernetes Metrics API voraus; erfolgreiches Grafana-Scraping beweist deren Funktion nicht. Die Ressourcenauslastung umfasst auch die Sidecar-Budgets. HPA allein kann keine Worker-Kapazität erzeugen.
Prüfen Sie vor einem Experiment mit mehreren Replikas Sitzungszustand, gemeinsame Schreibzugriffe, Initialisierung und Datenbankverbindungslimits. Das aktuelle Anwendungs-/Exporter-Scraping nutzt einen lastverteilten Service-Endpunkt; Replikas können wechselnd statt als getrennte Zeitreihen erfasst werden. Etablieren Sie Anwendungsscraping pro Pod und vermeiden Sie doppelte Datenbankaggregation, bevor Sie skalierten Anfrageraten oder Summen vertrauen. Diese Erweiterungen gehören nicht zum validierten Ein-Replika-Pfad.
Testen Sie begrenztes HPA erst nach Abschluss von Migration und Rollback-Arbeiten in einem separat freigegebenen Experiment. Diese beispielhaften Grenzen sind keine Sizing-Empfehlungen für die Produktion:
enable_springboot_hpa = truespringboot_hpa_min_replicas = 1springboot_hpa_max_replicas = 3springboot_hpa_target_cpu_utilization_percentage = 70Das Deployment definiert außerdem springboot_replicas in Terraform. Prüfen Sie spätere Pläne
auf konkurrierende Replikaänderungen und legen Sie vor unbeaufsichtigtem HPA-Betrieb eine
explizite Zuständigkeit fest. Das Migrationsskript lehnt HPA-verwaltete Ziele ab; deaktivieren
Sie HPA vor jeder späteren Migration und jedem Rollback.
Prüfen Sie den Plan und beobachten Sie anschließend HPA mit der konfigurierten Kubeconfig:
terraform plan -var-file=env.tfvars -out=tfplan.optimizeterraform apply tfplan.optimizekubectl get hpa,pods -n springbootkubectl describe hpa springboot -n springbootkubectl top pods -n springboot --containersStellen Sie genügend Worker-Reserve bereit und berücksichtigen Sie Pool-Kapazität, Zonengrenzen und Rollout-Unterbrechungen.

Das SKE-Dashboard zeigt dasselbe Intervall von 14:41 bis 15:41 UTC am 25. September 2026. Die tatsächliche CPU-Nutzung beträgt etwa 2 %, während CPU-Requests etwa 34 % der Cluster-Kapazität reservieren. Das verdeutlicht, warum Scheduling-Reservierungen und gemessener Verbrauch gemeinsam zu bewerten sind. Die 17 laufenden Pods umfassen Plattformkomponenten, nicht 17 Spring-Boot-Replikas; das Workload-Dashboard oben zeigt den einzelnen Anwendungspod. Keine fehlgeschlagenen oder wartenden Pods zu diesem Zeitpunkt sind ein nützliches Zustandssignal, kein Beweis für Spitzenlast- oder Ausfalltoleranz.
Passen Sie node_pool_minimum, node_pool_maximum und node_pool_machine_type anhand
aggregierter Requests, beobachteter Nachfrage, System-Overhead und Rollout-Reserve an.
Gleiche Mindest- und Höchstwerte fixieren die Pool-Größe; ein höheres HPA-Maximum kann diese
Kapazitätsgrenze nicht überwinden.
Die Referenz konfiguriert einen Node Pool. Weitere Pools und Zonenplatzierung erfordern eine explizite Architekturerweiterung. Die Availability Zone eines Node Pools kann nicht ohne Neuerstellung geändert werden; eine andere Zone benötigt einen neuen Pool-Namen und einen geprüften Migrationsplan. Prüfen Sie tatsächliche SKE-Kapazität und geplanten Worker-Austausch vor einer Flavor- oder Topologieänderung.
SKE Node Pools verwalten Dokumentation öffnenDer implementierte Einstiegspunkt ist Envoy Gateway mit HTTPRoutes, kein älterer Ingress. Vergleichen Sie Gateway- und Service-Verhalten mit Anwendungs- und Datenbanklatenz vor einer Worker-Größenänderung. Der optionale clusterinterne Lastgenerator umgeht öffentliches Gateway, DNS und TLS; ergänzen Sie einen freigegebenen externen End-to-End-Test. Dieses Asset behauptet keine gemessene öffentliche Durchsatzgrenze.
Spring Music speichert seine maßgeblichen Daten in Flex. In dieser Basis gibt es kein
Anwendungs-PersistentVolume für Rightsizing. node_pool_volume_size betrifft Worker-Speicher,
nicht Datenbankkapazität. Nutzen Sie die Flex-Speichereinstellungen für Albumdaten und bewerten
Sie Wachstum, Abfrage-I/O, Aufbewahrung und Recovery gemeinsam. Ergänzen Sie Kubernetes-Speicher
nur für einen separat entworfenen Persistenzbedarf.
Stellen Sie bei reversiblen Konfigurationsänderungen die zuvor geprüften Werte wieder her und prüfen Sie vor dem Apply einen neuen Plan. Setzen Sie nicht voraus, dass eine kleinere Datenbank oder die Rückkehr zur alten Speicherklasse unterstützt wird. War HPA das Experiment, deaktivieren Sie es und stellen Sie die gewünschte Replikazahl über die geprüfte Konfiguration wieder her; bestätigen Sie danach ein stabiles Deployment.
Dokumentieren Sie Vorher-/Nachher-Nachweise, Konfigurationsstand, fachliche Ergebnisse und Kostenwirkung. Ein Datenbank-Migrations-Rollback ersetzt nicht die Rücknahme einer Optimierungsänderung.
Der Live-Referenztest bestätigte den Workload mit einer Replika, Datenmigration und Rollback sowie den Dashboard-/Scrape-Pfad. Er wies weder Autoscaling-Verhalten noch optimales Sizing, Produktionslastkapazität oder Hochverfügbarkeit nach. Erheben Sie für jede dieser Entscheidungen neue Nachweise.
Kubernetes Horizontal Pod Autoscaler Regelkreis, Metrikvoraussetzungen und Skalierungsgrenzen der Kubernetes-Referenz vor der Aktivierung von Autoscaling prüfen. Externe Seite öffnen Führt von der Route weg