Der Kubernetes Horizontal Pod Autoscaler (HPA) hat die Art und Weise, wie wir Workloads betreiben, grundlegend verändert: Er skaliert Deployment- bzw. StatefulSet-Pods automatisch hoch oder runter – auf Basis der durchschnittlichen CPU-Auslastung, der durchschnittlichen Speicherauslastung oder einer beliebigen Custom Metric Ihrer Wahl – und passt sie so an die tatsächliche Nachfrage an.
Bisherige Implementierung
Bei der Berechnung der Ressourcennutzung eines Pods wird der Gesamtwert aus der Summe aller Container im Pod gebildet. Für Workloads, deren Container nicht eng gekoppelt sind oder sich nicht im gleichen Tempo verändern, ist dieses Vorgehen jedoch oft unpassend.
Ein Sidecar-Container, der etwa Logs verarbeitet, verbraucht meist kaum Ressourcen, während der eigentliche Anwendungscontainer den Großteil der Last trägt. Der HPA würde dann nicht nach der Auslastung des kritischen Containers skalieren, weil der Pod-Durchschnitt das tatsächliche Bild verzerrt.

HPA-Skalierung auf Basis der durchschnittlichen Ressourcennutzung aller Pods in einem Deployment
Neue Implementierung
Mit Kubernetes v1.20 eingeführt und seit v1.30 als stable verfügbar, erlaubt das Feature Container Resource Metrics dem HPA, gezielt einzelne Container-Metriken innerhalb eines Pods auszuwerten. Sie können den HPA so konfigurieren, dass er auf Basis der Ressourcennutzung (CPU, Speicher etc.) eines bestimmten Containers im Pod skaliert.
So lassen sich Ressourcen effizienter zuteilen und unnötige Skalierungen vermeiden, die durch nicht-kritische Container und deren hohe Pod-Auslastung ausgelöst würden. Wer den Verbrauch genau des Containers im Blick behält, der die Kernfunktionalität bereitstellt, fokussiert auf den realen Workload. Das führt zu fundierteren Skalierungsentscheidungen und beugt Performance-Engpässen vor.

HPA-Skalierung auf Basis der durchschnittlichen Ressourcennutzung des Ziel-Containers über alle Pods eines Deployments hinweg
In diesem Beitrag zeige ich Ihnen, wie Sie mit Container Resource Metrics Ihre Deployments in einem Multi-Container-Pod-Setup skalieren.
Voraussetzungen
- Ein Kubernetes-Cluster in Version 1.27 oder höher.
- Metrics Server ist im Kubernetes-Cluster bereitgestellt.
- Kubectl ist auf Ihrer Workstation installiert.
Container Resource Metrics: Skalierung in der Praxis
- Rollen Sie ein Beispiel-Deployment mit mehreren Containern anhand des folgenden Manifests aus.
cpu-stressorist der Hauptcontainer und simuliert CPU-Last in Kubernetes-Pods. Weitere Details zumcpu-stressor-Tool finden Sie im GitHub-Repo. Derlog-generatordient als beispielhafter Sekundärcontainer im selben Pod.
cat <<EOF | kubectl apply -f -
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: crm-scaling-demo
labels:
app: crm-scaling-demo
spec:
selector:
matchLabels:
app: crm-scaling-demo
template:
metadata:
labels:
app: crm-scaling-demo
spec:
containers:
- name: cpu-stressor
image: narmidm/k8s-pod-cpu-stressor:1.0.0
args:
- "-cpu=0.5"
- "-duration=3600s"
resources:
limits:
cpu: "200m"
requests:
cpu: "100m"
- name: log-generator
image: busybox:1.28
args: [/bin/sh, -c,\
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
resources:
requests:
cpu: "100m"
EOF

Beispielhafter Pod und Ressourcennutzung aller enthaltenen Container
- Erstellen Sie eine
HorizontalPodAutoscaler-Ressource, die anhand der CPU-Auslastung descpu-stressor-Containers skaliert – statt auf Basis der Pod-Metriken.
cat <<EOF | kubectl apply -f -
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: crm-scaling-demo
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: crm-scaling-demo
minReplicas: 1
maxReplicas: 10
metrics:
- type: ContainerResource #new-metrics-source
containerResource:
name: cpu
container: cpu-stressor #container-name
target:
type: Utilization
averageUtilization: 50
EOF

Beispielhafte HPA-Konfiguration auf Basis der Metriken des cpu-stressor-Containers
Im Beispiel oben skaliert der HPA-Controller das Ziel so, dass die durchschnittliche CPU-Auslastung des cpu-stressor-Containers über alle Pods hinweg bei 50 % liegt.
- Warten Sie, bis der
cpu-stressor-Container CPU-Last erzeugt – Sie sehen, wie der HPA die Anzahl der Pods auf Grundlage der CPU-Auslastung descpu-stressor-Containers neu berechnet.

Beispielhafte HPA-Skalierung anhand der Metriken des cpu-stressor-Containers
Demo: HPA-Skalierung auf Basis von Container Resource Metrics
Screenshot und Demo-Video zeigen die erfolgreiche HPA-Skalierung anhand des cpu-stressor-Containers in einem Multi-Container-Pod-Setup 🚀.
Da Container Resource Metrics in Kubernetes v1.30 nun den Stable-Status erreicht haben, gewinnen Sie beim Horizontal Pod Autoscaling deutlich an Präzision – für eine optimale Performance Ihrer Anwendungen.
Ich hoffe, dieser Beitrag war hilfreich. Weiterführende Informationen finden Sie hier: