Files
customer-installer/CONTAINER_UPDATE_STRATEGIE.md
T

188 lines
5.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Strategie: Docker-Container in Kunden-LXCs auf aktuellem Stand halten
## Ziel
Eine sichere, reproduzierbare und möglichst ausfallarme Vorgehensweise, um Docker-Container in Kunden-LXCs regelmäßig zu aktualisieren.
---
## Ausgangslage / Annahmen
- Jede Kundeninstanz läuft in einem eigenen LXC.
- In den LXCs werden Container per Docker bzw. Docker Compose betrieben.
- Es gibt produktive Workflows (z.B. n8n/API), bei denen ungeplante Downtime minimiert werden soll.
- Nicht jede neue Image-Version ist automatisch kompatibel (Breaking Changes möglich).
---
## Leitprinzipien
1. **Planbar statt ad hoc**: feste Update-Fenster.
2. **Versionen kontrollieren**: möglichst mit festen Tags, nicht blind `latest`.
3. **Vor jedem Update sichern**: Konfiguration, Volumes, Datenbank.
4. **Nach jedem Update prüfen**: Health-Checks + funktionaler Smoke-Test.
5. **Rollback jederzeit möglich**: alte Versionen/Backups kurzfristig wiederherstellbar.
6. **Standardisieren**: identischer Prozess für alle Kunden-LXCs.
---
## Empfohlener Betriebsprozess
## 1) Inventarisierung pro Kunden-LXC
Für jede Instanz dokumentieren:
- Container/Services (Name, Image, Tag)
- Abhängigkeiten (DB, Reverse Proxy, externe APIs)
- Persistente Daten (Volumes, Bind-Mounts, DB)
- Kritische Funktionen (Login, Webhook, Jobs, API-Calls)
- Wartungsfenster und SLA-Anforderungen
Ergebnis: pro Kunde eine „Service-Karte“.
---
## 2) Release- und Update-Policy definieren
- **Routinezyklus**: z.B. monatlich.
- **Security-Fixes**: außerplanmäßig mit Priorität.
- **Versionierungsregel**:
- bevorzugt semantische stabile Tags (`x.y.z`)
- `latest` vermeiden in Produktion
- **Freigabestufen**:
1. Test-/Pilot-LXC
2. kleine Kundengruppe
3. Vollausrollung
---
## 3) Pre-Update-Checks (Pflicht)
Vor jedem Update in einem LXC:
- Freier Speicherplatz ausreichend?
- Host/LXC-Ressourcen ok (CPU/RAM/IO)?
- Docker/Compose lauffähig?
- Externe Abhängigkeiten erreichbar?
- Letztes erfolgreiches Backup vorhanden?
Wenn ein Check fehlschlägt: **kein Update**.
---
## 4) Backup-Strategie vor Update
Mindestens sichern:
- `.env` / Compose-Dateien / relevante Skripte
- Persistente Volumes (App-Daten)
- Datenbanken (Dump, konsistent)
Empfehlung:
- Zeitstempel-basierte Backup-Ordner
- Aufbewahrung nach Rotation (z.B. 7/30 Tage)
- Wiederherstellung regelmäßig testen (Restore-Drill)
---
## 5) Update-Durchführung (kontrolliert)
Empfohlene Reihenfolge:
1. Neue Images ziehen (`pull`)
2. Geplante Recreate/Restart pro Service
3. Abhängige Services in sinnvoller Reihenfolge starten
4. Kurz warten, bis Services „healthy“ sind
Wichtig:
- Keine parallelen Updates über alle Kunden auf einmal.
- In Wellen ausrollen (Batching), z.B. 510 Kunden pro Fenster.
---
## 6) Post-Update-Validierung
Nach jedem LXC-Update:
- Container laufen?
- Health-Status „healthy“?
- Logs ohne kritische Fehler?
- Funktionaler Smoke-Test:
- UI erreichbar
- Login/Token funktioniert
- Kern-Workflow/Webhook testbar
- API-Endpunkt liefert erwartete Antwort
Nur bei erfolgreicher Validierung gilt das Update als abgeschlossen.
---
## 7) Rollback-Plan (verbindlich)
Rollback auslösen bei:
- Health-Checks schlagen fehl
- Kritischer Funktionsfehler
- Ungewöhnliche Fehlerhäufung in Logs
Rollback-Optionen:
1. Rückkehr auf vorherige Image-Tags
2. Wiederherstellung von Volumes/DB aus Backup
3. Services neu starten und Smoke-Test wiederholen
Ziel: klare RTO/RPO-Grenzen pro Kundentyp.
---
## 8) Monitoring & Reporting
- Zentrales Logging (mind. pro LXC abrufbar)
- Update-Protokoll je Kunde:
- Start/Ende
- alte/neue Version
- Ergebnis
- aufgetretene Fehler
- Regelmäßiger Report:
- Update-Quote
- Fehlerquote
- Rollback-Häufigkeit
---
## 9) Automatisierungsgrad steigern (Roadmap)
Stufe 1 (kurzfristig):
- Standardisiertes manuelles Verfahren + Checklisten
Stufe 2:
- Gemeinsames Update-Skript mit:
- Prechecks
- Backup
- Pull/Recreate
- Health-Check
- Ergebniscode
Stufe 3:
- Orchestrierte Wellen-Rollouts über mehrere LXCs
- Benachrichtigungen (z.B. Mail/Chat) bei Erfolg/Fehler
- Teilautomatischer Rollback
---
## Konkrete Empfehlung für euren Kontext
1. **Sofort**: Für alle Kunden-LXCs eine Inventarliste + feste Image-Tags einführen.
2. **Kurzfristig**: Standard-Runbook für Update/Backup/Rollback als Teamprozess etablieren.
3. **Mittelfristig**: Einheitliches Update-Skript für alle Kunden-LXCs umsetzen.
4. **Dauerhaft**: Pilot-zu-Production-Rollout in Wellen mit verpflichtenden Health-Checks.
---
## Beispiel-Runbook (kompakt)
1. Wartungsfenster starten
2. Prechecks ausführen
3. Backup erstellen
4. Images aktualisieren
5. Container kontrolliert neu bereitstellen
6. Health-Checks + Smoke-Test
7. Erfolg dokumentieren **oder** Rollback
8. Abschlussmeldung / Report
---
## Risiken und Gegenmaßnahmen
- **Breaking Changes in neuen Images**
→ Release Notes prüfen, zuerst Pilot-LXC.
- **Dateninkonsistenz bei Update**
→ konsistente DB-Dumps, Service-Reihenfolge beachten.
- **Zu viele gleichzeitige Änderungen**
→ schrittweiser Rollout, kleine Batches.
- **Fehlendes Rollback**
→ verpflichtende Backup- und Restore-Tests.
---
## Fazit
Der nachhaltigste Weg ist ein standardisierter Update-Lifecycle aus **Inventarisierung, Precheck, Backup, kontrolliertem Rollout, Validierung und Rollback-Fähigkeit**. Damit bleiben Docker-Container in Kunden-LXCs aktuell, ohne Stabilität und Betriebsfähigkeit zu gefährden.