Chapter 4. Upgrading Kubernetes Cluster with kubeadm

Shivani Singh
2 min readAug 31, 2021
picture_credits

Hello Everyone!
This chapter is about upgrading the Kubernetes cluster with kubeadm.
So let's get started.

Steps to upgrade the control plane:

1. Upgrade kubeadm:

[user@k8s-control]$ sudo apt-get update && \ sudo apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00

Check for the upgraded version:

[user@k8s-control]$ kubeadm version

2. Drain the control plane node:

[user@k8s-control]$ kubectl drain k8s-control --ignore-daemonsets

3. Run the plan for upgrade:

[user@k8s-control]$ sudo kubeadm upgrade plan v1.21.1

4. Upgrade the control plane components:

[user@k8s-control]$ sudo kubeadm upgrade apply v1.21.1

5. Upgrade kubelet and kubectl on the control plane node:

[user@k8s-control]$ sudo apt-get update && \ sudo apt-get install -y --allow-change-held-packages kubelet=1.21.1-00 kubectl=1.21.1-00

6. Restart kubelet:

[user@k8s-control]$ sudo systemctl daemon-reload

[user@k8s-control]$ sudo systemctl restart kubelet

7. Uncordon the control plane node:

[user@k8s-control]$ kubectl uncordon k8s-control

8. Verify the control plane is working:

[user@k8s-control]$ kubectl get nodes

Note: If it shows a NotReady status, run the command again after a minute or so. It should become Ready.

Steps to upgrade the worker node:

Note: In a real-world scenario, 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.

1. Run the following on the control plane node to drain the worker node :

[user@k8s-control]$ kubectl drain k8s-worker1 --ignore-daemonsets --force

You may get an error message that certain pods couldn’t be deleted, which is fine.

2. In a new terminal window, log in to the worker node and perform the following:

3. Upgrade kubeadm on the worker node

[user@k8s-worker1]$ sudo apt-get update && \ sudo apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00
[user@k8s-worker1]$ kubeadm version

4. Back on a worker node, upgrade the kubelet configuration on the worker node:

[user@k8s-worker1]$ sudo kubeadm upgrade node

5. Upgrade kubelet and kubectl on worker node:

[user@k8s-worker1]$ sudo apt-get update && \ sudo apt-get install -y --allow-change-held-packages kubelet=1.21.1-00 kubectl=1.21.1-00

6. Restart kubelet:

[user@k8s-worker1]$ sudo systemctl daemon-reload
[user@k8s-worker1]$ sudo systemctl restart kubelet

7. From the control plane node, uncordon worker node:

[user@k8s-control]$ kubectl uncordon k8s-worker

8. Still, in the control plane node, verify the cluster is upgraded and working:

[user@k8s-control]$ kubectl get nodes

If they show a NotReady status, run the command again after a minute or so. They should become Ready.

P.S : You can read the previous chapters by clicking below:
Introduction to k8s
K8s Architecture
Lab to create k8s cluster

Hope you will find this helpful!
See you in next Chapter!
Happy Learning!
Shivani S.

--

--

Shivani Singh

DevOps Engineer, Passionate for new tools and Technology!