Kubernetes
Eine Open-Source-Plattform zur Automatisierung von Deployment, Skalierung und Verwaltung von Container-Anwendungen – der Standard für Container-Orchestrierung.
Die automatische Anpassung von Compute-Ressourcen basierend auf Last – mehr Server bei hoher Nachfrage, weniger bei niedriger. Kosteneffizient und performant.
Autoscaling passt die Anzahl deiner Server automatisch an die aktuelle Last an. Mehr Nutzer = mehr Server. Weniger Nutzer = weniger Server (und Kosten).
Ohne Autoscaling:
Feste Kapazität: 10 Server
Nachts (10 Nutzer): 10 Server → 9 Server idle, Geldverschwendung
Peak (10.000 Nutzer): 10 Server → Überlastet, langsam, Fehler
Mit Autoscaling:
Nachts (10 Nutzer): 2 Server → Kosteneffizient
Normal (1.000 Nutzer): 5 Server → Optimal
Peak (10.000 Nutzer): 20 Server → Performance garantiert
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: queue-worker
spec:
scaleTargetRef:
name: worker-deployment
minReplicaCount: 0 # Scale to Zero!
maxReplicaCount: 50
triggers:
- type: rabbitmq
metadata:
queueName: tasks
queueLength: "10" # 1 Worker pro 10 Messages
# Terraform
resource "aws_autoscaling_group" "api" {
name = "api-asg"
min_size = 2
max_size = 20
desired_capacity = 5
launch_template {
id = aws_launch_template.api.id
version = "$Latest"
}
}
resource "aws_autoscaling_policy" "scale_up" {
name = "scale-up"
autoscaling_group_name = aws_autoscaling_group.api.name
policy_type = "TargetTrackingScaling"
target_tracking_configuration {
predefined_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}
target_value = 70.0
}
}
| Strategie | Trigger | Use Case |
|---|---|---|
| CPU-basiert | CPU über 70% | Compute-intensive Workloads |
| Memory-basiert | Memory über 80% | Memory-intensive Apps |
| Request-basiert | Requests/Sekunde | Web-APIs |
| Queue-basiert | Queue-Länge | Async Workers |
| Schedule-basiert | Uhrzeit | Vorhersehbare Patterns |
| Custom Metrics | Business-Metriken | Spezifische Anforderungen |
# Kubernetes HPA Behavior
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 5 Min warten
policies:
- type: Percent
value: 10
periodSeconds: 60 # Max 10% pro Minute runter
scaleUp:
stabilizationWindowSeconds: 0 # Sofort hoch
policies:
- type: Percent
value: 100
periodSeconds: 15 # Schnell hochskalieren
Strategie: Spot/Preemptible Instances für Autoscaling
On-Demand: $0.10/Stunde
Spot: $0.03/Stunde (70% günstiger)
Mix:
- Basis-Last: On-Demand (stabil)
- Peaks: Spot Instances (günstig, unterbrechbar) Autoscaling ist wie ein Supermarkt, der automatisch mehr Kassen öffnet wenn die Schlangen lang werden, und sie wieder schließt wenn es ruhiger wird – immer genau so viele wie nötig.
Skaliert automatisch basierend auf Metriken (CPU, Requests, Queue)
Horizontal (mehr Instanzen) oder Vertikal (größere Instanzen)
Spart Kosten bei niedriger Last, garantiert Performance bei hoher
Web-Traffic
Mehr Server bei Traffic-Spitzen (Black Friday, Kampagnen)
ML-Inference
GPU-Instanzen nach Bedarf hoch- und runterfahren
Batch-Processing
Worker für Queue-Verarbeitung skalieren
Kostenoptimierung
Nachts und am Wochenende runterskalieren
Horizontal (mehr Instanzen) ist meist besser: Keine Downtime, unbegrenzt skalierbar. Vertikal (größere Instanz) hat Limits und braucht oft Restart.
Abhängig von Setup. Kubernetes HPA: 15-30 Sekunden. EC2: 1-3 Minuten. Serverless (Lambda): Millisekunden. Für Spikes: Vorhalten von Mindest-Kapazität.
Bei keiner Last auf 0 Instanzen runterskalieren. Spart Kosten, aber Cold Start bei erstem Request. Serverless macht das automatisch.