Facebook Pixel
Articles

Enhancing Workload Stability: Kubernetes v1.37 Memory QoS Beta Explained

Kubernetes v1.37 introduces Memory QoS as a Beta feature, providing cluster operators with granular control over container memory management. Learn how this update improves workload reliability and how to configure it for your environment.

Written by:
APin

Senior Technology Analyst • Verified Expert

More from this author →
Enhancing Workload Stability: Kubernetes v1.37 Memory QoS Beta Explained

Kubernetes v1.37 introduces Memory QoS as a Beta feature, providing cluster operators with granular control over container memory management. Learn how this update improves workload reliability and how to configure it for your environment.

Understanding the Shift to Beta

Cluster operators have long wrestled with erratic memory behavior—unexpected OOM kills, noisy‑neighbor contention, and costly manual tuning. In Kubernetes v1.37, Memory QoS graduates to **Beta** and is turned on automatically for every kubelet running on Linux nodes with cgroup v2. This shift gives the kernel precise guidance on how to treat container memory without you having to flip a switch.

Why is the default‑on model a game‑changer? The feature gate is now safe out‑of‑the‑box because the default kubelet configuration does **not** enable memory throttling or reservation. No memory.high, memory.min, or memory.low values are written unless you explicitly configure them. That means you can upgrade to v1.37 with confidence—your existing workloads keep running exactly as before, while the platform silently prepares for smarter memory management.

  • Zero‑impact upgrade: The default memoryThrottlingFactor is null, so containers aren’t throttled unless you set a value.
  • Opt‑in control: Set memoryThrottlingFactor (e.g., 0.9) to enable memory.high throttling for Burstable and BestEffort pods.
  • Tiered reservation: Enable memoryReservationPolicy: TieredReservation to protect Guaranteed pods with memory.min and Burstable pods with memory.low.
  • Consistent behavior: Existing kubelet configs preserve any custom values you already have, avoiding surprise changes.
  • Future‑ready: The Beta stage paves the way for a GA release, letting you shape the final feature with real‑world feedback.

Strategically, this means you can focus on delivering business value instead of firefighting memory spikes. Predictable resource allocation improves pod stability, reduces costly restarts, and frees your SRE team to work on higher‑impact initiatives. If you need throttling or tiered reservation, a few lines in the kubelet configuration unlock them—no complex scripts, no downtime. Embrace the Beta shift today and let Kubernetes handle memory the way it was designed to.

Safety First: The New Default Configuration

When you upgraded to Kubernetes v1.37 you probably noticed that the memoryThrottlingFactor field now defaults to null instead of the historic 0.9. This isn’t a random tweak—it’s a deliberate safety‑first design that protects your existing workloads from unexpected throttling the moment the MemoryQoS feature gate flips to “on” by default.

In earlier Alpha releases the default of 0.9 meant the kubelet automatically wrote a memory.high limit for Burstable and BestEffort containers. As soon as the feature gate was enabled, those containers could be throttled even though you never asked for it. The result? sudden latency spikes, failed batch jobs, and a scramble to debug “why did my pod stop working after the upgrade?”.

Setting the default to null changes that behavior entirely:

  • No automatic throttling: The kubelet will only set memory.high when you explicitly provide a factor between 0 and 1.
  • Full backward compatibility: Clusters that upgrade without touching their kubelet config continue to run exactly as before—no hidden policy changes, no surprise performance regressions.
  • Preserves intentional settings: If your configuration already contains a memoryThrottlingFactor value, that value is retained, so you keep the throttling behavior you deliberately enabled.

From a strategic standpoint, this change lets you adopt the powerful MemoryQoS capabilities on your own schedule. You can:

  • Test safely: Deploy v1.37 in a staging environment, observe normal operation, then add memoryThrottlingFactor: 0.9 when you’re ready to enforce throttling.
  • Scale confidently: Upgrade production clusters without fearing a silent shift in resource limits that could affect SLAs.
  • Maintain control: Explicit configuration remains the single source of truth, aligning with compliance and governance policies.

In short, the null default is the “safety net” that guarantees your workloads stay stable during the transition, while still giving you the flexibility to enable memory throttling when it truly adds value to your operations.

Configuring Memory Throttling and Reservation

When you upgrade to Kubernetes v1.37, Memory QoS is already enabled, but it won’t change your workloads unless you explicitly set memoryThrottlingFactor or memoryReservationPolicy. That default‑null behavior protects you from accidental throttling, yet it also means you must take deliberate steps to reap the performance and stability gains that tiered reservation and throttling provide.

Why you should act now

  • Predictable burst handling: Setting memoryThrottlingFactor (e.g., 0.9) tells the kubelet to calculate memory.high for Burstable and BestEffort pods, preventing runaway memory use without killing the container.
  • Hard‑wired safety net: Enabling memoryReservationPolicy: TieredReservation adds memory.min for Guaranteed pods and memory.low for Burstable pods, guaranteeing a baseline of RAM even under node pressure.
  • Zero‑downtime upgrades: Because the default is null, you can roll out the configuration on a live cluster without triggering unexpected throttling.

Step‑by‑step implementation

  • Enable throttling only – add a single line to your KubeletConfiguration:
  • apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    memoryThrottlingFactor: 0.9
  • Combine throttling with tiered reservation – set both fields:
  • apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    memoryThrottlingFactor: 0.9
    memoryReservationPolicy: TieredReservation
  • Enable tiered reservation without throttling – omit the factor:
  • apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    memoryReservationPolicy: TieredReservation

