What is New in Kubernetes 1.35
Kubernetes 1.35 brings important improvements in stability, performance, and resource management. This version focuses on making clusters more reliable while adding new capabilities for modern workloads. Key highlights include the graduation of in-place pod resource updates to stable status, better support for dynamic resource allocation, and several scheduling enhancements. The release also includes many bug fixes and cleanup items that address issues from previous versions.
Overall, Kubernetes 1.35 helps operators run large-scale environments with fewer disruptions and better observability. Administrators will notice smoother upgrades and more consistent behavior across components like the scheduler, kubelet, and kube-proxy.
Major Feature Promotions and Enhancements
Kubernetes 1.35 promotes several long-awaited features to more mature stages. These changes make common operations easier and more efficient.
| Feature | Status in 1.35 | Description |
|---|---|---|
| In-place Pod Vertical Scaling | GA (Stable) | Allows updating CPU and memory resources for running pods without restarting containers. This reduces downtime for stateful and long-running workloads. |
| PreferSameZone and PreferSameNode traffic distribution | GA | Service traffic can now prefer pods in the same zone or node. The older PreferClose value is deprecated in favor of these clearer options. |
| Relaxed Service Name Validation | Beta (enabled by default) | Service names follow simpler DNS label rules, giving more flexibility when creating services. |
| kubectl command headers | Stable | Improved header handling in kubectl commands is now fully stable. |
| SchedulerAsyncAPICalls | Enabled by default | Async API calls in the scheduler return after fixing performance regressions seen in earlier versions. |
These promotions reflect the project's focus on production readiness. For example, in-place scaling is especially useful for workloads that need quick resource adjustments without full pod restarts.
Dynamic Resource Allocation (DRA) Improvements
Dynamic Resource Allocation continues to evolve in Kubernetes 1.35 with better handling of devices and claims.
- Fixed race conditions that could cause the same device to be allocated to multiple pods when scheduling happens rapidly.
- Improved handling of multiple ResourceClaims, even when one claim is already prepared.
- Health status of DRA resources is now reported correctly in pod status for claims from templates.
- Added support for implicit extended resource names based on device class.
- Introduced new metrics for tracking ResourceClaim creation and sources in the controller.
These changes make DRA more reliable for hardware-accelerated workloads such as GPU or specialized device usage.
Scheduling and Performance Enhancements
The scheduler in Kubernetes 1.35 receives several fixes and improvements for better throughput and reliability.
- Fixed performance degradation caused by high-latency API servers.
- Improved handling of asynchronous preemption to avoid unnecessary repeated calls.
- The scheduler now clears the nominatedNodeName field on scheduling or binding failures. External autoscalers should respect this behavior.
- StatefulSets now count available replicas more accurately, leading to faster rollouts.
- Opportunistic batching in the scheduler queue helps process similar pods more efficiently.
These updates reduce scheduling delays and make the system more responsive under load.
Kubeadm and Cluster Lifecycle Updates
Kubeadm includes practical fixes for day-to-day operations and upgrades.
- When patching Node objects, kubeadm no longer exits early on unknown API errors and retries within the polling window.
- Fixed upgrade failures when the kubeadm-flags.env file contains empty KUBELET_KUBEADM_ARGS.
- Now waits for etcd learner members to start before promoting them during join operations.
- Extra arguments from user overrides are no longer sorted alphabetically, preserving order for flags like --service-account-issuer.
- Added a new preflight check for container runtime support of the RuntimeConfig gRPC method.
These improvements make cluster bootstrapping and upgrades smoother, especially in production environments.
Bug Fixes and Regressions Addressed
Kubernetes 1.35 fixes several regressions and long-standing issues from recent releases.
| Component | Issue Fixed |
|---|---|
| kube-proxy (Windows) | IPv4 and IPv6 load balancers are now tracked separately for correct dual-stack behavior. |
| kubelet | Logging now respects verbosity levels properly. Fixed issues with environment variables containing multi-byte characters after $. |
| Scheduler | Disabled the problematic SchedulerAsyncAPICalls gate temporarily in 1.35.0 and re-enabled after fixes. |
| kubectl | Fixed panic in exec when terminal size queue is uninitialized. Also fixed api-resources panic on discovery failure. |
| API Server | Restored correct reporting in apiserver_watch_events_sizes metric. Reduced spurious log messages. |
| StatefulSets | Faster progress during rollouts due to accurate availableReplicas counting. |
Additional fixes address SELinux warning events for completed pods, image garbage collection messages, and various DRA-related resource claim issues. Windows users will benefit from updated HNS library support for load balancer policy modifications.
Dependencies and Build Updates
Kubernetes 1.35 is built with Go 1.25.6. The release removes the archived github.com/pkg/errors dependency in favor of standard Go error handling.
The hnslib library was updated to v0.1.2 for better compatibility with the latest Windows HNS APIs.
These updates improve security, performance, and maintainability of the codebase.
Other Notable Changes
- Improved throughput in informer and controller queues through batch processing of watch events.
- New kubectl features include tracing support with
--profile=traceand kuberc view/set commands for configuration management. - Added the
ChangeContainerStatusOnKubeletRestartfeature gate (disabled by default) to control pod status behavior after restarts. - MutableCSINodeAllocatableCount is now enabled by default.
- Fixed issues with user namespaces configuration and static pod restart policies.
- Enhanced FreeDiskSpaceFailed events with more actionable details about image garbage collection.
These smaller changes contribute to a more polished and operator-friendly release.
Deprecations and Removals
As part of ongoing modernization, Kubernetes 1.35 includes these important notes:
- The ipvs mode in kube-proxy is deprecated. Users should plan to migrate to nftables in future releases.
- Cgroup v1 support is being phased out. Nodes will not start on cgroup v1 by default. Set failCgroupV1 to false in kubelet config if you still need it.
- Several older feature gates and beta APIs have been removed or locked to improve security and reduce maintenance burden.
Review the full upgrade notes before moving to 1.35 to ensure a smooth transition.
Summary
Kubernetes 1.35 delivers a balanced set of improvements focused on reliability and modern workload support. With in-place resource scaling now stable, better DRA handling, and numerous bug fixes, this version helps teams run more efficient and resilient clusters. Whether you manage large production environments or experiment with new scheduling patterns, 1.35 provides a solid foundation for the future.
Upgrade carefully and test in non-production environments first. The community continues to refine Kubernetes to meet the needs of cloud-native applications at scale.