Kubernetes Blog
Follow
Kubernetes v1.37: Memory QoS Graduates to Beta
Kubernetes v1.37 marks the Beta graduation of Memory QoS, now enabled by default on Linux nodes using cgroup v2. This feature enhances container memory management by leveraging the kernel's memory controller for better guidance. Originally introduced as Alpha in v1.22, it received expanded functionality in v1.36 with tiered memory reservation. The Beta promotion means the MemoryQoS feature gate is active in all v1.37 kubelets without requiring explicit configuration changes. Crucially, the default kubelet configuration does not enable memory throttling or reservation unless users explicitly opt-in.Users can enable specific Memory QoS behaviors through kubelet configuration fields. Setting memoryThrottlingFactor, for instance, activates memory.high throttling for Burstable and BestEffort containers. Alternatively, configuring memoryReservationPolicy to TieredReservation enables tiered memory protection via memory.min and memory.low. A significant change in v1.37 is the default for memoryThrottlingFactor shifting from 0.9 to null, preventing automatic memory throttling for existing clusters upon upgrade. This ensures that runtime behavior remains consistent unless explicitly configured otherwise.To configure Memory QoS, cluster operators can set memoryThrottlingFactor for throttling and memoryReservationPolicy for tiered reservation. Both can be enabled simultaneously or independently. Disabling Memory QoS entirely is possible by setting the feature gate to false and adjusting the kubelet configuration accordingly. A known limitation is that memory reservation is node-wide, applying consistently to all pods regardless of their desired behavior, impacting individual pod control. The next development phase for Memory QoS is its graduation to General Availability, with ongoing feedback shaping future adjustments.