Remember that memoryReservationPolicy applies node‑wide; every pod inherits the tiered rules. If your environment mixes workloads that need hard reservation with those that should stay reclaimable, you’ll need to choose the policy that best aligns with your overall reliability goals.

Strategic payoff

  • Higher node utilization: Throttling curbs memory spikes, freeing capacity for other pods.
  • Reduced OOM incidents: Tiered reservation guarantees a safety margin for critical services.
  • Future‑proofing: As Memory QoS moves toward GA, having the configuration in place now positions you to adopt upcoming enhancements with minimal friction.

When you run a mixed‑workload cluster—Guaranteed services that need hard memory reservation alongside Burstable or BestEffort jobs that should stay reclaimable—you’ve likely hit a roadblock: the memoryReservationPolicy in Kubernetes v1.37 applies to the entire node. This node‑wide setting means every pod inherits the same reservation rules, and there’s no native way to opt individual pods in or out.

  • Uniform reservation forces a trade‑off. Guaranteed pods receive memory.min, while Burstable pods get memory.low, even if they would benefit from a more flexible approach.
  • Hard reservation can starve neighbors. Page‑cache usage by a single pod is counted against its reservation, preventing the kernel from reclaiming that memory for other workloads.
  • Operational complexity spikes. Teams must choose a single policy for the whole node, often leading to over‑provisioning or under‑utilization.

Addressing this limitation isn’t just a technical tweak—it’s a strategic lever for cost efficiency and reliability. Here’s how forward‑thinking operators are turning the challenge into an advantage:

  • Dedicated node pools. Segregate workloads by QoS class into separate node groups, each with its own memoryReservationPolicy. This isolates hard‑reservation needs without compromising reclaimable capacity elsewhere.
  • Hybrid kubelet configs. Deploy custom kubelet configurations per node pool, enabling TieredReservation only where it adds value and leaving it disabled for flexible workloads.
  • Proactive monitoring. Use the new Memory QoS metrics to track reservation impact in real time, allowing you to fine‑tune pool sizes before performance issues surface.
  • Engage the community. Contribute to SIG Node’s ongoing work (see issue #140246) to accelerate per‑pod reservation controls, positioning your organization as a thought leader.

By embracing these tactics, you gain:

  • Predictable performance. Guaranteed services receive the memory protection they need.
  • Higher node utilization. Burstable workloads stay reclaimable, squeezing more value from each VM.
  • Reduced operational risk. Clear separation eliminates the “one‑size‑fits‑all” surprise during scaling events.

Don’t let a node‑wide policy dictate your architecture. Align your cluster design with business outcomes today, and stay ahead of the next Memory QoS GA release.

Operational Best Practices for Kubernetes Admins

Kubernetes administrators constantly wrestle with “stale” memory settings that linger after upgrades or configuration changes. In v1.37, MemoryQoS is now beta and enabled by default, but the kubelet no longer writes memory.high, memory.min, or memory.low unless you opt‑in. This safety net protects existing workloads, yet it also means you must actively manage stale memory protection to avoid unexpected throttling or reservation side‑effects.

  • Know the defaults: After upgrading, the kubelet resets stale protection to zero on cgroup v2 nodes, so any lingering memory.high values are cleared automatically.
  • Enable only what you need: Set memoryThrottlingFactor (e.g., 0.9) to turn on throttling, or use memoryReservationPolicy: TieredReservation for tiered protection. Leaving these fields unset keeps the cluster behavior unchanged.
  • Disable cleanly: To turn the feature off, set the feature gate MemoryQoS: false and remove any custom memoryThrottlingFactor or memoryReservationPolicy entries. The kubelet will then reset stale values at startup.
  • Monitor for GA: The next milestone is GA. Continuous monitoring of kubelet logs and cgroup metrics ensures you catch regressions before they impact production.

Strategically, treating MemoryQoS as a toggleable knob gives you granular control over resource guarantees without sacrificing the flexibility of mixed workloads. By auditing your current kubelet configuration, you can confirm that stale memory limits are either intentionally set or safely cleared. Pair this audit with proactive alerting on cgroup memory metrics, and you’ll be ready to adopt any GA‑level refinements the SIG Node community releases.

Ready to optimize your cluster performance? Audit your current kubelet configurations and reach out to our engineering team for a Kubernetes performance assessment.

NEED EXPERT ENGINEERING?

Building a High-Performance SaaS or Need Dedicated Developers?

Partner directly with our senior full-stack engineers in Node.js, Nest.js, React, and MySQL. Get production-grade architectures shipped on fixed milestones with zero hiring overhead.

APPWORKS ENGINEERING

Looking for Custom Software, SaaS, or Dedicated Developers?

Appworks Technologies designs, builds, and scales production enterprise platforms, microservices, and multi-tenant SaaS products tailored to your business goals.

Editorial Policy & Research Methodology

Our findings are based on rigorous internal research, verified industry benchmarks, and direct technical implementation experience from our enterprise client projects. All statistics and technical claims are reviewed by senior engineers before publication to ensure accuracy, transparency, and helpfulness for our readers.

Have an Idea? we offer services in Lucknow, Bangalore, Delhi NCR and other locations