Though I know the steps for upgrade and version compatibility thing,
but still I am confused in choosing the version during cluster upgrade.
High level steps,
- upgrade kubeadm to the version you want(apt-get update && apt-get install -y kubeadm=1.XX.x
- apply the plan (kubeadm upgrade apply 1.XX.x)
- Drain the node (kubectl drain controlplane --ignore-daemonsets)
- upgrade kubectl and kubelet (apt-get update && apt-get install -y kubelet=1.XX.x-00 kubectl=1.XX.x-00)
- uncordon the node back to scheduling state. (kubectl uncordon controlplane)
Please confirm/correct my understanding in below cases
Suppose, the current version in v1.19.0 and we asked to upgrade in following ways
upgrade cluster to v1.20.0 version
upgrade the cluster version on only master node
- When we asked to upgrade the cluster from v1.19.0, I checked the next available
cluster version by running “kubeadm upgrade plan” and, it says v1.19.7
Should I upgrade to v1.19.7 or we should always increase the master version, like in this case upgrade to v1.20.0
- If we have asked to upgrade the cluster to v1.20.0-00, I first ran
apt-get update && apt-get install -y kubeadm=1.20.0-00
Verify the kubeadm version run upgrade plan,
kubeadm upgrade plan – here I noticed and asked to apply 1.20.7 (instead of 1.20.0)
Should I apply the upgrade plan to v1.20.0-00 or v1.20.7 as suggested in upgrade plan?
- For cluster version upgrade on master node, should I upgrade only master components or kubectl and kubelet also (if they are deployed)
following the instructions in the below link from top to bottom is what I would suggest . regarding picking v1.19.7 vs v1.20.0 , you can pick any one according to your requirement , before you start upgrading you should know what version you want to go to , there is no right or wrong here , as long the version you want to upgrade to is not more than one major version . https://v1-20.docs.kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
All controlplane conponents are normlly of same version (kube-apiserver, controller-manager, kube-scheduler, kubectl, kubelet, kube-proxy) Other components in controlplane like(ETCD, CoreDNS) can be of seperate versions. when you upgrade apply v x.x.xx. the control plane components will upgraded to the version you specify stick to the same version for all components to avoid any confusion .
I believe upgrading everything is the correct think to do . as per the Kuberentes documentation link they have instructions to upgrade everything under the page titled “Upgrading kubeadm clusters” . so we can follow the same … and upgrade kubeadm , all compenents including kubelet and kubectl …
Hi @Madhan Kumar, I am following the same document as you shared.
#1, You mentioned,
regarding picking v1.19.7 vs v1.20.0 , you can pick any one according to your requirement
There is no requirement and that is my doubt, wanted to know which version should I pick?
From my opinion, when are not given the targeted version, we should choose the next major version. Need your expert advice
#2, I upgraded kubeadm to 1.20,0, still upgrade plan shows to apply 1.20.7 for controlplane components. So, had a doubt.
But, I think here I should stick to 1.20.0 and would be good.
Also, this discussion raises another doubt
• regarding ETCD. Should we upgrade ETCD if not mentioned?
(I do not think so as their version can be anything or there is a documentation for compatible ETCD version for corresponding apiserver version)
• CoreDNS gets upgraded as part of kubeadm apply. Please correct me if I am wrong.
I’m no expert… … requirement on which version pick should be in the question … if they say upgrade to v 1.20 … then just upgrade to 1.20.0 or 1.20.7 as both are 1.20 … the apply command is just a recommendation… its upto you to decide which version you want to apply …
@Madhan Kumar Thanks for the quick reply, I got my doubt clear about the version selection.
Can you please share your views on ETCD and CoreDNS installation?