Kubernetes 升級過程記錄:從 1.17.0 升級至最新版 1.20.2


本文記錄的是將 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。

先在 control plane node 上進行升級操作,通過下面的命令查看最新版 kubeadm 的版本號

apt update
apt-cache madison kubeadm

最新版是 1.20.2-00,用下面的命令安裝最新版 kubeadm

apt-get update && \
apt-get install -y --allow-change-held-packages kubeadm=1.20.2-00 

然后查看升級計划

kubeadm upgrade plan

提示無法直接升級1.20.2

[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.0

apt-get update && \
apt-get install -y --allow-change-held-packages --allow-downgrades kubeadm=1.19.0-00 

查看升級計划1.19.0

[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.0

apt-get update && \
apt-get install -y --allow-change-held-packages --allow-downgrades kubeadm=1.18.0-00 

查看升級計划

kubeadm upgrade plan

啟動升級操作

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

各個 node 升級 kubelet、kubectl、kubeadm 至 1.20.2

apt-get install -y --allow-change-held-packages kubelet=1.20.2-00 kubectl=1.20.2-00 kubeadm=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

升級過程中遇到的問題

我們在 coredns 配置中使用了 rewrite answer ,升級時出現下面的錯誤提示

[preflight] Some fatal errors occurred:
	[ERROR CoreDNSUnsupportedPlugins]: CoreDNS cannot migrate the following plugins:
[Option "answer" in plugin "rewrite" is unsupported by this migration tool in 1.6.5. Option "answer" 

通過 plan --ignore-preflight-errors 參數忽略了這個錯誤

kubeadm upgrade plan --ignore-preflight-errors=CoreDNSUnsupportedPlugins

所以升級后 coredns 的配置沒有遷移過來,需要在升級前導出 coredns 的 ConfigMap

kubectl get cm coredns -n kube-system -o yaml > coredns_cm.yaml

然后在升級后替換 coredns 的配置

kubectl replace -n kube-system -f coredns_cm.yaml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM