K8sCalc

kubernetes

Kubernetes Upgrade Path Planner

Plan your Kubernetes upgrade path from any version to any version. Kubernetes only allows upgrading one minor version at a time — calculate the number of hops and total time estimate.

Kubernetes Version Upgrade Strategy

Kubernetes releases 3 minor versions per year and supports the 3 most recent minor versions. Staying within the supported window means upgrading at minimum once per year.

Why One Minor Version at a Time

Each Kubernetes minor version may remove deprecated APIs that were available in the previous version. The API deprecation policy gives 2 releases of notice, but skipping versions risks hitting a removed API that breaks your workloads on the new apiserver.

Pre-Upgrade Checklist

  1. 1.Check deprecated APIs: pluto detect-helm -A
  2. 2.Back up etcd: etcdctl snapshot save backup.db
  3. 3.Read the release notes for each version in your path
  4. 4.Verify addon compatibility (CNI, CSI, ingress controller)
  5. 5.Test upgrade on a staging cluster first

kubeadm Upgrade Commands

bash
# On first control plane
apt-get install kubeadm=1.30.0-1.1
kubeadm upgrade apply v1.30.0

# On remaining control planes kubeadm upgrade node

# On each worker (after draining) apt-get install kubeadm=1.30.0-1.1 kubelet=1.30.0-1.1 kubectl=1.30.0-1.1 kubeadm upgrade node systemctl restart kubelet ```

Version Skew Policy

  • kubectl can be ±1 minor version from apiserver
  • kubelet must be ≤ apiserver version (never newer)
  • kube-proxy must match kubelet version
  • etcd: any version compatible with the K8s minor version (check release notes)

Cluster Add-on Compatibility

Check your CNI (Calico, Cilium, Flannel), CSI driver, ingress controller, and cert-manager compatibility matrix for the target K8s version before upgrading.

Frequently Asked Questions

Can I skip Kubernetes minor versions when upgrading?

No. Kubernetes only supports upgrading one minor version at a time (e.g., 1.28 → 1.29 → 1.30). Skipping versions is unsupported and will likely cause apiserver admission failures due to removed API versions.

How long does a Kubernetes upgrade take?

A single control plane upgrade takes ~20–30 minutes (package install + kubeadm upgrade apply). Each worker node takes ~10 minutes (drain + upgrade + uncordon). A 3-worker cluster per hop = ~50 minutes per minor version. Plan 4 hours for a 4-hop upgrade with testing time.

What is the upgrade order for kubeadm clusters?

1. Upgrade the first control plane node (kubeadm upgrade apply). 2. Upgrade remaining control plane nodes (kubeadm upgrade node). 3. Upgrade each worker node: drain → upgrade kubelet/kubectl → uncordon. 4. Verify cluster health. Never upgrade workers before control planes.

How do I check for deprecated APIs before upgrading?

Use `kubectl deprecations` (from the kubectl-deprecations plugin) or Pluto (by Fairwinds): `pluto detect-helm -A`. This shows which of your deployed resources use APIs that are removed in the target version.

Related Tools

Related Guides