This is a cheat sheet created during the last upgrade of a CentOS-based Kubernetes cluster serving Developer’s Cloud Desktops to our customers. TLDR; style.
The commands are tested on CentOS 7. For Ubuntu, replace
sudo yum install -y kubeadm-1.25.4-00 --disableexcludes=kubernetes
by
sudo apt-mark unhold kubeadm;
sudo apt-get install -y kubeadm=1.25.4-00;
sudo apt-mark hold kubeadm
and similar for kubectl and kubelet.For Ubuntu, you also need to replace
sudo yum list --showduplicates kubeadm --disableexcludes=kubernetes
by
sudo apt-cache madison kubeadm
Please report in the feedback section below, if it does not work in your case.
References
- Upgrading kubeadm clusters
for CKA tests: the document can be found via kubernetes.io –> documentation –> search „upgrade“ –> follow the first hit Upgrade A Cluster | Kubernetes –> search on the page for kubeadm and follow the link Upgrading kubeadm clusters
Step 1: Create Backup
Recommended
Step 2: Upgrade to the latest Hotfix Version
This is an example of how to upgrade to v1.21.12 as the latest hotfix version of v1..21:
# upgrade DEV v1.21.3 to v1.21.12: sudo yum install -y kubeadm-1.21.12-0 --disableexcludes=kubernetes # on all machines (also on the worker nodes, because we need it for pre-downloading the images) sudo kubeadm upgrade plan # master sudo kubeadm config images pull # on all machines sudo kubeadm upgrade apply v1.21.12 # on master sudo kubectl get nodes # if the last command has failed, you might need to configure the correct kube config for root as follows: sudo mkdir -p /root/.kube sudo cp -i /etc/kubernetes/admin.conf /root/.kube/config # drain worker nodes: WORKER_NODE=node1 kubectl drain $WORKER_NODE --ignore-daemonsets --delete-emptydir-data sudo systemctl daemon-reload # on all machines sudo systemctl restart kubelet # on all machines # check kubectl get nodes # enable worker node scheduling: WORKER_NODE=node1 kubectl uncordon $WORKER_NODE
Step 3: Upgrade to the next higher main Version
# upgrade DEV v1.21.12 to v1.22.9: sudo yum install -y kubeadm-1.22.9-0 --disableexcludes=kubernetes # on all machines (also on the worker nodes, because we need it for pre-downloading the images) sudo kubeadm upgrade plan # master sudo kubeadm config images pull # on all machines sudo kubeadm upgrade apply v1.22.9 # on master # check kubectl get nodes # drain worker nodes: WORKER_NODE=node1 kubectl drain $WORKER_NODE --ignore-daemonsets --delete-emptydir-data sudo systemctl daemon-reload # on all machines sudo systemctl restart kubelet # on all machines # check kubectl get nodes sudo kubeadm certs check-expiration # on master # enable worker node scheduling: WORKER_NODE=node1 kubectl uncordon $WORKER_NODE # on master kubectl get nodes