Kubernetes PostgreSQL – Streaming, Ablage und Import

Technische Referenz & Betriebsdokumentation


1. Ziel dieser Dokumentation

Dieses Dokument beschreibt:

  • Zugriff auf PostgreSQL-Pods in Kubernetes
  • Ablage großer SQL-Dateien im Persistent Volume (PV)
  • Streaming von Git-Repositories ohne lokale Speicherung
  • Sicheren und kontrollierten SQL-Import
  • Umgang mit Kubernetes Secrets
  • Risiken und empfohlene Vorgehensweisen

2. Platzhalter-Konvention

In allen Beispielen werden folgende Platzhalter verwendet:

<namespace>
<pod>
<secret>
<database>
<user>
<repo-url>
<commit>
<ordner>
<datei>
<key>

Diese sind projektspezifisch zu ersetzen.


3. Architekturüberblick

PostgreSQL speichert Daten im Persistent Volume unter:

/bitnami/postgresql

Wichtige Unterscheidung

PfadBedeutung
/opt/bitnamiContainer-Software
/bitnami/postgresqlDaten (Persistent Volume)
/tmpTemporär, nicht persistent

Ablage-Ordner für Import-Dateien:

/bitnami/postgresql/<ordner>

4. Kubernetes – Grundbefehle

Alle Pods anzeigen

kubectl get pods -A

Pods in einem Namespace anzeigen

kubectl get pods -n <namespace>

Befehl in Pod ausführen

kubectl exec -n <namespace> <pod> -- <command>

Interaktive Shell starten

kubectl exec -it -n <namespace> <pod> -- sh

5. Persistent Volume prüfen

Speicherplatz prüfen

kubectl exec -n <namespace> <pod> -- df -h /bitnami/postgresql

Ordnerinhalt anzeigen

kubectl exec -n <namespace> <pod> -- ls -lh /bitnami/postgresql/<ordner>

Anzahl Dateien zählen

kubectl exec -n <namespace> <pod> -- \
sh -lc 'ls -1 /bitnami/postgresql/<ordner> | wc -l'

6. Streaming – Einzelne Datei ins PV speichern (ohne Ausführung)

curl -L "<raw-file-url>" \
| kubectl exec -i -n <namespace> <pod> -- \
sh -lc 'cat > /bitnami/postgresql/<ordner>/<datei>.sql'

Eigenschaften:

  • Kein lokales Speichern
  • Kein Ausführen
  • Reine Dateiablage im PV

7. Komplettes Repository direkt ins PV streamen

Repository als tar.gz streamen und entpacken

curl -L "<repo-url>/-/archive/<commit>/<project>-<commit>.tar.gz" \
| kubectl exec -i -n <namespace> <pod> -- \
sh -lc 'mkdir -p /bitnami/postgresql/<ordner> && \
cd /bitnami/postgresql/<ordner> && \
tar xz --strip-components=1'

Erklärung

  • curl lädt Archiv
  • Stream wird direkt an Pod weitergereicht
  • tar xz entpackt im PV
  • --strip-components=1 entfernt obersten Archiv-Ordner

Vorteile

  • Kein Speicherverbrauch auf Managementserver
  • Reproduzierbarer Stand durch Commit
  • Kein temporäres Ablegen

8. Kubernetes Secrets – Passwort abrufen

Secrets anzeigen

kubectl get secret -n <namespace>

Passwort dekodieren

kubectl get secret -n <namespace> <secret> \
-o jsonpath="{.data.<key>}" | base64 -d; echo

Typische Keys:

  • postgres-password
  • password

9. SQL-Import – Einzeldatei

kubectl exec -i -n <namespace> <pod> -- \
psql -U <user> -d <database> \
-f /bitnami/postgresql/<ordner>/<datei>.sql

Wichtig:

  • Datei wird ausgeführt
  • Änderungen sind persistent
  • Autocommit ist Standard

10. Batch-Import – Kontrollierte Ausführung

kubectl exec -it -n <namespace> <pod> -- sh -lc '
for f in /bitnami/postgresql/<ordner>/*.sql; do
echo "RUN $f"
psql -U <user> -d <database> \
-v ON_ERROR_STOP=1 \
-f "$f" || exit 1
done'

Eigenschaften:

  • Klare Reihenfolge
  • Stoppt bei Fehler
  • Keine stille Fehlerfortsetzung

11. Wichtige Shell-Operatoren

OperatorBedeutung
;Immer nächsten Befehl ausführen
&&Nur bei Erfolg fortfahren
>Datei überschreiben
>>Datei anhängen
$()Befehl ausführen und Ergebnis einsetzen
sh -lcMehrere Befehle im Pod ausführen

12. Risiken & Sicherheitsaspekte

Autocommit-Verhalten

Wenn SQL-Dateien kein BEGIN; ... COMMIT; enthalten,
werden INSERT, DROP, TRUNCATE sofort wirksam.


Destruktive Befehle erkennen

Vor Ausführung prüfen:

grep -RInE "^\s*(DROP|TRUNCATE)\b" <ordner>

Empfohlene Reihenfolge

  1. Struktur-Dateien
  2. Daten-Dateien
  3. Views / Indizes / Constraints

Empfehlung

Vor großen Imports:

  • Backup erstellen
  • Import in Testumgebung prüfen
  • Mit ON_ERROR_STOP=1 arbeiten

13. Best Practices

  • Commit-Hash statt Branch verwenden
  • Import-Ordner datiert benennen
  • Dateien erst speichern, dann ausführen
  • Speicherplatz vorab prüfen
  • Große Datenmengen niemals über Managementserver speichern
  • Batch-Import niemals ohne Fehlerstopp

14. Betriebszustand nach erfolgreichem Streaming

Erfolgsmerkmale

  • Dateien liegen vollständig im PV
  • df -h zeigt erwartete Belegung
  • Keine laufenden tar-Prozesse
  • Keine Fehlermeldungen beim Entpacken

15. Fazit

Das beschriebene Verfahren ermöglicht:

  • Reproduzierbare Datenübernahme
  • Speicherneutrales Streaming
  • Saubere Trennung zwischen Ablage und Ausführung
  • Sicheren produktiven Betrieb

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert