- Authors

- Name
- Phillip Pham
- @ddppham
Warum Kubernetes-Projekte scheitern: 7 Ursachen und wie man sie vermeidet
TL;DR
- Die meisten gescheiterten Kubernetes-Projekte scheitern nicht an der Technologie, sondern an fehlendem Betriebskonzept, unrealistischen Erwartungen und mangelnder Team-Qualifikation
- Lift-and-Shift von VMs nach Kubernetes funktioniert fast nie -- Anwendungen muessen containerisiert und auf Statelessness getrimmt werden
- Starten Sie mit einem einzigen nicht-kritischen Workload, nicht mit einer Komplettmigration
- Monitoring, Logging und Alerting muessen VOR dem ersten produktiven Workload stehen, nicht danach
- Definieren Sie messbare Erfolgskriterien (Deployment-Frequenz, MTTR, Infrastrukturkosten) bevor Sie anfangen
Fehler 1: Kubernetes einfuehren ohne klares Ziel
Der haeufigste Fehler klingt banal, ist aber erstaunlich verbreitet: Teams fuehren Kubernetes ein, weil es "der Standard" ist, ohne konkret zu definieren, welches Problem sie damit loesen wollen.
Kubernetes ist kein Selbstzweck. Es loest spezifische Probleme: Automatisierte Skalierung, standardisierte Deployment-Pipelines, Multi-Cloud-Portabilitaet, effizientere Ressourcennutzung. Wenn keines davon Ihr Problem ist, brauchen Sie vielleicht kein Kubernetes.
Bevor Sie starten, beantworten Sie diese Fragen schriftlich:
- Welche konkreten Metriken sollen sich verbessern? (Deployment-Frequenz, Ausfallzeit, Infrastrukturkosten)
- Wie sieht "Erfolg" nach 6 Monaten aus?
- Was passiert, wenn wir bei der bestehenden Loesung bleiben?
Wenn Sie keine klaren Antworten haben, ist das Projekt noch nicht reif.
Fehler 2: Lift-and-Shift statt echte Containerisierung
Viele Teams nehmen ihre bestehenden Anwendungen, packen sie in ein Docker-Image und deployen sie auf Kubernetes. Das funktioniert technisch -- aber es bringt keinen der versprochenen Vorteile.
Eine VM-basierte Anwendung, die als Container laeuft, hat typischerweise folgende Probleme:
- Kein Health Check: Die Anwendung meldet sich nicht als healthy/unhealthy, also kann Kubernetes nicht sinnvoll neu starten oder Traffic umleiten
- Lokaler State: Daten werden auf dem lokalen Dateisystem gespeichert und gehen bei Pod-Restart verloren
- Hardcodierte Konfiguration: Hostnames, Ports und Credentials stehen in Config-Dateien statt in Environment Variables oder ConfigMaps
- Keine Graceful Shutdown-Logik: Die Anwendung bricht bei SIGTERM ab, statt laufende Requests sauber abzuschliessen
Das Minimum, das eine Anwendung fuer Kubernetes mitbringen muss:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-service
spec:
replicas: 3
selector:
matchLabels:
app: api-service
template:
metadata:
labels:
app: api-service
spec:
terminationGracePeriodSeconds: 30
containers:
- name: api
image: registry.internal/api-service:2.4.1
ports:
- containerPort: 8080
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: api-config
key: db-host
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: api-secrets
key: db-password
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 15
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "1000m"
Beachten Sie: Liveness- und Readiness-Probes, Environment-Variable aus ConfigMaps und Secrets, Resource Requests und Limits, explizite terminationGracePeriodSeconds. Ohne diese Grundlagen bringt Kubernetes Ihnen nichts.
Fehler 3: Monitoring als Nachgedanke
Kubernetes-Cluster ohne Monitoring sind Blindfluege. Trotzdem wird Monitoring in vielen Projekten erst eingeplant, wenn die ersten Produktionsprobleme auftreten.
Das Minimum vor dem ersten produktiven Workload:
| Komponente | Tool-Empfehlung | Zweck |
|---|---|---|
| Metriken | Prometheus + Grafana | CPU, Memory, Pod-Restarts, Request-Latenz |
| Logging | Loki + Promtail oder EFK-Stack | Anwendungs- und System-Logs zentral durchsuchbar |
| Alerting | Alertmanager | Benachrichtigung bei Pod-CrashLoops, Node-Ausfaellen, hoher Latenz |
| Tracing | Jaeger oder Tempo | Request-Verfolgung ueber Microservices hinweg |
Besonders wichtig: Definieren Sie Alerts fuer die Dinge, die Sie nachts wecken sollen, BEVOR sie passieren. Ein Alert fuer KubePodCrashLooping und KubeNodeNotReady ist das absolute Minimum.
Mehr zum Thema in unserem Artikel zu Kubernetes Observability Stack.
Fehler 4: Kein Ressourcenmanagement
Ohne Resource Requests und Limits wird Kubernetes zum Ressourcen-Chaos. Ein einzelner Pod ohne Limits kann einen ganzen Node leersaugen und andere Workloads zum OOMKill zwingen.
Die goldene Regel: Requests definieren das Scheduling, Limits das Maximum.
# Aktuelle Ressourcennutzung aller Pods anzeigen
kubectl top pods --all-namespaces --sort-by=memory
# Pods ohne Resource Limits finden
kubectl get pods --all-namespaces -o json | \
jq -r '.items[] |
select(.spec.containers[].resources.limits == null) |
[.metadata.namespace, .metadata.name] | @tsv'
# LimitRange als Sicherheitsnetz fuer einen Namespace setzen
kubectl apply -f - <<EOF
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: production
spec:
limits:
- default:
memory: "512Mi"
cpu: "500m"
defaultRequest:
memory: "128Mi"
cpu: "100m"
type: Container
EOF
Setzen Sie LimitRanges als Sicherheitsnetz in jedem Namespace. Wenn ein Entwickler vergisst, Limits anzugeben, greifen die Defaults. Das verhindert das Worst-Case-Szenario.
Vertiefende Informationen finden Sie unter Kubernetes Resource Management und OOM-Kills vermeiden.
Fehler 5: Security wird ignoriert bis zum ersten Audit
Kubernetes ist per Default relativ offen konfiguriert. Ohne bewusste Haertung laeuft jeder Container als Root, jeder Pod kann mit jedem anderen kommunizieren, und Secrets liegen Base64-kodiert (nicht verschluesselt) in etcd.
Die wichtigsten Massnahmen in der Reihenfolge ihrer Prioritaet:
- RBAC einschraenken: Kein
cluster-adminfuer Entwickler. Namespace-spezifische Rollen vergeben. - Network Policies: Default-Deny fuer jeden Namespace, dann explizit freigeben. Siehe Network Policies Advanced.
- Pod Security Standards: Restricted-Profil als Default erzwingen. Kein Root, keine Host-Namespaces, keine Privileged Containers.
- Image Scanning: Trivy, Grype oder Snyk in die CI/CD-Pipeline integrieren. Keine Images mit bekannten Critical CVEs deployen.
- Secrets Management: External Secrets Operator mit Vault oder einem Cloud-KMS verwenden. Siehe Secrets Management mit Vault.
Fehler 6: Kein Backup- und Recovery-Konzept
Kubernetes selbst ist deklarativ und reproduzierbar -- der Cluster-Zustand kann aus Git wiederhergestellt werden. Aber persistente Daten (Datenbanken, File-Storage) und Cluster-Konfiguration (CRDs, RBAC-Regeln, Namespaces) brauchen ein eigenes Backup-Konzept.
Velero ist das Standardtool fuer Kubernetes-Backups. Ein minimales Setup:
# Velero installieren (Beispiel mit AWS S3-Backend)
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.9.0 \
--bucket velero-backups \
--secret-file ./credentials-velero \
--backup-location-config region=eu-central-1
# Taegliches Backup des production-Namespace
velero schedule create daily-production \
--schedule="0 2 * * *" \
--include-namespaces production \
--ttl 720h
# Recovery testen (in einen separaten Namespace)
velero restore create test-restore \
--from-backup daily-production-20260210020000 \
--namespace-mappings production:production-restore-test
Wichtig: Testen Sie den Recovery-Prozess regelmaessig. Ein Backup, das Sie nie getestet haben, ist kein Backup.
Fehler 7: Zu viel auf einmal migrieren
Der groesste strategische Fehler: Alles gleichzeitig migrieren wollen. Fuenf Legacy-Anwendungen parallel containerisieren, ein neues CI/CD-System einfuehren, Kubernetes lernen und gleichzeitig das Tagesgeschaeft am Laufen halten.
Der bessere Ansatz:
Phase 1 (Woche 1-4): Einen einzelnen stateless Workload waehlen (z.B. ein internes Tool oder eine API ohne Datenbank-Abhaengigkeit). Containerisieren, deployen, Monitoring einrichten. Erfahrungen sammeln.
Phase 2 (Woche 5-8): CI/CD-Pipeline aufbauen. Den Workload automatisiert deployen. Rollback testen. Einen zweiten Workload hinzufuegen.
Phase 3 (Woche 9-12): Erste stateful Workloads evaluieren. Storage-Klassen und Backup-Konzept etablieren. RBAC und Network Policies verfeinern.
Phase 4 (ab Monat 4): Schrittweise weitere Workloads migrieren. Erst wenn die Grundlagen stabil laufen.
Checkliste: Ist Ihr Projekt auf Kurs?
Wenn Sie mindestens 3 dieser Punkte mit "Nein" beantworten, steckt Ihr Projekt in Schwierigkeiten:
| Frage | Ja/Nein |
|---|---|
| Gibt es schriftlich definierte Erfolgskriterien? | |
| Laeuft Monitoring + Alerting vor dem ersten produktiven Workload? | |
| Haben alle Deployments Liveness/Readiness-Probes? | |
| Haben alle Pods Resource Requests und Limits? | |
| Gibt es Network Policies (mindestens Default-Deny)? | |
| Existiert ein getestetes Backup- und Recovery-Konzept? | |
| Wurde das Team in Kubernetes-Grundlagen geschult? | |
| Gibt es einen dokumentierten Incident-Response-Prozess? |
Wann es sich lohnt, externes Know-how hinzuzuziehen
Externe Unterstuetzung ist kein Zeichen von Schwaeche. In diesen Situationen ist sie besonders sinnvoll:
- Architektur-Review vor dem Start: Ein erfahrener Blick auf die geplante Architektur spart Monate an Fehlversuchen. Siehe auch Kubernetes Architektur Review.
- Rescue-Engagement: Wenn ein bestehendes Projekt festgefahren ist, hilft eine objektive Analyse der Probleme.
- Team-Enablement: Workshops und Pair-Programming-Sessions, die praktisches Wissen vermitteln statt theoretische Folien.
- Security-Audit: Eine externe Pruefung der Cluster-Konfiguration, bevor produktive Workloads darauf laufen.
Weitergehende Themen
- Kubernetes Rollback-Strategien -- Wenn ein Deployment schiefgeht
- Capacity Planning -- Ressourcen richtig dimensionieren
- Hosting-Kosten im Vergleich -- Cloud vs. On-Premise Kalkulation
Fazit
Kubernetes-Projekte scheitern selten an der Technologie. Sie scheitern an unrealistischen Erwartungen, fehlendem Betriebskonzept und dem Versuch, zu viel auf einmal zu aendern. Fangen Sie klein an, messen Sie frueh und investieren Sie in die Grundlagen (Monitoring, Security, Backup), bevor Sie skalieren.
Wenn Ihr Kubernetes-Projekt nicht so laeuft wie geplant oder Sie einen Neustart planen, lassen Sie uns darueber sprechen unter /kontakt.
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
ConfigMaps richtig nutzen: Kubernetes Best Practices
ConfigMaps in Kubernetes erstellen, mounten und aktualisieren: Praktische Best Practices für Volumes, Env-Vars und Hot-Reload mit Reloader.
Legacy-Modernisierung: Von VMs zu Kubernetes
Legacy-Anwendungen von VMs zu Kubernetes migrieren: Die 6 Rs der Modernisierung, Containerisierung einer 3-Tier-App und Datenbank-Strategien.
Lift-and-Shift vs Refactoring: Migration im Vergleich
Lift-and-Shift oder Refactoring für Kubernetes? Entscheidungsmatrix, praktische Beispiele und das Strangler-Fig-Pattern als Mittelweg für Legacy-Migrationen.
Microservices Decomposition: Monolith aufteilen
Monolith in Microservices aufteilen mit Domain-Driven Design und Strangler Fig Pattern. Praktischer Kubernetes-Guide mit Deployments und Datenbank-Strategien.
Kubernetes-Migration: Enterprise-Strategie planen
Enterprise-Migrationsstrategie für Kubernetes: Von der Application-Portfolio-Analyse über Migration-Waves bis zur Team-Readiness und Risikominimierung.