- Authors

- Name
- Phillip Pham
- @ddppham
TL;DR
- Resource Requests und Limits richtig setzen spart 40-60% der Node-Kosten -- die meisten Pods reservieren 10x mehr als sie brauchen
- Cluster Autoscaler + Dev/Test nachts abschalten reduziert Kosten um 30-60% durch dynamische Skalierung
- Spot/Preemptible Instances fuer Batch-Jobs und Dev/Test sparen 60-70% gegenueber On-Demand Preisen
- VPA (Vertical Pod Autoscaler) empfiehlt optimale Resource-Werte basierend auf tatsaechlichem Verbrauch
- FinOps-Dashboard mit Kubecost oder OpenCost schafft Kostentransparenz pro Namespace, Team und Label
Kubernetes Kosten senken: 10 Praxis-Tipps
Ihre Kubernetes-Rechnung wächst monatlich? Sie sind nicht allein. Die gute Nachricht: Mit diesen 10 Praxis-Tipps senken Sie Ihre Kosten um 30-50% - heute noch umsetzbar.
Warum Kubernetes-Kosten explodieren
Typische Kostentreiber:
├── Überdimensionierte Ressourcen (70% ungenutzt!)
├── Keine Auto-Scaling-Strategie
├── 24/7 Dev/Test-Umgebungen
├── Fehlende Namespace-Quotas
└── "Wir brauchen das vielleicht mal"
Tipp 1: Resource Requests & Limits richtig setzen
Das Problem
# 90% aller Deployments sehen so aus:
resources:
requests:
cpu: "1000m" # 1 CPU - aber nutzt nur 50m
memory: "1Gi" # 1 GB - aber nutzt nur 128Mi
Verschwendung: 95% der reservierten Ressourcen ungenutzt.
Die Lösung
# Tatsächlichen Verbrauch messen
kubectl top pods -A --sort-by=cpu
kubectl top pods -A --sort-by=memory
# Oder mit Prometheus (letzte 7 Tage P95):
# container_cpu_usage_seconds_total
# container_memory_usage_bytes
# Realistische Werte setzen:
resources:
requests:
cpu: "50m" # P50 des tatsächlichen Verbrauchs
memory: "128Mi"
limits:
cpu: "200m" # P99 + 20% Buffer
memory: "256Mi"
Ersparnis: 40-60% der Node-Kosten
Tipp 2: Cluster Autoscaler aktivieren
Ohne Autoscaler
Montag 09:00: 10 Nodes (100% Auslastung)
Montag 22:00: 10 Nodes (20% Auslastung) ← Verschwendung!
Wochenende: 10 Nodes (5% Auslastung) ← Noch mehr Verschwendung!
Mit Autoscaler
# cluster-autoscaler Konfiguration
apiVersion: autoscaling.openshift.io/v1
kind: ClusterAutoscaler
spec:
scaleDown:
enabled: true
delayAfterAdd: 10m
delayAfterDelete: 1m
unneededTime: 5m
resourceLimits:
minNodes: 2
maxNodes: 20
Ersparnis: 30-50% durch dynamische Skalierung
Tipp 3: Dev/Test-Umgebungen nachts abschalten
Das Problem
Dev/Test laufen 24/7, aber Entwickler arbeiten nur 8h/Tag.
Die Lösung: Kubernetes CronJob
# scale-down.yaml - Jeden Abend um 20:00
apiVersion: batch/v1
kind: CronJob
metadata:
name: scale-down-dev
spec:
schedule: "0 20 * * 1-5" # Mo-Fr 20:00
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl
image: bitnami/kubectl
command:
- /bin/sh
- -c
- |
kubectl scale deployment --all --replicas=0 -n development
restartPolicy: OnFailure
---
# scale-up.yaml - Jeden Morgen um 07:00
apiVersion: batch/v1
kind: CronJob
metadata:
name: scale-up-dev
spec:
schedule: "0 7 * * 1-5" # Mo-Fr 07:00
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl
image: bitnami/kubectl
command:
- /bin/sh
- -c
- |
kubectl scale deployment --all --replicas=1 -n development
restartPolicy: OnFailure
Ersparnis: 60%+ für Dev/Test (nur 8h statt 24h)
Tipp 4: Spot/Preemptible Instances nutzen
Preisvergleich (AWS, ähnlich bei Azure/GCP)
| Instance | On-Demand | Spot | Ersparnis |
|---|---|---|---|
| m5.large | $0.096/h | $0.029/h | 70% |
| m5.xlarge | $0.192/h | $0.058/h | 70% |
| c5.2xlarge | $0.340/h | $0.102/h | 70% |
Implementierung
# Node Pool für Spot Instances
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster
nodeGroups:
- name: spot-workers
instanceTypes: ["m5.large", "m5.xlarge", "m5a.large"]
spot: true
minSize: 0
maxSize: 10
labels:
lifecycle: spot
taints:
- key: "spot"
value: "true"
effect: "PreferNoSchedule"
# Workloads für Spot markieren
spec:
tolerations:
- key: "spot"
operator: "Equal"
value: "true"
effect: "PreferNoSchedule"
nodeSelector:
lifecycle: spot
Geeignet für: Batch-Jobs, Dev/Test, stateless Workloads Nicht geeignet für: Datenbanken, kritische Production
Ersparnis: 60-70% für geeignete Workloads
Tipp 5: Pod Disruption Budgets für Spot
Spot-Instances können jederzeit terminiert werden. PDBs schützen:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
spec:
minAvailable: 2 # Mindestens 2 Pods müssen laufen
selector:
matchLabels:
app: my-app
Tipp 6: Resource Quotas pro Namespace
Das Problem
Ohne Quotas kann ein Team die ganze Cluster-Kapazität verbrauchen.
Die Lösung
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-a-quota
namespace: team-a
spec:
hard:
requests.cpu: "10" # Max 10 CPU requests
requests.memory: "20Gi" # Max 20 GB Memory requests
limits.cpu: "20"
limits.memory: "40Gi"
pods: "50" # Max 50 Pods
# LimitRange für Defaults
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: team-a
spec:
limits:
- default:
cpu: "200m"
memory: "256Mi"
defaultRequest:
cpu: "100m"
memory: "128Mi"
type: Container
Effekt: Teams müssen über Ressourcen nachdenken, bevor sie deployen.
Tipp 7: Unused Resources aufräumen
Finde verschwendete Ressourcen
# Pods ohne Traffic (laufen aber keiner nutzt sie)
kubectl get pods -A --no-headers | wc -l
# PVCs ohne Pod-Bindung
kubectl get pvc -A | grep -v Bound
# ConfigMaps ohne Referenz
kubectl get configmaps -A --no-headers | wc -l
# Alte Deployments mit 0 Replicas
kubectl get deploy -A | awk '$3 == 0'
Automatisiert mit kubectl-janitor
# Lösche Pods älter als 7 Tage in dev
kubectl delete pods -n development --field-selector=status.phase=Succeeded
# Lösche alte ReplicaSets
kubectl delete rs -A --field-selector=status.replicas=0
Ersparnis: 10-20% durch Aufräumen
Tipp 8: Rightsizing mit VPA
Vertical Pod Autoscaler empfiehlt optimale Ressourcen:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Off" # Nur Empfehlungen, keine Auto-Updates
resourcePolicy:
containerPolicies:
- containerName: '*'
minAllowed:
cpu: 50m
memory: 64Mi
maxAllowed:
cpu: 2
memory: 4Gi
# Empfehlungen abrufen
kubectl describe vpa my-app-vpa
# Output:
# Recommendation:
# Container Recommendations:
# Container Name: my-app
# Lower Bound: Cpu: 25m, Memory: 64Mi
# Target: Cpu: 50m, Memory: 128Mi ← Das sollten Sie setzen
# Upper Bound: Cpu: 100m, Memory: 256Mi
Tipp 9: Multi-Tenancy statt Multi-Cluster
Teuer: Ein Cluster pro Team
Team A Cluster: 3 Nodes (Control Plane + Overhead)
Team B Cluster: 3 Nodes (Control Plane + Overhead)
Team C Cluster: 3 Nodes (Control Plane + Overhead)
─────────────────────────────────────────────────
GESAMT: 9 Nodes + 3x Control Plane Kosten
Günstig: Ein Cluster, Namespaces pro Team
Shared Cluster:
├── Namespace: team-a (ResourceQuota)
├── Namespace: team-b (ResourceQuota)
├── Namespace: team-c (ResourceQuota)
└── Shared Control Plane
─────────────────────────────────────────────────
GESAMT: 4-6 Nodes + 1x Control Plane
Ersparnis: 50%+ durch Shared Infrastructure
Tipp 10: FinOps-Dashboard aufsetzen
Ohne Sichtbarkeit keine Optimierung.
Kubecost (Open Source)
helm install kubecost kubecost/cost-analyzer \
--namespace kubecost \
--create-namespace
Features:
- Kosten pro Namespace/Label/Team
- Idle Resources Detection
- Rightsizing Recommendations
- Budget Alerts
Alternative: OpenCost (CNCF)
helm install opencost opencost/opencost \
--namespace opencost \
--create-namespace
Zusammenfassung: Quick Wins
| Maßnahme | Aufwand | Ersparnis | Prio |
|---|---|---|---|
| Resource Limits setzen | 1 Tag | 40-60% | Hoch |
| Cluster Autoscaler | 2h | 30-50% | Hoch |
| Dev/Test nachts aus | 2h | 60% (Dev) | Hoch |
| Spot Instances | 1 Tag | 60-70% | Mittel |
| Resource Quotas | 2h | - | Mittel |
| Unused Resources | 1h | 10-20% | Niedrig |
| VPA einrichten | 4h | 20-30% | Mittel |
| Multi-Tenancy | Projekt | 50%+ | Groß |
| FinOps Dashboard | 2h | Sichtbarkeit | Hoch |
Nächste Schritte
- Heute:
kubectl top pods -Aausführen - wo sind die größten Verschwender? - Diese Woche: Resource Requests/Limits für Top-10-Deployments anpassen
- Dieser Monat: Cluster Autoscaler + Dev/Test-Scheduling einrichten
Weiterführende Artikel:
- Kubernetes-Kostenoptimierung: 60% Cloud-Kosten sparen
- Kubernetes Kosten: Intern vs. Extern im Vergleich
- Kubernetes Autoscaling für deutsche Unternehmen
- Kubernetes Managed Service vs. Inhouse: Der ehrliche Kostenvergleich
- Kubernetes Monitoring und Observability
Sie wollen die Optimierung nicht selbst machen? Als Managed Service Partner optimieren wir Ihre Kubernetes-Kosten kontinuierlich - inklusive monatlichem FinOps-Report.
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 Cloud-Kosten senken: FinOps und Right-Sizing
Kubernetes Cloud-Kosten um 45% senken: Right-Sizing, Spot Instances, Autoscaling und FinOps-Prozesse mit Kubecost für nachhaltige Einsparungen.
Kubernetes-Kostenoptimierung: 60% Cloud-Kosten sparen
So reduzieren Sie Ihre Kubernetes-Kosten um bis zu 60% mit Resource Quotas, HPA, VPA und einem strukturierten 90-Tage-Plan für deutsche Unternehmen.
Kubernetes FinOps: Cloud-Kosten systematisch senken
Kubernetes-Kosten mit FinOps-Methoden senken: OpenCost für Transparenz, Requests/Limits optimieren und Cluster Autoscaler richtig tunen.
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 Monitoring-Kosten um 60% senken
Kubernetes-Monitoring-Kosten mit Prometheus statt Datadog um 60% senken durch Retention-Optimierung, Downsampling und Alert-Fatigue-Reduktion.