← Back to blog

Kubernetes v1.36: De-risking Cluster Upgrades with the Mixed Version Proxy Beta

kubernetesk8sdevopsorchestrationcloud

Kubernetes v1.36: De-risking Cluster Upgrades with the Mixed Version Proxy Beta

Welcome back to the cutting edge, fellow cloud-native architects and SREs! It’s 2026, and Kubernetes continues its relentless march forward, powering the world’s most critical applications. Yet, one universal truth persists: upgrading a production Kubernetes cluster remains a high-stakes endeavor. We’ve all been there – the careful planning, the white-knuckle execution, the sigh of relief (or dread) as the new control plane spins up.

For years, the “N-2” API skew policy (meaning kubectl can interact with API servers N, N-1, and N-2, and kubelets can talk to API servers N and N-1) has been our guide. While vital for stability, it introduces a tight window during upgrades, often leading to temporary client disruptions, API compatibility headaches, and the ever-present fear of unexpected rollbacks.

But what if we could make those transitions smoother, more resilient, and significantly less stressful? What if we could introduce an intelligent intermediary that bridges the version gaps, making control plane upgrades feel less like a tightrope walk and more like a leisurely stroll?

Enter Kubernetes v1.36 and the groundbreaking Mixed Version Proxy (MVP) Beta. This feature promises to fundamentally transform how we approach cluster upgrades, ushering in an era of unprecedented stability and confidence.

The Upgrade Conundrum: Why It’s Still Hard

Before we dive into the solution, let’s quickly recap why Kubernetes upgrades, particularly the control plane, are so challenging:

  1. API Version Skew: During a rolling upgrade of your kube-apiserver instances, you temporarily have a mix of old and new API server versions running concurrently. Clients (like kubectl, controllers, CI/CD pipelines) might be expecting the old API, while the new API server might have deprecated or removed certain API versions, or introduced new ones.
  2. Client Compatibility: kubectl and other client-side tools adhere to the N-2 compatibility rule. If your client is at N-2, and your cluster upgrades from N-1 to N, that client temporarily falls out of spec. While generally robust, this can lead to unexpected API errors, failed deployments, or broken observability tooling.
  3. Webhook Interoperability: Admission webhooks, mutating webhooks, and validating webhooks are deeply tied to specific API versions. An upgrade can cause subtle misbehaviors if the webhook expects an older API version from the new API server, or vice-versa.
  4. Downtime Pressure: Even with rolling upgrades, the transient period of mixed versions can lead to increased API latency or transient errors, impacting critical applications that rely on constant API availability.
  5. Rollback Complexity: If an upgrade goes awry, rolling back to a previous state is often non-trivial, potentially involving more downtime and data consistency challenges.

The MVP aims to solve these problems by acting as an intelligent traffic cop for your Kubernetes API requests.

Introducing the Mixed Version Proxy (MVP) Beta

The Mixed Version Proxy, currently in Beta for v1.36, is an optional, GVK (Group, Version, Kind)-aware proxy layer designed to sit transparently between your Kubernetes API clients (e.g., kubectl, kube-controller-manager, kube-scheduler, custom operators) and your kube-apiserver instances.

How it Works (The Magic Behind the Scenes):

When MVP is enabled, all API requests from clients are first routed through it. The MVP does not simply forward requests; it intelligently inspects each incoming request’s GVK and determines which kube-apiserver instance in your control plane is best suited to handle it based on its API capabilities.

Imagine an upgrade scenario:

  1. You have three kube-apiserver instances, all running v1.35.
  2. You begin a rolling upgrade to v1.36.
  3. The first kube-apiserver restarts as v1.36. Now you have two v1.35 and one v1.36.
  4. A client makes a request for apps/v1beta1/deployments (a deprecated API in v1.36).
  5. Without MVP, this request might hit the v1.36 API server and immediately fail.
  6. With MVP, the proxy receives the request, identifies apps/v1beta1/deployments as an API group/version still fully supported by the v1.35 API servers but potentially problematic on v1.36. It then intelligently routes that request to one of the still-running v1.35 API servers.
  7. Conversely, if a client makes a request for a brand-new API introduced in v1.36 (e.g., a new field in a Node object), the MVP routes it to the v1.36 API server.

This dynamic routing ensures that API requests always land on an API server that can correctly process them, minimizing disruption during the sensitive upgrade window.

Practical Implementation: Enabling and Leveraging MVP

Enabling MVP in Kubernetes v1.36 is straightforward, typically involving a feature gate and potentially some configuration on your kube-apiserver manifest or via your cluster provisioner.

1. Enabling the Feature Gate:

You’ll need to enable the MixedVersionProxy feature gate on your kube-apiserver instances. This is usually done via the --feature-gates flag.

# Example snippet from a kube-apiserver static pod manifest
# located at /etc/kubernetes/manifests/kube-apiserver.yaml on your control plane nodes

# ... other flags ...
- --feature-gates=MixedVersionProxy=true,APIPriorityAndFairness=true # Ensure other essential features are enabled
- --mixed-version-proxy-listen-port=8080 # MVP runs on a separate port or as an integrated component
- --mixed-version-proxy-backend-servers=https://127.0.0.1:6443 # Points to local API server
# ... other flags ...

