Maintenance und Upgrades¶
Die regelmäßige Wartung der ayedo Software Delivery Plattform ist essentiell für Sicherheit, Stabilität und Compliance. Dieses Dokument beschreibt die operativen Verfahren für Patching, Updates und Upgrades.
Überblick¶
Die ayedo SDP erfordert drei Wartungsebenen:
- OS-Patching: Sicherheits-Updates der Node-Betriebssysteme
- Platform Stack Upgrades: Updates der ayedo-Komponenten
- Kubernetes-Upgrades: Kubernetes-Version-Updates
Compliance-Anforderungen¶
Viele Regulierungen erfordern regelmäßige Security-Patches und System-Updates:
| Norm | Control | Anforderung |
|---|---|---|
| ISO 27001 | Annex A 12.6.1 | Management of Technical Vulnerabilities |
| ISO 27001 | Annex A 8.19 | Change Management |
| BSI IT-Grundschutz | APP.4.4.A21 | Regelmäßige Updates von K8s und Workloads |
| GDPR | Art. 32 | Availability and Resilience |
| NIS2 | Requirement (d) | Business Continuity Management |
Compliance-Relevanz
Das Betreiben veralteter Versionen mit bekannten Schwachstellen kann zu Compliance-Verstößen führen. Regelmäßige Wartung ist Pflicht.
Voraussetzungen¶
Bevor Sie Wartungsarbeiten durchführen:
- Plattform läuft stabil (siehe Troubleshooting)
- Cluster ist korrekt dimensioniert (siehe Kapazitätsplanung)
- Backup-Strategie ist implementiert (siehe Backup & Recovery)
- Monitoring-Alerts sind konfiguriert (siehe User Alerts)
- Incident-Response-Plan existiert (siehe Runbooks)
Wartungsebenen¶
1. OS-Patching der Nodes¶
Häufigkeit: Wöchentlich (automatisch) oder monatlich (manuell)
Beschreibung: Security-Patches für Ubuntu/CentOS/RHEL auf Kubernetes-Nodes
Automatisches Patching¶
Empfohlene Methode via Unattended Upgrades (Ubuntu):
# Auf allen Nodes
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Konfiguration in /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
Reboot erforderlich
Einige Updates (Kernel) erfordern einen Neustart der Nodes. Node-Reboots werden unterschiedlich gehandhabt:
- On-Premises: Manuelle Reboots im Rahmen geplanter Wartungsfenster
- Public Cloud (Loopback): Automatisches Node-Lifecycle-Management durch Loopback
Node-Reboots On-Premises¶
Für On-Premises-Deployments werden Node-Reboots manuell während Wartungsfenstern durchgeführt:
# Node cordon (keine neuen Pods schedulen)
kubectl cordon <node-name>
# Pods evakuieren
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
# Node rebooten
ssh <node> sudo reboot
# Warten bis Node ready
kubectl wait --for=condition=ready node/<node-name> --timeout=300s
# Node uncordon
kubectl uncordon <node-name>
# Warten bis Pods neu gescheduled sind
kubectl get pods -A --field-selector spec.nodeName=<node-name>
Downtime vermeiden
Rebooten Sie Nodes nacheinander. Warten Sie, bis der vorherige Node wieder Ready ist, bevor Sie den nächsten rebooten.
Node-Reboots Public Cloud (Loopback)¶
In Public Cloud-Deployments mit Loopback wird das Node-Lifecycle-Management automatisch gehandhabt:
- Automatische Updates: Loopback führt OS-Updates und Reboots automatisch durch
- Koordinierte Reboots: Nodes werden nacheinander gebootet, um High Availability zu gewährleisten
- Kein manueller Eingriff: Platform-Administratoren müssen keine manuellen Reboots durchführen
Monitoring:
# Node-Status überwachen
kubectl get nodes -o wide
# Node-Events prüfen
kubectl get events --field-selector involvedObject.kind=Node
2. Platform Stack Upgrades¶
Häufigkeit: Quartalsweise oder bei kritischen Security-Fixes
Beschreibung: Updates der ayedo-Komponenten (Grafana, VictoriaMetrics, Harbor, etc.)
Pre-Upgrade Checklist¶
- Benutzer benachrichtigen (z.B. via Slack, E-Mail)
- Changelog prüfen: Neue Features, Breaking Changes, Migration-Guides
- Staging-Upgrade durchführen (falls Staging-Environment vorhanden)
- Backup erstellen:
- System-Status prüfen:
- Alerting pausieren (Grafana Alerting Silences):
Upgrade-Prozedur¶
ayedo-Upgrade-Tooling
ayedo nutzt Polycrate für deklarative Infrastruktur-Deployments. Die ayedo SDP ist modular aufgebaut - jeder Block (Komponente) hat seine eigene Version. Upgrades erfolgen durch Aktualisierung der Block-Versionen in der workspace.poly und Anwendung via polycrate workflows run upgrade.
Schritt-für-Schritt:
- Block-Versionen aktualisieren
Bearbeiten Sie die workspace.poly und aktualisieren Sie die gewünschten Block-Versionen:
# workspace.poly
blocks:
# Beispiel: Grafana upgraden von 11.3.0 auf 11.4.0
- name: grafana
from: cargo.ayedo.cloud/ayedo/k8s/grafana:11.4.0 # <- Version aktualisiert
kubeconfig:
from: my-cluster
# Beispiel: VictoriaMetrics upgraden
- name: victoria-metrics
from: cargo.ayedo.cloud/ayedo/k8s/victoriametrics:1.106.0 # <- Version aktualisiert
kubeconfig:
from: my-cluster
# Source Control & CI/CD
- name: gitlab
from: cargo.ayedo.cloud/ayedo/k8s/gitlab:17.7.0 # <- Version aktualisiert
kubeconfig:
from: my-cluster
# Application Delivery
- name: argocd
from: cargo.ayedo.cloud/ayedo/k8s/argocd:2.13.0 # <- Version aktualisiert
kubeconfig:
from: my-cluster
# Secrets Management
- name: vault
from: cargo.ayedo.cloud/ayedo/k8s/vault:1.18.0 # <- Version aktualisiert
kubeconfig:
from: my-cluster
# Andere Blöcke bleiben auf aktueller Version
- name: harbor
from: cargo.ayedo.cloud/ayedo/k8s/harbor:2.11.0 # <- Keine Änderung
kubeconfig:
from: my-cluster
!!! tip "Modulare Upgrades" Sie müssen nicht alle Komponenten gleichzeitig upgraden. Die SDP ist so konzipiert, dass Komponenten in unterschiedlichen Versionen miteinander funktionieren können. Dies ermöglicht schrittweise, kontrollierte Upgrade-Pfade.
!!! warning "Kritische Komponenten" Bei Upgrades von GitLab, ArgoCD und Vault sollten Sie besonders vorsichtig sein, da diese Komponenten zentral für die Entwickler-Workflows sind. Führen Sie Upgrades dieser Komponenten vorzugsweise außerhalb der Geschäftszeiten durch.
-
Block-Versionen pullen
-
Migration-Guides prüfen
Prüfen Sie die Block-spezifischen Changelogs und Breaking Changes:
# Beispiel: Grafana Changelog prüfen
cat ~/.polycrate/blocks/cargo.ayedo.cloud/ayedo/k8s/grafana/11.4.0/CHANGELOG.md
-
Upgrade durchführen
-
Upgrade-Validierung
# Alle Pods healthy? kubectl get pods -A | grep -vE "Running|Completed" # Neue Versionen deployed? kubectl get deployments -A -o custom-columns=NAME:.metadata.name,IMAGE:.spec.template.spec.containers[0].image # Services erreichbar? curl -I https://grafana.example.com curl -I https://harbor.example.com curl -I https://gitlab.example.com curl -I https://argocd.example.com curl -I https://vault.example.com # GitLab-Spezifische Validierung kubectl exec -n gitlab gitlab-toolbox-<pod> -- gitlab-rake gitlab:check SANITIZE=true # ArgoCD-Spezifische Validierung kubectl get applications -n argocd argocd app list # Vault-Spezifische Validierung kubectl exec -n vault vault-0 -- vault status
Post-Upgrade Checklist¶
- System-Status prüfen:
- Logins testen:
- Grafana: https://grafana.example.com
- Harbor: https://harbor.example.com
- Monitoring prüfen:
- Metriken werden gesammelt
- Logs werden aggregiert
- Alerts funktionieren
- Alerting reaktivieren (Silences löschen)
- Benutzer benachrichtigen (Upgrade abgeschlossen)
- Incident dokumentieren (falls Issues auftraten)
3. Kubernetes-Upgrades¶
Häufigkeit: Halbjährlich oder bei kritischen Kubernetes-CVEs
Beschreibung: Kubernetes Control-Plane und Worker-Nodes upgraden
Kubernetes-Upgrade-Strategie¶
Versionierungs-Policy
- Minor Upgrades: Nur ein Minor-Version-Sprung (z.B. 1.28 → 1.29)
- Patch Upgrades: Können mehrere Versionen springen (z.B. 1.28.5 → 1.28.9)
- Deprecated APIs: Anwendungsentwickler 4 Wochen vorher benachrichtigen
Kubernetes-Support-Window:
Kubernetes unterstützt die letzten 3 Minor-Versionen:
| Version | Release | End-of-Life |
|---|---|---|
| 1.29 | Dez 2023 | Feb 2025 |
| 1.28 | Aug 2023 | Okt 2024 |
| 1.27 | Apr 2023 | Jun 2024 |
Pre-Upgrade Checklist¶
- Deprecated APIs identifizieren:
- Anwendungsentwickler benachrichtigen (4 Wochen Vorlauf)
- Staging-Cluster upgraden (falls vorhanden)
- Backup erstellen:
Upgrade-Prozedur¶
Methode 1: Managed Kubernetes (EKS, AKS, GKE)
# AWS EKS
aws eks update-cluster-version --name ayedo-cluster --kubernetes-version 1.29
# Azure AKS
az aks upgrade --resource-group ayedo-rg --name ayedo-cluster --kubernetes-version 1.29.0
# Google GKE
gcloud container clusters upgrade ayedo-cluster --cluster-version=1.29
Methode 2: Self-Managed (kubeadm, Polycrate)
# Control-Plane upgraden
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.29.0
# Kubelet/kubectl upgraden
sudo apt-mark unhold kubelet kubectl
sudo apt-get update && sudo apt-get install -y kubelet=1.29.0-* kubectl=1.29.0-*
sudo apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# Worker-Nodes upgraden (einer nach dem anderen)
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
# ... upgrade kubelet auf Node ...
kubectl uncordon <node>
Post-Upgrade Validierung¶
# Kubernetes-Version prüfen
kubectl version
# Nodes ready?
kubectl get nodes -o wide
# Control-Plane healthy?
kubectl get componentstatuses
# Deprecated APIs noch in Nutzung?
kubectl get all -A -o json | jq -r '.items[] | select(.apiVersion | contains("v1beta")) | "\(.kind)/\(.metadata.name) in \(.metadata.namespace) uses \(.apiVersion)"'
Rollback-Strategie¶
Rollbacks vermeiden
ayedo empfiehlt keine Rollbacks für Upgrades. Stattdessen:
- Staged Rollouts: Staging → Production
- Rollforward: Bei Issues in Production den Fix deployen, nicht zurückrollen
- Snapshots nutzen: Nur als letztes Mittel
Warum keine Rollbacks?
- Stateful Applications (Datenbanken) können inkonsistent werden
- Schema-Migrationen sind oft nicht rückgängig machbar
- Risiko von Datenverlust und Korruption
Maintenance Windows¶
Empfohlene Wartungsfenster¶
| Wartungstyp | Häufigkeit | Dauer | Downtime |
|---|---|---|---|
| OS-Patching | Wöchentlich | 1-2h | Keine (rolling) |
| Platform-Upgrade | Quartalsweise | 2-4h | < 5 Min |
| K8s-Upgrade | Halbjährlich | 4-8h | < 15 Min |
Kommunikation¶
4 Wochen vorher: - Ankündigung per E-Mail/Slack - Deprecated APIs kommunizieren - Breaking Changes erläutern
1 Woche vorher: - Erinnerung per E-Mail/Slack - Maintenance-Window bestätigen
24 Stunden vorher: - Letzte Erinnerung - Status-Page aktualisieren
Während Wartung: - Live-Updates via Slack - Status-Page: "Maintenance in Progress"
Nach Wartung: - Abschluss-Benachrichtigung - Issue-Report (falls notwendig)
Automatisierung¶
Empfohlene Tools¶
| Tool | Zweck | Einsatz |
|---|---|---|
| Loopback | Automatisches Node-Lifecycle-Management (Public Cloud) | OS-Patching, Node-Reboots |
| Polycrate | Deklarative Infra-Deployments | Platform-Upgrades, SDP-Deployments |
| Velero | Backup/Restore | Disaster Recovery |
SDP Deployment
Die ayedo SDP wird vollständig über Polycrate deployt und verwaltet. Alle Platform-Komponenten (Grafana, VictoriaMetrics, Harbor, Keycloak, etc.) werden als Polycrate-Blöcke definiert und über polycrate workflows deployed und upgraded.
Monitoring und Alerting¶
Pre-Upgrade Checks¶
# Prometheus-Alerts prüfen
kubectl get prometheusrules -A
# Alert-Status abrufen
curl https://alertmanager.example.com/api/v2/alerts
# Grafana-Dashboards überprüfen
curl -H "Authorization: Bearer $GRAFANA_TOKEN" \
https://grafana.example.com/api/health
Post-Upgrade Monitoring¶
Key-Metriken überwachen:
- Pod Restart Rate: Keine abnormalen Restarts
- API-Server Latency: < 100ms
- etcd Latency: < 10ms
- Node CPU/Memory: Keine Spikes
- Persistent Volume Claims: Alle
Bound
Troubleshooting¶
Problem: Upgrade schlägt fehl¶
Symptom: Pods crashen nach Upgrade.
Lösung:
-
Rollback zum letzten Backup:
-
Logs analysieren:
-
Events prüfen:
Problem: Node bleibt nach Reboot NotReady¶
Symptom: Node kommt nach Reboot nicht zurück.
Lösung:
-
SSH auf Node und Logs prüfen:
-
Kubelet neu starten:
-
Node-Status prüfen:
Problem: Deprecated APIs nach Kubernetes-Upgrade¶
Symptom: Workloads funktionieren nicht mehr.
Lösung:
-
Deprecated APIs finden:
-
Manifests aktualisieren (z.B.
networking.k8s.io/v1beta1→networking.k8s.io/v1) -
Polycrate-Blöcke aktualisieren und neu deployen:
Weiterführende Dokumentation¶
- Kapazitätsplanung - Cluster-Dimensionierung
- Backup & Recovery - Disaster Recovery
- Troubleshooting - Fehlerbehebung
- Runbooks - Operationale Prozeduren
- User Alerts - Alert-Management
Support¶
Bei Fragen zu Maintenance und Upgrades:
- E-Mail: support@ayedo.de
- Website: ayedo.de
- Discord: ayedo Discord