Memory QoS has moved to Beta in Kubernetes v1.37 and is now turned on automatically for every kubelet. This shift removes the need for a feature‑gate flag, but the default behavior is deliberately conservative: no memory throttling or reservation is applied unless you set the corresponding kubelet fields.
What v1.37 Changes About Memory QoS
The MemoryQoS gate is now a Beta feature and is enabled out‑of‑the‑box on Linux nodes that use cgroup v2. The kubelet no longer writes memory.high, memory.min, or memory.low values to the cgroup unless you explicitly configure them. Two knobs control the optional behavior:
memoryThrottlingFactor– a floating‑point value (0‑1) that, when set, causes the kubelet to calculate amemory.highlimit for Burstable and BestEffort pods.memoryReservationPolicy– set toTieredReservationto activate tiered memory protection viamemory.minandmemory.low.
Both fields default to a neutral state (null for the factor and None for the policy), preserving the runtime characteristics of clusters that upgrade from earlier releases.
Why the Change Matters to Practitioners
AI workloads, data‑intensive pipelines, and multi‑tenant services often push the memory limits of a node. With Memory QoS now default‑on, you gain a path to tighter memory accounting without a disruptive rollout. However, the safe defaults mean that existing pods will not see throttling or reservation unless you opt‑in, avoiding unexpected performance regressions during an upgrade.
Operational and Security Considerations
Enabling memoryThrottlingFactor writes a memory.high value to the cgroup, which the kernel uses to reclaim memory from containers that exceed the calculated threshold. This can protect a node from out‑of‑memory (OOM) cascades, but it also introduces a new failure mode: a mis‑configured factor (e.g., too low) could cause legitimate workloads to be throttled aggressively, potentially impacting latency‑sensitive AI inference services.
Activating memoryReservationPolicy: TieredReservation adds memory.min and memory.low entries, giving the kernel a hierarchy of guarantees. From a security‑hardening perspective, the isolation is still enforced by the kernel; the feature does not change the attack surface, but it does affect how resource exhaustion attacks manifest. Operators should monitor cgroup metrics to ensure that the new limits are not being abused to starve other pods.
Configuration changes survive upgrades. If a cluster already specifies a non‑null memoryThrottlingFactor, that value is retained when moving to v1.37. Conversely, clusters without an explicit setting will adopt the new null default, effectively disabling throttling until the field is added.
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
memoryThrottlingFactor: 0.9
Related CloudNinjas coverage: Kubernetes.
What This Means For Practitioners
Review your kubelet configuration files for any existing memoryThrottlingFactor or memoryReservationPolicy entries. If you rely on memory throttling or tiered reservation, add the appropriate fields now to make the behavior explicit. For clusters that do not need these controls, you can leave the defaults untouched and benefit from a no‑op upgrade. Finally, incorporate cgroup‑level monitoring into your observability stack so you can detect when the new limits start influencing pod performance or when they are being leveraged in a denial‑of‑service scenario.

