LDAP-Migration vom Dogu zur Komponente
Dieses Dokument beschreibt, wie die Migration einer bestehenden LDAP-Dogu-Instanz zur LDAP-Komponente funktioniert und wie sie im Betrieb anzuwenden ist.
Ziel und Ergebnis
Die Migration übernimmt die bestehenden LDAP-Daten des Dogus in die LDAP-Komponente, damit ein bestehendes System ohne Neuaufbau der Benutzer- und Gruppendaten weiterbetrieben werden kann.
Nach einer erfolgreichen Migration gilt:
- die LDAP-Komponente läuft mit den migrierten Daten,
- das alte LDAP-Dogu ist gestoppt,
- das alte LDAP-Dogu ist auf
pauseReconciliation=truegesetzt, - eine erneute automatische Migration wird nicht mehr ausgeführt.
Die spätere Deinstallation des alten LDAP-Dogus ist nicht Teil des automatischen Migrationsablaufs.
Sie erfolgt anschließend bewusst über den Blueprint, indem das Dogu auf absent: true gesetzt wird.
Voraussetzungen
Vor der Migration müssen folgende Bedingungen erfüllt sein:
- das LDAP-Dogu ist im Cluster vorhanden,
- das LDAP-Dogu-PVC existiert unter dem festen Namen
ldap, - die LDAP-Komponente wird mit aktiviertem Migrationspfad installiert oder aktualisiert,
migration.enabled=trueist im Chart gesetzt,-
globale LDAP-relevante Konfiguration der Komponente ist passend gesetzt, insbesondere:
globalConfig.configMapNameglobalConfig.keyconfig.openldap_suffix
- ein Ziel-PVC für die LDAP-Komponente kann durch das StatefulSet erzeugt werden.
Was genau migriert wird
Es wird nur die LDAP-Datenbank aus dem Dogu übernommen.
Konkret:
- Quellpfad:
dbim PVC des LDAP-Dogus - Zielpfad:
dbim PVC der LDAP-Komponente - kopiert werden die MDB-Daten der LDAP-Datenbank
- nicht übernommen wird die alte
cn=config-Konfiguration des Dogus
Wichtig:
- die LDAP-Komponente erzeugt ihre eigene Konfiguration selbst,
- die Migration kopiert danach nur die eigentlichen LDAP-Daten,
- der Laufzeitpfad
runwird nicht übernommen. - vor dem eigentlichen Cutover wird geprüft, ob Dogu und Komponente dieselbe wesentliche LDAP-Konfiguration verwenden.
Wie die Migration technisch abläuft
Die Migration ist als Helm-Hook im LDAP-Chart implementiert und läuft automatisch bei post-install und post-upgrade.
Wichtig:
- beim ersten Installieren der Komponente kann das StatefulSet kurz initial starten,
- der erste Hook-Job skaliert das Ziel-StatefulSet anschließend gezielt auf
0, - danach werden die Daten übernommen und das Ziel erneut gestartet.
Es gibt zwei Hook-Jobs:
-
*-migration-stop-source- validiert vor dem Cutover die wesentliche Konfiguration von Dogu und Komponente,
- setzt das LDAP-Dogu auf
spec.stopped=true, - wartet, bis die LDAP-Dogu-Pods beendet sind,
- setzt anschließend
spec.pauseReconciliation=true, - skaliert das Ziel-StatefulSet der LDAP-Komponente auf
0.
-
*-migration-copy-and-start- mountet Quell- und Ziel-PVC,
- kopiert die LDAP-Datenbank vom Dogu in das Komponenten-PVC,
- setzt den Migrationsstatus auf
done, - startet das StatefulSet der LDAP-Komponente wieder.
Wenn der zweite Job fehlschlägt:
- wird der Migrationsstatus auf
failedgesetzt, - das LDAP-Dogu wird wieder gestartet,
pauseReconciliationwird wieder auffalsegesetzt.
Die Konfigurationsvalidierung prüft aktuell als harte Vorbedingung:
domainopenldap_suffix
Bei einer Abweichung wird die Migration vor dem Stoppen des LDAP-Dogus abgebrochen.
Migrationsstatus
Der aktuelle Status wird in der ConfigMap <release>-config unter dem Key migrationPhase gespeichert.
Mögliche Werte:
| Wert | Bedeutung |
|---|---|
pending |
Migration wurde noch nicht abgeschlossen. |
running |
Migration läuft aktuell. |
done |
Migration wurde erfolgreich abgeschlossen. |
failed |
Migration ist fehlgeschlagen. |
skipped_no_source |
Es wurden keine Quelldaten gefunden, daher wurde keine Datenübernahme durchgeführt. |
Wichtig:
- bei
doneundskipped_no_sourcewerden die Migrationsjobs bei weiteren Upgrades nicht erneut ausgeführt, - bei
failedkann die Migration nach Fehlerbehebung durch ein erneutes Upgrade erneut angestoßen werden.
Anwendung im Betrieb
Variante 1: Installation über Helm
Die Migration läuft automatisch, wenn die LDAP-Komponente mit aktivierter Migration installiert oder aktualisiert wird.
Beispiel:
helm upgrade --install ldap k8s/helm \
--namespace ecosystem \
--set migration.enabled=trueAlternativ über das Make-Target:
make helm-applyVariante 2: Installation über die Komponenten-CR
Wenn die LDAP-Komponente über den Component-Operator ausgebracht wird, läuft die Migration ebenfalls automatisch mit dem Helm-Release im Hintergrund.
Beispiel:
make component-applyVariante 3: Nutzung über das LOP-IdP Umbrella-Chart
Wenn LDAP Teil des LOP-IdP Umbrella-Charts ist, wird die Migration beim Installieren oder Aktualisieren dieses Umbrella-Charts automatisch mit ausgeführt, solange für LDAP migration.enabled=true gesetzt ist.
Nachkontrolle
Nach einer erfolgreichen Migration sollten mindestens diese Prüfungen durchgeführt werden:
kubectl -n ecosystem get dogu ldap -o jsonpath='{.spec.stopped}{"\n"}{.spec.pauseReconciliation}{"\n"}'
kubectl -n ecosystem get configmap ldap-config -o jsonpath='{.data.migrationPhase}{"\n"}'
kubectl -n ecosystem rollout status statefulset/ldap --timeout=300s
kubectl -n ecosystem get pod -l app.kubernetes.io/instance=ldapErwartetes Ergebnis:
spec.stopped=true,spec.pauseReconciliation=true,migrationPhase=done,- das StatefulSet
ldapistReady.
Hinweis:
- erfolgreiche Hook-Jobs werden automatisch wieder gelöscht,
- im Erfolgsfall erfolgt die Nachkontrolle daher über den Zustand von Dogu, ConfigMap und StatefulSet,
- bei Fehlern bleiben die fehlgeschlagenen Jobs erhalten und können per
kubectl logs job/...untersucht werden.
Zusätzlich sollte fachlich geprüft werden:
- Benutzer sind weiterhin vorhanden,
- Gruppen sind weiterhin vorhanden,
- Anmeldung mit bekannten LDAP-Benutzern funktioniert,
- Service-Accounts der Komponente sind vorhanden und funktionsfähig.
Fehlerfall und Rollback
Wenn die Migration fehlschlägt, ist der relevante automatische Rollback-Pfad:
migrationPhase=failed,- das LDAP-Dogu wird wieder gestartet,
pauseReconciliationwird wieder auffalsegesetzt.
Prüfung im Fehlerfall:
kubectl -n ecosystem get dogu ldap -o jsonpath='{.spec.stopped}{"\n"}{.spec.pauseReconciliation}{"\n"}'
kubectl -n ecosystem get configmap ldap-config -o jsonpath='{.data.migrationPhase}{"\n"}'
kubectl -n ecosystem logs job/ldap-migration-stop-source
kubectl -n ecosystem logs job/ldap-migration-copy-and-startErwartetes Ergebnis nach einem Fehler in Schritt 2:
spec.stopped=false,spec.pauseReconciliation=false,migrationPhase=failed,- das LDAP-Dogu ist wieder verfügbar.
Nach Fehlerbehebung kann die Migration durch ein erneutes Install/Upgrade erneut angestoßen werden.
Abschluss nach erfolgreicher Migration
Nach erfolgreicher Migration verbleibt das alte LDAP-Dogu zunächst bewusst im Cluster, aber inaktiv:
stopped=truepauseReconciliation=true
Erst wenn der neue Zustand ausreichend verifiziert ist, sollte das alte LDAP-Dogu im Blueprint auf absent: true gesetzt und damit deinstalliert werden.
Dieser Cleanup-Schritt ist bewusst getrennt vom automatischen Migrationsablauf.