cluster.ninja

Upgrade hop

Kubernetes 1.23 → 1.24

1.23End of lifeEOL 28 Feb 2023 1.24End of lifeEOL 28 Jul 2023

1.24 is itself end of life. If you are on 1.23 today, plan the whole path to a supported version (at least 1.35) with the upgrade planner.

1 · Fix removed APIs first

Only alpha or off-by-default beta versions are removed in this hop.

KindAPI versionStops being servedUse instead
CSIStorageCapacity storage.k8s.io/v1alpha1 alpha · off 1.24 storage.k8s.io/v1
VolumeAttachment storage.k8s.io/v1alpha1 alpha · off 1.24 storage.k8s.io/v1

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.24

  • Dockershim was removed from the kubelet; Docker Engine users need cri-dockerd or a move to another CRI runtime.
  • Dynamic Kubelet Configuration was removed from the kubelet (deprecated in 1.22); removal from the API server was planned for 1.26.
  • The VolumeSnapshot v1beta1 CRD, deprecated in 1.20, is no longer supported; use the v1 snapshot API.
  • kubeadm stops adding the node-role.kubernetes.io/master label to control-plane nodes in new clusters; only the control-plane label is applied.

Deprecated in 1.24

  • With CSIStorageCapacity reaching stable, its storage.k8s.io/v1beta1 version enters deprecation.

Our summary of the 1.24 release announcement (CC BY 4.0). Read the full changelog for your components.

3 · Upgrade in this order

  1. Prepare. Move every node to 1.22 or newer if any are older: a 1.24 API server supports kubelets back to 1.22 only. Upgrade to the newest 1.23 patch, 1.23.17.
  2. kube-apiserver to 1.24 (in HA clusters, one instance at a time; old and new may differ by one minor during the roll). Use the newest patch, 1.24.17.
  3. kube-controller-manager, kube-scheduler, cloud-controller-manager to 1.24, once every API server is on 1.24.
  4. kubelet on each node (drain first). Optional in this hop: kubelets from 1.22 to 1.24 all work with a 1.24 control plane.
  5. kube-proxy: no newer than the API server, and within the same window as the kubelet it runs beside.
  6. kubectl: 1.23 to 1.25 all talk to a 1.24 API server.

From the official version skew policy. Managed services run the control-plane steps for you; node pools are still yours to schedule.