- Authors

- Name
- Phillip Pham
- @ddppham
TL;DR
Kubernetes Rightsizing bedeutet, CPU- und Memory-Requests so zu setzen, dass Pods weder zu viel noch zu wenig Ressourcen bekommen. Mit kubectl top findest du aktuelle Verbrauchswerte, der Vertical Pod Autoscaler (VPA) gibt automatische Empfehlungen, und Goldilocks visualisiert das Ganze pro Namespace.
Kubernetes Rightsizing: Ressourcen richtig dimensionieren
Die meisten Kubernetes-Cluster sind über-provisioniert. Entwickler setzen Requests auf "sicherheitshalber 2 CPU und 4 Gi Memory" — und der Cluster braucht doppelt so viele Nodes wie nötig. Rightsizing löst genau dieses Problem.
Prüfe zuerst, wie viel deine Pods tatsächlich nutzen:
# Ressourcenverbrauch aller Pods im Namespace
kubectl top pods -n production
# Node-Auslastung anzeigen
kubectl top nodes
Requests vs. Limits: Die Grundlagen
Requests und Limits steuern, wie der Scheduler Pods platziert und wie viel ein Container maximal nutzen darf.
resources:
requests:
cpu: 100m # Garantierte CPU
memory: 128Mi # Garantierter Speicher
limits:
cpu: 500m # Maximum CPU
memory: 512Mi # Maximum Speicher (OOMKill bei Überschreitung)
| Einstellung | Funktion | Was passiert bei Fehlen |
|---|---|---|
| Request | Scheduling-Garantie, Node-Auswahl | Pod landet auf beliebigem Node |
| Limit | Harte Obergrenze | Container nutzt unbegrenzt Ressourcen |
| Request = Limit | Guaranteed QoS-Klasse | Höchste Priorität bei Eviction |
Best Practice: Requests immer setzen, CPU-Limits weglassen (CPU-Throttling schadet mehr als es hilft), Memory-Limits setzen (OOM ist besser als Node-Crash).
Über-Provisionierung erkennen
Der schnellste Weg: Requests mit dem tatsächlichen Verbrauch vergleichen.
# Requests und tatsächliche Nutzung pro Pod vergleichen
kubectl top pods -n production --containers | sort -k3 -rn
# Alle Pods mit ihren Requests auflisten
kubectl get pods -n production -o custom-columns=\
NAME:.metadata.name,\
CPU_REQ:.spec.containers[0].resources.requests.cpu,\
MEM_REQ:.spec.containers[0].resources.requests.memory,\
CPU_LIM:.spec.containers[0].resources.limits.cpu,\
MEM_LIM:.spec.containers[0].resources.limits.memory
Ein typisches Bild: Der Pod requested 2 CPU, nutzt aber nur 50m. Das sind 97,5% verschwendete Kapazität, die kein anderer Pod nutzen kann.
VPA: Automatische Empfehlungen
Der Vertical Pod Autoscaler analysiert den historischen Ressourcenverbrauch und gibt Empfehlungen. Im Recommendation-Mode ändert er nichts — er schlägt nur vor.
# VPA installieren
git clone https://github.com/kubernetes/autoscaler.git
cd autoscaler/vertical-pod-autoscaler
./hack/vpa-up.sh
VPA-Objekt für ein Deployment erstellen:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: app-vpa
namespace: production
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
updatePolicy:
updateMode: "Off" # Nur Empfehlungen, keine automatischen Änderungen
resourcePolicy:
containerPolicies:
- containerName: '*'
minAllowed:
cpu: 50m
memory: 64Mi
maxAllowed:
cpu: 2
memory: 4Gi
Nach ein paar Stunden Datensammlung:
# VPA-Empfehlungen abrufen
kubectl get vpa app-vpa -n production -o jsonpath='{.status.recommendation}' | jq .
Die Ausgabe zeigt drei Werte: lowerBound (Minimum), target (Empfehlung) und upperBound (Spitzenlast). Nutze target als neuen Request-Wert.
Goldilocks: Dashboard für alle Namespaces
Goldilocks von Fairwinds erstellt automatisch VPA-Objekte für jeden Namespace und zeigt die Empfehlungen in einem Web-Dashboard.
# Goldilocks per Helm installieren
helm repo add fairwinds-stable https://charts.fairwinds.com/stable
helm repo update
helm install goldilocks fairwinds-stable/goldilocks \
--namespace goldilocks \
--create-namespace \
--set dashboard.enabled=true
# Namespace für Goldilocks aktivieren
kubectl label namespace production goldilocks.fairwinds.com/enabled=true
Dashboard aufrufen:
kubectl port-forward svc/goldilocks-dashboard -n goldilocks 8080:80
# Browser: http://localhost:8080
Das Dashboard zeigt pro Deployment die aktuellen Requests/Limits neben den VPA-Empfehlungen — mit konkreten YAML-Snippets zum Kopieren.
Vorher/Nachher: Was Rightsizing bringt
Ein reales Beispiel mit 12 Microservices in einem Production-Namespace:
| Metrik | Vorher | Nachher | Einsparung |
|---|---|---|---|
| CPU Requests gesamt | 24 Cores | 6,8 Cores | 71% |
| Memory Requests gesamt | 48 Gi | 14 Gi | 70% |
| Benötigte Nodes (m5.xlarge) | 8 | 3 | 62% |
| Monatliche Kosten (AWS) | ~1.200 € | ~450 € | 750 €/Monat |
Der Schlüssel: Die meisten Services hatten 2 CPU requested, nutzten aber durchschnittlich 80-150m.
Rightsizing-Workflow
So gehst du systematisch vor:
- Metrics-Server prüfen:
kubectl topmuss funktionieren - VPA im Off-Mode für alle kritischen Deployments aktivieren
- Mindestens 7 Tage Daten sammeln (Werktag- und Wochenend-Muster)
- Target-Werte als neue Requests setzen, mit 20% Puffer nach oben
- Memory-Limits auf 1,5x des Requests setzen
- Monitoring nach Änderung: OOMKills und CPU-Throttling beobachten
# OOMKills der letzten Stunde finden
kubectl get events -A --field-selector reason=OOMKilling --sort-by='.lastTimestamp'
# Pods mit Restart-Count > 0 (mögliche OOMKills)
kubectl get pods -A | awk '$5 > 0'
FAQ
Soll ich VPA im Auto-Mode nutzen?
Für Stateless-Workloads ja — VPA startet Pods mit neuen Werten neu. Für Stateful-Workloads oder bei wenigen Replicas nutze den Off-Mode und ändere Requests manuell.
Wie oft sollte ich Rightsizing durchführen?
Mindestens quartalsweise. Nach größeren Releases oder Traffic-Änderungen sofort. Goldilocks als Dauer-Monitoring laufen zu lassen kostet wenig und zeigt Abweichungen früh.
Was ist besser: VPA oder HPA?
Beide lösen unterschiedliche Probleme. VPA passt Ressourcen pro Pod an, HPA skaliert die Anzahl der Pods. Kombiniere beides: VPA für korrekte Requests, HPA für Last-Skalierung. Achtung: VPA und HPA auf derselben Metrik (CPU) kollidieren.
Kann Rightsizing die Stabilität gefährden?
Ja, bei zu aggressiver Reduktion. Deshalb immer 20% Puffer auf den VPA-Target-Wert und Memory-Limits über dem Request setzen. Starte mit nicht-kritischen Namespaces.
Kubernetes-Expertise gesucht?
Managed Services, Beratung, Training oder Security – wir unterstützen deutsche Unternehmen bei allen Kubernetes-Themen.
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
Kubernetes FinOps: Cloud-Kosten systematisch senken
Kubernetes-Kosten mit FinOps-Methoden senken: OpenCost für Transparenz, Requests/Limits optimieren und Cluster Autoscaler richtig tunen.
Capacity Planning: Kubernetes-Autoscaling richtig nutzen
HPA, VPA, Cluster Autoscaler und KEDA kombinieren für Capacity Planning in Kubernetes. Mit Praxisbeispielen und Entscheidungshilfe.
Spot Instances für Kubernetes: Kosten um 70% senken
Spot und Preemptible Instances in Kubernetes nutzen: Node Pools konfigurieren, Taints setzen und Workloads absichern mit PodDisruptionBudgets.
Kubernetes Kosten pro Namespace mit OpenCost berechnen
Kubernetes-Kosten pro Namespace berechnen mit OpenCost: Installation, Konfiguration, Grafana-Dashboards und Cost-Allocation-Reports. Praxis-Guide für FinOps-Teams.
Kubernetes E-Books kostenlos: Die besten PDFs und Guides
Kostenlose Kubernetes E-Books und PDFs von CNCF, O'Reilly und Cloud-Anbietern. Die besten Ressourcen für DevOps und Platform Engineering im Überblick.