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
requestsundlimitsfü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.