A 150,000-pod cluster can cut roughly 55% of its watch-cache warm-up time without changing a single workload manifest. The lever is the combined Kubernetes v1.37 RangeStream and concurrent-decoding optimization, paired with etcd v3.7 and a control plane that no longer treats full-collection reads as harmless.
For years, the failure mode was familiar. Restart an API server, initialize the cache, flood etcd with expensive list and watch work, then watch ordinary traffic queue behind recovery traffic. A control-plane restart became an incident of its own.
Kubernetes v1.37, code-named Garhwal, changes that path. Resilient watch cache initialization caps demand. etcd v3.7 streams large ranges instead of building them whole, while concurrent watch-event decoding uses cores you already paid for. None of this makes an undersized etcd cluster fast, but it does make overload bounded, visible, and much less dramatic.
Kubernetes v1.37 etcd RangeStream changes the read path
The old path looked like a warehouse dock with one oversized pallet. kube-apiserver requests a collection. etcd performs a Range call, builds the complete response in memory, and returns it only after the page is ready. The API server then decodes and transforms objects before its watch cache is useful. Large Pod, Secret, ConfigMap, or custom-resource inventories turn that one pallet into a memory peak at both ends.
etcd v3.7.0 adds RangeStream for this exact problem. It accepts the same RangeRequest and yields the same logical result set, but sends adaptive chunks based on returned value size instead of a fixed key count. etcd handles each chunk in a separate short transaction in its bbolt-backed store. The benefit isn’t just lower RAM use. Short read transactions reduce lock contention while concurrent work arrives.
With EtcdRangeStream enabled, Kubernetes v1.37 uses the stream for full-collection scans: watch-cache initialization and cache misses that need a direct etcd list. kube-apiserver decodes one chunk, releases its working memory, and takes the next. Clients still receive a normal Kubernetes List response. The pipeline changed; the API contract didn’t.
Editorial analysis: at six-figure pod counts, streaming large lists is a better default than holding the full answer before processing begins.
The gate is Beta and enabled by default in v1.37 when etcd is v3.7 or later. It is a kube-apiserver-only gate. An API server can roll out ahead of etcd because it detects support at startup and falls back to paginated Range behavior if a RangeStream request returns Unimplemented. That fallback helps with a staged upgrade. Don’t mistake it for validation: a quiet fallback means you haven’t received the main benefit.
Build the reference control plane first
Use three or more etcd members on dedicated, low-latency storage. Put multiple kube-apiserver instances behind the control-plane endpoint. Run Kubernetes v1.37 with etcd v3.7 on a patched Linux 7.2-series kernel. The prose diagram is straightforward: controllers and clients enter the API load balancer; each API server checks its local watch cache; cache misses and warm-up scans go to the etcd quorum; Prometheus scrapes both tiers. Keep steady-state cached reads separate from exceptional direct reads. Tuning direct reads doesn’t excuse a cache that stays cold.
# kube-apiserver static Pod or service arguments
--feature-gates=EtcdRangeStream=true
--etcd-servers=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379
Don’t add that gate merely because it looks prudent. In v1.37, it is already enabled by default. Declare it only when your configuration-management system requires explicit feature-gate state, and avoid replacing the complete feature-gate set with stale values. The actual prerequisite is etcd v3.7, not a ceremonial flag.
Make watch-cache recovery boring again
Resilient watch cache initialization became Stable behind ResilientWatchCacheInitialization in v1.34. Kubernetes v1.37 finishes the rollout: the remaining WatchCacheInitializationPostStartHook gate has graduated and is locked on for every cluster.
This matters during API-server startup and cache reinitialization. Earlier behavior could stack list and watch requests onto etcd while the cache was unavailable. Under load, work multiplied at the moment the system had the least spare capacity. The v1.37 behavior bounds delegated requests and returns HTTP 429 for work that would exceed the budget. API Priority and Fairness keeps room for live traffic instead of becoming a parking lot for warm-up operations.
Teams often see 429 and reach straight for retries, higher client limits, or larger queues. Resist that reflex. A 429 during control-plane recovery is a pressure valve. Synchronized retries turn an intentional shed into a thundering herd. Controllers should use bounded exponential backoff with jitter. Humans should ask why recovery had so little headroom.
Verify the stream, not the release label
Start with the metric that proves the path is active. Kubernetes records streamed list operations under listStream in etcd_request_duration_seconds. Query the counter during a deliberately controlled API-server restart or a representative large-list test:
sum by (instance) (
rate(etcd_request_duration_seconds_count{operation="listStream"}[5m])
)
A nonzero series during cache initialization confirms that kube-apiserver is issuing streamed reads. If it stays at zero, check four things: the actual etcd member version, API-server feature-gate composition, whether the workload ran a whole-collection scan, and API-server logs for Unimplemented-driven fallback. Compare etcd resident memory, CPU, disk latency, and API-server readiness duration before and after rollout. A counter without a baseline is decorative telemetry.
Test with production-shaped objects. A 100,000-object list of tiny ConfigMaps is not equivalent to 100,000 Pods with verbose metadata, status, owner references, and injected fields. RangeStream adapts chunking to value size, which is why object shape belongs in the test plan.
Use concurrency where Kubernetes v1.37 can preserve order

