First, upgrade the control plane node
Drain the control plane node.
kubectl drain master-node-name --ignore-daemonsets
Upgrade kubeadm.
sudo apt-get update && \
sudo apt-get install -y --allow-change-held-packages kubeadm=version
kubeadm version
Plan the upgrade.
sudo kubeadm upgrade plan v-version (for example v1.24.2)
Upgrade the control plane components.
sudo kubeadm upgrade apply v1.22.2
Upgrade kubelet and kubectl on the control plane node.
sudo apt-get update && \
sudo apt-get install -y --allow-change-held-packages kubelet=version kubectl=version
Restart kubelet.
sudo systemctl daemon-reload
sudo systemctl restart kubelet
Uncordon the control plane node.
kubectl uncordon master-node-name
Verify that the control plane is working
Note:- you should not perform upgrades on all worker nodes at the same time. Make sure enough nodes are available at any given time to provide uninterrupted service.
Worker nodes
Run the following on the control plane node to drain worker node 1:
kubectl drain worker1-node-name --ignore-daemonsets --force
Log in to the first worker node, then Upgrade kubeadm.
sudo apt-get update && \ sudo apt-get install -y --allow-change-held-packages kubeadm=version
Upgrade the kubelet configuration on the worker node.
sudo kubeadm upgrade node
Upgrade kubelet and kubectl on the worker node.
sudo apt-get update && \ sudo apt-get install -y --allow-change-held-packages kubelet=version kubectl=verion
Restart kubelet.
sudo systemctl daemon-reload
sudo systemctl restart kubelet
From the control plane node, uncordon worker node 1.
kubectl uncordon worker1-node-name
Repeat the upgrade process for worker nodes.
Cheers
Osama