HPA
metrics.k8s.io (CPU/Mem; v1 GA seit
1.37, der HPA fragt weiter v1beta1 ab) oder custom/external (Prometheus-Adapter,
KEDA). minReplicas≥2 für Verfügbarkeit,
0 nur mit Object-/External-Metrik (Beta 1.37). Gegen
Flapping: behavior.scaleDown.stabilizationWindowSeconds
(Default 300 s), Toleranz je Richtung über
behavior.scaleUp|scaleDown.tolerance (GA 1.37, Default
10 %).
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata: {name: api}
spec:
scaleTargetRef:
{apiVersion: apps/v1, kind: Deployment, name: api}
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target: {type: Utilization, averageUtilization: 70}
VPA
recommender: schlägt requests vor
(updateMode: Off, sicher).
updater + admission: Recreate
(Eviction) oder InPlaceOrRecreate (GA seit VPA 1.6, nutzt
In-Place-Resize, GA in K8s 1.35). Auto ist seit VPA 1.5
deprecated.
Achtung: VPA mit Updates + HPA auf CPU/Mem kollidieren.
PDB / ResourceQuota / LimitRange
PodDisruptionBudget: minAvailable
oder maxUnavailable, Drains, Upgrades respektieren das.
unhealthyPodEvictionPolicy: AlwaysAllow (GA 1.31), sonst
blockieren nicht-Ready-Pods bei ausgeschöpftem Budget den
Drain.
ResourceQuota: Namespace-Limit für Summen
(requests.cpu, count/pods,
persistentvolumeclaims).
LimitRange: Default + Min/Max pro Container, erzwingt, dass jeder Pod requests trägt.