Kubernetes v1.34: The Smooth Operator Release

Search for a command to run...

No comments yet. Be the first to comment.
There's a class of Kubernetes security bugs that makes platform engineers lose sleep. Not the "wrong RBAC rule" kind. The quiet, structural kind where your container runtime is operating exactly as de

You run EKS or GKE or AKS. You chose managed Kubernetes because you didn't want to operate etcd, patch API servers, or worry about control plane upgrades. The cloud provider handles it. You just run w

You use ArgoCD. Your manifests live in Git. Every change is a PR. You feel secure. But here's the question nobody in the GitOps world wants to answer: how do you know the image running in your cluster

A real-world incident narrative + definitive best practices for CoreDNS at scale

It started with a routine Tuesday deploy. Nothing fancy, a small config change to our ingress controller across a few clusters. We'd done this a hundred times. Standard values.yaml modification and th

Ping to Production
10 posts
Deep dives into Kubernetes orchestration, GitOps workflows, and Cloud-Native security. From scaling EKS clusters to building custom Go operators, I document my journey of automating the world, one YAML file at a time. Expect production-ready insights about DevOps, Agentic AI and SRE best practices.
The Kubernetes ecosystem continues to evolve at a remarkable pace, and the latest v1.34 release, planned for Wednesday, August 27th, 2025, represents one of the most significant updates in recent memory. Unlike previous releases that focused heavily on deprecations and removals, Kubernetes v1.34 takes a different approach, it’s entirely focused on enhancements and new capabilities that will reshape how we manage containerized workloads at scale.
What makes v1.34 particularly exciting is its focus on maturity and stability. This release showcases significant feature graduations, with several major capabilities moving from beta to stable, and important enhancements reaching beta status. Most remarkably, this release contains no deprecations or removals, a refreshing change that allows teams to upgrade with confidence, knowing their existing configurations and workflows will continue to work seamlessly.
The headline feature of v1.34 is undoubtedly the graduation of Dynamic Resource Allocation (DRA) core to stable status. DRA was originally introduced as an alpha feature in v1.26, went through a significant redesign for v1.31, reached beta in v1.32, and now achieves general availability in v1.34.
Why DRA Matters
If you’ve ever struggled with GPU allocation, custom hardware integration, or complex device scheduling in Kubernetes, DRA is about to become your best friend. Traditional device plugins have served us well, but they come with significant limitations:
Static allocation: Once a device is assigned, it can’t be dynamically reallocated
Limited flexibility: Device requests are binary ,you either get the device or you don’t
Poor observability: Limited insight into device utilization and allocation failures
DRA changes this paradigm entirely. It provides a flexible framework for categorizing, requesting, and utilizing specialized hardware like GPUs, FPGAs, network accelerators, and custom silicon.
How DRA Works in Practice
DRA introduces several new API types under resource.k8s.io/v1:
ResourceClaim: Represents a request for specific resources
DeviceClass: Defines categories of available devices
ResourceClaimTemplate: Templates for dynamic claim creation
ResourceSlice: Contains information about available resources
Here’s a practical example of how you might request GPU resources with DRA:
apiVersion: v1
kind: Pod
metadata:
name: ml-training-pod
spec:
resourceClaims:
- name: gpu-claim
resourceClaimTemplateName: gpu-template
containers:
- name: trainer
image: ml-training:latest
resources:
claims:
- name: gpu-claim
request: gpu
The magic happens through CEL (Common Expression Language) expressions that allow fine-grained device filtering. You can now specify requirements like “give me a GPU with at least 16GB memory and CUDA compute capability > 7.0” directly in your resource claims.
With DRA graduating to stable, the resource.k8s.io/v1 APIs will be available by default, making this a production-ready solution for complex device management scenarios.
Two major tracing enhancements are graduating to stable in v1.34, transforming Kubernetes observability:
API Server Tracing (KEP-647) and Kubelet Tracing (KEP-2831) both reach general availability after their journey from alpha (v1.22 and v1.25 respectively) to beta (v1.27) and now to stable.
Deep Observability Comes to Kubernetes Core
The tracing implementation uses OpenTelemetry standards to instrument critical operations:
Kubelet operations: Complete visibility into CRI calls, pod lifecycle events, and node-level operations
API server operations: End-to-end request tracing from admission controllers to etcd
Context propagation: Trace IDs flow through the entire system, enabling correlation across components
**Real-World Impact
**Imagine debugging a pod that’s stuck in ContainerCreating state. Instead of grepping through disconnected logs across multiple components, you now get:
Unified trace view: See the entire pod creation flow in one timeline
Precise bottleneck identification: Pinpoint exactly where delays occur
Cross-component correlation: Connect kubelet operations with container runtime behaviors
Performance insights: Quantify the impact of configuration changes
This level of observability transforms Kubernetes from a “black box” into a transparent, debuggable system, and with stable graduation, you can confidently build production monitoring solutions around these capabilities.
Moving to Beta and Enabled by Default
One of the most significant security improvements in v1.34 is the beta graduation of ServiceAccount token integration for kubelet credential providers (KEP-4412). This feature addresses a longstanding security concern: the use of long-lived image pull secrets.
The Security Problem
Traditional image pull secrets suffer from several security issues:
Long-lived credentials: Secrets don’t rotate automatically
Broad access: One secret often provides access to multiple registries
Operational overhead: Manual credential management and rotation
The Modern Solution
The new approach leverages short-lived, automatically rotated ServiceAccount tokens that follow OIDC-compliant semantics. Each token is scoped to a specific Pod, dramatically reducing the blast radius of credential compromise.
Benefits include:
Automatic rotation: Tokens refresh without manual intervention
Workload-level identity: Each workload gets its own scoped credentials
Reduced attack surface: No more long-lived secrets sitting in etcd
Better compliance: Aligns with modern identity-aware security practices
This change represents a fundamental shift toward a zero-trust model for container image access.
PodLevelResources Graduates to Beta
The PodLevelResources feature is now beta and enabled by default. This enhancement allows defining CPU and memory resources for an entire pod using pod.spec.resources, providing more intuitive resource management for multi-container pods.
PodObservedGenerationTracking Reaches Beta
This feature, now beta and enabled by default, populates status.observedGeneration fields in pods and their conditions, enabling a better understanding of when pod status reflects the current specification.
PreferSameZone and PreferSameNode Graduate to Beta
Building on KEP-3015, the enhanced traffic distribution capabilities are graduating to beta with the feature gate enabled by default in v1.34.
Network topology awareness gets a significant upgrade with the evolution of Service traffic distribution policies. The spec.trafficDistribution field now supports more granular preferences.
Beyond PreferClose
The original PreferClose policy is being deprecated in favor of two more specific options:
PreferSameZone: Equivalent to the current PreferClose behavior, prioritising endpoints in the same availability zone
PreferSameNode: Takes locality to the extreme, preferring endpoints on the same physical node as the client
Practical Applications
PreferSameNode is particularly valuable for:
Edge computing: Minimizing latency for IoT and edge workloads
Data-intensive applications: Reducing network traversal for high-bandwidth communications
Co-located microservices: Optimizing performance for tightly coupled services
apiVersion: v1
kind: Service
spec:
trafficDistribution: PreferSameNode
# ... rest of service spec
Graduating to Beta from Alpha
The HPA configurable tolerance feature (KEP-4951) is expected to graduate to beta in v1.34. This enhancement addresses one of the most common complaints about autoscaling behavior.
The Problem with One-Size-Fits-All
The default cluster-wide 10% tolerance for HPA scaling decisions often proves inadequate:
Large deployments: 10% might mean hundreds of unnecessary pods remain during scale-down
Sensitive workloads: Some applications need more responsive scaling
Cost optimization: Different workloads have different cost sensitivity profiles
The Solution: Workload-Specific Tolerance
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
behavior:
scaleUp:
tolerance: 5% # More aggressive scale-up
scaleDown:
tolerance: 15% # More conservative scale-down
This granular control enables:
Optimized resource utilization: Right-size tolerance for each workload
Cost management: More aggressive scale-down for cost-sensitive applications
Performance optimization: Responsive scale-up for latency-critical services
Introducing Alpha Feature
The new podReplacementPolicy field (KEP-3973) gives you explicit control over the trade-off between deployment speed and resource consumption. This alpha feature can be enabled using the DeploymentPodReplacementPolicy and DeploymentReplicaSetTerminatingReplicas feature gates.
Resource management during deployments has always been a balancing act between speed and resource consumption. This new feature provides two distinct policies:
TerminationStarted: Creates new pods immediately when old ones begin terminating
Faster rollouts and reduced downtime
Higher temporary resource consumption
TerminationComplete: Waits for complete termination before creating new pods
Controlled resource usage and predictable capacity planning
Slower rollouts
apiVersion: apps/v1
kind: Deployment
spec:
podReplacementPolicy: TerminationStarted
# ... rest of deployment spec
This feature is particularly valuable for:
Resource-constrained environments: Where every CPU core and GB of RAM matters
Long-terminating workloads: Applications with extended graceful shutdown periods
Cost-sensitive deployments: Where temporary resource spikes impact billing
Alpha Support for kubectl Output
KEP-5295 introduces KYAML as a new output format for kubectl v1.34, addressing common YAML pitfalls while maintaining full compatibility.
Solving YAML’s Pain Points
YAML’s flexibility comes with notorious drawbacks:
The Norway Bug: Unquoted country codes like NO being interpreted as boolean false
Indentation sensitivity: Subtle whitespace errors causing deployment failures
Type coercion surprises: Strings sometimes becoming numbers or booleans unexpectedly
KYAML’s Principled Approach
KYAML addresses these issues through consistent rules:
Always double-quote strings: Eliminates type coercion surprises
Unquoted keys: Unless potentially ambiguous
Consistent syntax: Always use {} for objects, [] for arrays
Comment support: Unlike JSON, KYAML supports comments
Trailing commas allowed: Reduces diff noise and syntax errors
# Traditional YAML (problematic)
apiVersion: v1
kind: ConfigMap
data:
country: NO # Oops! This becomes boolean false
version: 1.0 # This might become a float
# KYAML (safe)
apiVersion: "v1"
kind: "ConfigMap"
data: {
country: "NO", # Explicitly a string
version: "1.0", # Explicitly a string
}
KYAML remains a strict subset of YAML, ensuring compatibility with existing tooling while providing safety guarantees. You’ll be able to request KYAML output using kubectl get -o kyaml, while all existing YAML and JSON output formats remain available.
Enhanced Memory Management: Memory limits can now be decreased with a NotRequired resize restart policy, with intelligent checks to prevent OOM-kill scenarios during the adjustment. This improvement provides more flexibility in resource management without compromising pod stability.
Better CSI Volume Handling: The kubelet now detects terminal CSI volume mount failures due to exceeded attachment limits and marks stateful pods as Failed, allowing controllers to recreate them. This prevents pods from getting stuck indefinitely in the ContainerCreating state.
Improved Metrics and Observability: New metrics provide better insight into:
User namespace pod creation success/failure rates with started_user_namespaced_pods_total and started_user_namespaced_pods_errors_total
ResourceClaim controller operations with resourceclaim_controller_creates_total and resourceclaim_controller_resource_claims
For Platform Engineers: v1.34 represents a maturation of Kubernetes’ enterprise capabilities. The stability graduation of DRA, tracing, and several beta features means you can confidently build these into your platform abstractions without fear of API churn.
For Security Teams: The ServiceAccount token integration for image pulls represents a significant step toward zero-trust container registries. With this feature moving to beta and enabled by default, it’s time to start planning migration away from long-lived pull secrets.
For FinOps Teams: The combination of beta-level HPA configurable tolerance and alpha-level pod replacement policies provides new levers for balancing performance and cost. These features enable more sophisticated cost optimization strategies.
For Developers: Alpha KYAML support means safer, more maintainable configuration files on the horizon. The stable tracing capabilities will dramatically improve debugging experiences across the development lifecycle.
Kubernetes v1.34 is looking pretty solid, nothing too flashy, but it’s packed with the kind of practical improvements that actually make a difference in day-to-day work. With plenty of enhancements and zero deprecations, it’s one of those rare releases where you don’t have to worry about things breaking when you upgrade. The GPU allocation improvements with DRA are finally ready for prime time, and there are some nice observability upgrades baked right in. When it drops on August 27th, it should be a pretty smooth transition, no hunting down deprecated APIs or scrambling to fix broken deployments. It’s not revolutionary, but sometimes the best releases are the ones that just work without giving you a headache.