Kubernetes assigns a pod one of three QoS classes, and the class determines eviction order when a node is under memory pressure. Guaranteed requires that every container in the pod, init containers included, sets both a CPU and a memory limit, and that each request equals its corresponding limit. Burstable covers pods where at least one container sets a request. BestEffort covers pods that set neither requests nor limits anywhere.
A single sidecar without resources on it silently demotes the whole pod from Guaranteed to Burstable. Under node memory pressure the kubelet evicts BestEffort pods first, then Burstable pods that exceed their requests, and Guaranteed pods last.
Check the assigned class with kubectl get pod NAME -o jsonpath='{.status.qosClass}' rather than inferring it from the manifest. Guaranteed also unlocks exclusive CPU pinning under the static CPU manager policy, but only for pods requesting whole CPUs. Note that omitting a CPU limit, which is often correct for latency, makes Guaranteed unreachable by definition.