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
requestsoderlimits, schreibt der Admission-Controller die Default-Werte zur Laufzeit in die Pod-Spezifikation. - Widerspricht ein Pod den Grenzen – etwa ein Limit oberhalb von
maxoder unterhalb vonmin–, 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.