Note: The exact configuration for MVP might vary slightly based on its final design. It could run as a sidecar, an init container, or be deeply integrated within the kube-apiserver itself. For v1.36-beta, we anticipate a flexible deployment model. For this example, we assume it’s part of the kube-apiserver process listening on an alternate port or as a dedicated pod.

2. Configuring Clients to Use MVP:

Once MVP is running, you’ll need to direct your clients (like kubectl) to communicate with the MVP’s listening endpoint instead of directly with the kube-apiserver’s default port (usually 6443).

# Example: Modifying your kubeconfig to point to the MVP
kubectl config set-cluster my-prod-cluster --server=https://<MVP_LOADBALANCER_IP>:8080 --kubeconfig=~/.kube/config

In a production environment, you would typically update your cloud load balancer to point to the MVP instances instead of the raw kube-apiserver endpoints. This ensures all traffic is mediated.

3. The Upgrade Workflow with MVP:

Here’s how an upgrade might look with MVP:

  1. Pre-upgrade: Ensure MVP is enabled and all clients are routing through it. Monitor MVP logs and metrics for a baseline.
  2. Phase 1: Control Plane Upgrade:
    • Upgrade the first kube-apiserver instance to v1.36.
    • MVP automatically detects the presence of both v1.35 and v1.36 API servers.
    • Clients continue to make requests as usual; MVP routes them appropriately.
    • Observe API latency and error rates. With MVP, these should remain remarkably stable.
  3. Phase 2: Remaining Control Plane Upgrade:
    • Continue upgrading the remaining kube-apiserver instances.
    • MVP dynamically adjusts its routing decisions as more v1.36 instances become available.
  4. Phase 3: Node Upgrade:
    • Upgrade your worker nodes (kubelets). The MVP doesn’t directly interact with kubelets but ensures the control plane is stable for them.
  5. Post-upgrade: Once all API servers are on v1.36, MVP still acts as a transparent proxy, adding a layer of resilience and potential for future optimizations.

Performance Considerations

Adding an extra hop in the API request path naturally raises concerns about performance. However, the MVP is designed with low latency in mind:

  • Optimized Routing: MVP’s routing logic is highly optimized, using in-memory caches of API server capabilities. The overhead per request is measured in microseconds.
  • Minimal Processing: It only inspects the GVK and potentially basic authentication headers for routing decisions, avoiding deep payload inspection.
  • Scalability: MVP instances are stateless and can be scaled horizontally behind a load balancer, just like kube-apiserver instances.

In most production scenarios, the added latency from MVP is negligible compared to network latency and the processing time within the API server itself. The operational safety gained far outweighs this minimal overhead.

Gotchas and Best Practices

While MVP is a game-changer, it’s not a silver bullet. Keep these in mind:

  • CRDs are Key: MVP’s intelligence extends to Custom Resource Definitions (CRDs). It learns which API servers support which CRD versions. Ensure your CRD upgrade strategy is sound; MVP helps route, but it can’t magically translate incompatible CRD schemas.
  • Webhooks: Your admission controllers and webhooks must still be compatible across the versions you’re transitioning. MVP ensures they can reach an API server, but the webhook’s internal logic needs to handle potential API version differences in the incoming object.
  • Monitoring is Paramount: Implement robust monitoring for your MVP instances (latency, request counts, error rates, routing decisions). This will be crucial for debugging any unexpected behavior during upgrades.
  • Gradual Rollout: As with any new feature, especially one in Beta, test MVP thoroughly in your staging and pre-production environments before enabling it on your critical production clusters.
  • Documentation: Clearly document the MVP’s configuration, its role in your architecture, and any specific upgrade procedures related to it.

Actionable Takeaways for 2026

The Mixed Version Proxy in Kubernetes v1.36 represents a significant leap forward in operational resilience. For organizations striving for true zero-downtime upgrades and simplified cluster lifecycle management, MVP is a must-explore feature.

  • Reduce Upgrade Stress: Say goodbye to frantic kubectl version switching and “client not compatible” errors during an upgrade.
  • Improve API Stability: Maintain consistent API availability even when your control plane is in a mixed-version state.
  • Enable Faster Iteration: With safer upgrades, you can adopt newer Kubernetes versions more frequently, gaining access to the latest features and security patches sooner.
  • Simplify Client Logic: Your custom controllers and operators can continue to expect a stable API endpoint, regardless of the underlying API server versions during an upgrade.

Kubernetes v1.36 is shaping up to be a pivotal release for operational excellence. The Mixed Version Proxy is a testament to the community’s commitment to de-risking the toughest parts of running Kubernetes at scale. Embrace it, test it, and let’s make cluster upgrades a non-event.


Discussion Questions

  1. Beyond the upgrade scenario, can you envision other operational benefits or challenges that a GVK-aware proxy like MVP might introduce for advanced Kubernetes deployments (e.g., multi-tenancy, custom API services)?
  2. Given MVP’s capabilities, how might your organization adjust its internal policies or tooling around Kubernetes version compatibility and upgrade cadence in 2026?

Comments

No comments yet. Be the first!

We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking "OK", you consent to our use of cookies and agree to our Terms of Service & Privacy Policy.