本文記錄的是將 kubernetes 集羣從 1.17.0 升級至最新版 1.20.2 的實際操做步驟,因爲 1.17.0 沒法直接升級到 1.20.2,須要進行2次過濾升級,1.17.0 -> 1.18.0 -> 1.19.0 -> 1.20.2。node
先在 control plane node 上進行升級操做,經過下面的命令查看最新版 kubeadm 的版本號app
apt update apt-cache madison kubeadm
最新版是 1.20.2-00
,用下面的命令安裝最新版 kubeadmthis
apt-get update && \ apt-get install -y --allow-change-held-packages kubeadm=1.20.2-00
而後查看升級計劃rest
kubeadm upgrade plan
提示沒法直接升級1.20.2code
[upgrade/config] FATAL: this version of kubeadm only supports deploying clusters with the control plane version >= 1.19.0. Current version: v1.17.0
因而嘗試先升級到 1.19.0get
apt-get update && \ apt-get install -y --allow-change-held-packages --allow-downgrades kubeadm=1.19.0-00
查看升級計劃1.19.0kubernetes
[upgrade/config] FATAL: this version of kubeadm only supports deploying clusters with the control plane version >= 1.18.0. Current version: v1.17.0
只能先升級到1.18.0it
apt-get update && \ apt-get install -y --allow-change-held-packages --allow-downgrades kubeadm=1.18.0-00
查看升級計劃io
kubeadm upgrade plan
啓動升級操做ast
kubeadm upgrade apply v1.18.0
集羣成功升級至 1.18.0
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.0". Enjoy! [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
分別在 control plane node 與 worker node 上 將 kubelet 和 kubectl 升級至 1.18.0(若是是生產環境,在升級以前先 uncordon 要升級的節點)
apt-get update && \ apt-get install -y --allow-change-held-packages kubelet=1.18.0-00 kubectl=1.18.0-00 systemctl daemon-reload && systemctl restart kubelet
繼續,向 1.19.0 升級!
升級 kubeadm 至 1.19.0
apt-get install -y --allow-change-held-packages --allow-downgrades kubeadm=1.19.0-00
升級集羣至 1.19.0
kubeadm upgrade plan kubeadm upgrade apply v1.19.0
升級 kubelet 和 kubectl 至 1.19.0
apt-get install -y --allow-change-held-packages kubelet=1.19.0-00 kubectl=1.19.0-00 systemctl daemon-reload && systemctl restart kubelet
衝刺,向最新版升級!
升級 kubeadm 至 1.20.2
apt-get install -y --allow-change-held-packages kubeadm=1.20.2-00
升級集羣至 1.20.2
kubeadm upgrade plan kubeadm upgrade apply v1.20.2
升級 kubelet 和 kubectl 至 1.20.2
apt-get install -y --allow-change-held-packages kubelet=1.20.2-00 kubectl=1.20.2-00 systemctl daemon-reload && systemctl restart kubelet
勝利,升級成功!
NAME STATUS ROLES AGE VERSION k8s-master0 Ready control-plane,master 371d v1.20.2 kube-node1 Ready <none> 2d15h v1.20.2 kube-node2 Ready <none> 38h v1.20.2 kube-node3 Ready <none> 17h v1.20.2