Upgrade hop
Kubernetes 1.28 → 1.29
1.29 is itself end of life. If you are on 1.28 today, plan the whole path to a supported version (at least 1.35) with the upgrade planner.
1 · Fix removed APIs first
2 kinds stop being served in 1.29. Update manifests, charts and controllers to the replacement versions while the cluster still runs 1.28: the replacements are already served there.
| Kind | API version | Stops being served | Use instead |
|---|---|---|---|
| FlowSchema | flowcontrol.apiserver.k8s.io/v1beta2 | 1.29 | flowcontrol.apiserver.k8s.io/v1 |
| PriorityLevelConfiguration | flowcontrol.apiserver.k8s.io/v1beta2 | 1.29 | flowcontrol.apiserver.k8s.io/v1 |
Field-level changes for each of these are on the API pages and in the official Deprecated API Migration Guide.
Check your files with the manifest checker; in a live cluster, the API server metric apiserver_requested_deprecated_apis shows which deprecated APIs clients still call.
2 · Other changes that can bite
Removed in 1.29
- flowcontrol.apiserver.k8s.io/v1beta2 FlowSchema and PriorityLevelConfiguration are no longer served; update manifests and clients before upgrading.
- Built-in cloud provider integrations are disabled by default; opting back in via feature gates is still possible.
Deprecated in 1.29
- The Node field status.nodeInfo.kubeProxyVersion is deprecated because the kubelet sets it without knowing the real kube-proxy version.
Our summary of the 1.29 release announcement (CC BY 4.0). Read the full changelog for your components.
3 · Upgrade in this order
- Prepare. Move every node to 1.26 or newer if any are older: a 1.29 API server supports kubelets back to 1.26 only. Upgrade to the newest 1.28 patch,
1.28.15. - kube-apiserver to 1.29 (in HA clusters, one instance at a time; old and new may differ by one minor during the roll). Use the newest patch,
1.29.15. - kube-controller-manager, kube-scheduler, cloud-controller-manager to 1.29, once every API server is on 1.29.
- kubelet on each node (drain first). Optional in this hop: kubelets from 1.26 to 1.29 all work with a 1.29 control plane.
- kube-proxy: no newer than the API server, and within the same window as the kubelet it runs beside.
- kubectl: 1.28 to 1.30 all talk to a 1.29 API server.
From the official version skew policy. Managed services run the control-plane steps for you; node pools are still yours to schedule.