Guaranteed ist die höchste QoS-Klasse, die Kubernetes einem Pod zuweist. Ein Pod erhält sie genau dann, wenn jeder Container für CPU und Memory sowohl requests als auch limits setzt – und beide Werte identisch sind (requests == limits).

Die Bedingung im Detail

Kubernetes bestimmt die Klasse automatisch aus den Ressourcen-Angaben der Container (siehe Pod-QoS-Klassen). Für die Klasse Guaranteed gilt:

  • Jeder Container im Pod setzt requests und limits für CPU und Memory.
  • Für jede Ressource gilt requests == limits – die Werte sind also identisch.
  • Weicht auch nur ein Container ab (fehlende Angabe oder requests < limits), erhält der gesamte Pod nur die Klasse Burstable.

Was die Klasse bewirkt

Der Scheduler platziert den Pod nach den requests – da diese den limits entsprechen, ist die reservierte Menge exakt die maximale. Das Memory-Limit wirkt hart über die cgroup (memory.max): Überschreitet der Container sein Limit, beendet der Kernel ihn mit OOMKilled. Beim CPU-Limit greift stattdessen Throttling.

Eviction und OOM-Reihenfolge

Bei Node-Pressure-Eviction werden BestEffort-Pods zuerst beendet, dann Burstable- und zuletzt Guaranteed-Pods (siehe Eviction-Policy). Zusätzlich setzt der Kubelet den oom_score_adj auf etwa −997: Der Pod ist damit praktisch immun gegen den OOM-Killer des Nodes, solange andere Pods beendet werden können. Unter systemd liegt der Pod in der cgroup kubepods-guaranteed.slice.

Einsatz

Guaranteed eignet sich für Datenbanken, StatefulSets und latenzkritische Dienste, die eine stabile Ressourcenmenge brauchen. Der Preis: Der Pod kann freie Node-Ressourcen nicht über sein Limit hinaus nutzen (kein Bursting). Anzeigen lässt sich die Klasse mit kubectl get pod <name> -o yaml unter status.qosClass.

Verwandte Grundlagen: PodSpec, Kubernetes cgroup, Kubernetes Eviction-Policy. Weitere QoS-Klassen: Burstable, BestEffort.