Parallel decode work preserves order while accelerating watch-cache warm-up.
Streaming prevents one giant buffered response. It doesn’t remove the CPU spent decoding and transforming each event. Kubernetes v1.37 addresses that second bottleneck with ConcurrentWatchObjectDecode. A collector receives events, a bounded worker pool decodes them in parallel, and the collector reassembles results in original chronological order before clients see them.
The default pool size is 10 workers. Upstream sweeps found gains flattening between 8 and 12, which makes sense for a pipeline also competing with serialization, garbage collection, cache mutation, TLS, and controller traffic. More goroutines aren’t a tuning strategy. On a control-plane VM with too few effective CPUs, higher parallelism turns one queue into scheduler contention.
At roughly 150k pods, upstream benchmarks report about a 40% watch-cache initialization reduction from concurrent decode alone. Combined with RangeStream, warm-up fell roughly 55% versus the old paginated Range plus single-threaded decode path. Those numbers are compelling, not an SLO. Results depend on object size, CPU generation, etcd storage latency, admission behavior, and how many API servers warm at once.
I’d restart one API server at a time and measure cleanly rather than trigger a fleet-wide restart to chase a benchmark. In HA control planes, staggered rollouts preserve serving capacity and stop every API server from warming the same high-cardinality resources simultaneously. Capture p50, p95, and maximum readiness time, along with etcd CPU, memory high-water marks, direct-list volume, and 429 rates. Six signals beat one triumphant dashboard panel.
etcd v3.7 supplies supporting gains too. SharedBufReadTxMode roughly doubles lease and user/role operation throughput. FastLeaseKeepAlive removes a synchronization delay around applied-index waiting. Keys-only ranges can remain in the in-memory index unless value sorting is needed. LeaseRevoke is prioritized under overload, reducing delayed revocation and zombie-looking lease holders. These quieter changes still matter when the same etcd quorum carries Kubernetes metadata, leases, and lock-heavy platform services.
Pair control-plane tuning with disciplined autoscaling
Control-plane recovery and workload elasticity meet at the API server. Kubernetes v1.37 moves HorizontalPodAutoscaler scale-to-zero, first introduced in v1.16, to Beta and enables it by default. HPAs using object or external metrics can scale idle workloads to zero when spec.minReplicas: 0 is set. Queue consumers, batch processors, and GPU workloads are strong candidates.
The new ScaledToZero status condition separates intentional idleness from a broken deployment. Use it in operational checks. A service scaled to zero shouldn’t page the same way as one that cannot schedule or become ready. The distinction sounds small until a dashboard turns every quiet queue into red noise.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: gpu-queue-consumer
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: gpu-queue-consumer
minReplicas: 0
maxReplicas: 40
metrics:
- type: External
external:
metric:
name: queue_depth
target:
type: AverageValue
averageValue: "1"
behavior:
scaleUp:
tolerance: 0.02
scaleDown:
tolerance: 0.15
Per-HPA custom tolerance is Stable in v1.37 through spec.behavior.scaleUp and spec.behavior.scaleDown. Tight scale-up tolerance can respond quickly to a queue. Looser scale-down tolerance avoids oscillation when metrics wobble. Don’t use scale-to-zero for a latency-sensitive synchronous service unless its activation path and cold-start budget are explicit. Saving idle capacity isn’t a victory if every first request is sacrificed.
The metrics.k8s.io API also reaches Stable as v1 after nearly nine years in Beta. Its surface is identical to v1beta1: no renamed fields and no semantic surprise. Verify the registered APIService and query the stable endpoint directly:
kubectl get apiservice v1.metrics.k8s.io
kubectl get --raw /apis/metrics.k8s.io/v1/nodes
kubectl get --raw /apis/metrics.k8s.io/v1/namespaces/default/pods
kubectl top prefers v1 when available and falls back to v1beta1. The HPA controller in v1.37 still supports only v1beta1; discovery-based selection is planned, not present. Ensure metrics-server serves v1.metrics.k8s.io, but don’t claim the HPA has switched until that controller capability exists.
Choose the kernel like a production dependency
Linux 7.3 is in its active merge window as of mid-August 2026, following the August 17 Linux 7.2 release. Its approximately 1,250 memory-management patches, up from 920 in the prior cycle, include cache-aware task scheduling that keeps threads within a Last Level Cache domain. That is attractive for multi-threaded kube-apiserver and etcd workloads. Reported changes include memory-reclaim improvements of up to roughly thirty percent for database workloads, a 1.83x Raspberry Pi 4B speedup under concurrent unmapping, and a 1.4x improvement on a 20-core Intel system.
Do not put a pre-release kernel under a production etcd quorum because a benchmark looks sharp. This is the wrong default. Linux 7.3 also brings a CFS-style fair GPU scheduler, a 71% Zstd decompression speedup via BMI2 probing, Btrfs direct I/O near 95% of theoretical maximum throughput, and resizable F2FS tail sections. Evaluate those capabilities in a representative test cluster first. For production, a well-patched Linux 7.2-series or LTS kernel with characterized storage behavior is the disciplined choice.
The August 23 to 29, 2026 kernel guidance covers 227 CVEs and identifies minimum safe upstream releases by branch: 5.10.268, 5.15.219, 6.1.186, 6.6.155, 6.12.107, 6.18.48, 7.1.12, 7.2.2, or mainline 7.2. CVE-2026-80590 sets the required point release across multiple branches. Patch level comes before speculative throughput. A fast control plane on an exposed kernel is not tuned; it’s unfinished.
Run the upgrade in order: establish a baseline, upgrade kube-apiserver to v1.37, confirm fallback behavior if etcd remains v3.6, roll etcd to v3.7, prove listStream traffic, then conduct staggered API-server restarts under controlled load. Keep rollback artifacts for each layer. Combining a Kubernetes upgrade, etcd storage migration, kernel jump, and autoscaling policy rewrite in one maintenance window destroys attribution.
The operational verdict
For clusters beyond 50k pods, Kubernetes v1.37 plus etcd v3.7 is a serious control-plane upgrade. At six-figure scale, it should be high on the roadmap. The combination turns cache warm-up from an unbounded burst into a back-pressured pipeline: reject excess work, stream large reads, decode across cores, and preserve client ordering.

A stable control plane is engineered through measured upgrades, observability, and restraint.
Small, mostly stateless clusters won’t see a dramatic return. Treat RangeStream there as future-proofing, not an emergency project. Large clusters should ask a harsher question: during the next API-server restart, can etcd stay calm while the cache comes back? Prove the answer with listStream, readiness time, and 429 rates.