Eine LimitRange ist ein Kubernetes-Objekt, das in einem Namespace Standardwerte sowie Ober- und Untergrenzen für die Ressourcen-Anforderungen einzelner Pods festlegt. Container, die keine eigenen Angaben machen, erhalten automatisch die vorgegebenen Defaults.

Aus den Requests und Limits – eigenen oder per LimitRange vergebenen – leitet Kubernetes die QoS-Klasse des Pods ab.

Aufbau einer LimitRange

apiVersion: v1
kind: LimitRange
metadata:
  name: dev-limits
  namespace: dev
spec:
  limits:
  - type: Container
    defaultRequest:
      cpu: 100m
      memory: 128Mi
    default:
      cpu: 200m
      memory: 256Mi
    max:
      cpu: "2"
      memory: 2Gi
    min:
      cpu: 50m
      memory: 64Mi

default setzt das Limit, defaultRequest die Anforderung, min und max begrenzen die Spanne. Der Typ Container gilt je Container, Pod für die Summe aller Container eines Pods. Auch die Größe von PersistentVolumeClaim-Objekten lässt sich über min und max mit der Ressource storage begrenzen.

Wirkung im Betrieb

  • Fehlen einem Container eigene requests oder limits, schreibt der Admission-Controller die Default-Werte zur Laufzeit in die Pod-Spezifikation.
  • Widerspricht ein Pod den Grenzen – etwa ein Limit oberhalb von max oder unterhalb von min –, wird seine Erstellung abgelehnt.
  • LimitRange und ResourceQuota ergänzen sich: Die Quota deckelt das Budget des gesamten Namespace, die LimitRange sorgt für sinnvolle Einzelwerte.

Warum Defaults wichtig sind

Ohne LimitRange laufen Container standardmäßig mit unbegrenzten Ressourcen – ein einzelner Pod kann dadurch einen ganzen Node belegen. Sinnvolle Standardwerte schützen vor versehentlich riesigen Anforderungen und machen das Verhalten eines Namespace vorhersehbar.

Verwandte Grundlagen: Kubernetes, Kubernetes ResourceQuota, Kubernetes PriorityClass.