Kubeadm 升級K8S集群 1.20.X 到 1.23.X

一.升级策略

  • 始终保持最新
  •  每半年升级一次,这样会落后社区1~2个小版本
  • 一年升级一次,或者更长,落后版本太多

 

二.注意事项

升级前必须备份所有组件及数据,例如etcd

千万不要跨多个小版本进行升级,例如从1.20升级到1.22(比如现在有1.20,1.21,1.22,不要从1.20到1.22,因为官方对每个API版本的改动只兼容两个小版本,比如从1.20到1.22跨越多个版本,那么可能导致在1.22里面弃用了某个api,或者某个参数,那么原先在1.20当中可以使用的功能在1.22当中导致不可以使用)所以建议一个一个小版本升级,如1.20-->1.21,1.21可以正常使用再到1.22

 

三.升級master節點

1.备份 etcd

mkdir etcd-backup

cd etcd-backup

etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key   --endpoints=10.210.51.110:2379 snapshot save `hostname`-etcd_`date +%Y%m%d%H%M`.db

82481b8813324142aa842614901426f6.png

2.验证备份数据

etcdctl snapshot status k8s-master-01-etcd_202311140836.db --write-out=table

 830dc80a3616454daa07f79144f38753.png

Master 节点都执行一下备份,恢复备份只需恢复其中一个节点的数据即可。 

3.查看当前版本 

[root@k8s-master-02 yum.repos.d]# kubectl get node

8b1900e3087243b2bf99796f14bd41bc.png

4.查找最新版本号  查看kubeadm工具

yum list --showduplicates kubeadm --disableexcludes=kubernetes

2b96214bd1e54f29ae94dcc40113c157.png

 

5.升级kubeadm工具

yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes

6.驱逐node上的pod,且不可调度(除了demosets之外的pod都会驱逐)

kubectl drain k8s-master-02 --ignore-daemonsets

出現以下報錯

60d021af7c0c4f0299069f0edf2dbeb4.png

解決方法:加-delete-emptydir-data 參數

kubectl drain k8s-master-02 --ignore-daemonsets --delete-emptydir-data

 

可能出現這種報錯:

error when evicting pods/"activator-546897c9dd-c2w5s" -n "knative-serving" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

報錯解決方法參考大神博客:https://juejin.cn/post/7257333598470586426

可以看到节点为不可调度,pod不会分配到该节点

ce7eb4dce3174eef917a05c63b54d6db.png

7.检查集群是否可以升级,并获取可以升级的版本

kubeadm upgrade plan

7801ce2877a04cdcb60a36e72299b3c7.png

b4280104331941d6879513e901dba455.png

ea432e0935a545f2a748d1b6e0639ec7.png

8.执行升级  

kubeadm upgrade apply v1.20.15

2fd4aed702bd4c5591024850be17f4c7.png

d7b2c7e24f11428b9ce699f9e6c5ab17.png

3b9ef7396ec9456a8a0695d07af20cb8.png

9.取消不可调度

[root@k8s-master-02 ~]# kubectl uncordon k8s-master-02

node/k8s-master-02 uncordoned

 6be552d8fea34c91ada7730a6b811463.png

10.升级kubelet和kubectl

 yum install -y kubelet-1.20.15 kubectl-1.20.15 --disableexcludes=kubernetes

d88fe86e7dba42bfa98a08047a7df34e.png

62ca09e63eaa4c2781cbb9e07e41e2a8.png

11.重启kubelet

[root@k8s-master-02 ~]# systemctl daemon-reload

[root@k8s-master-02 ~]# systemctl restart kubelet

12.驗證升級結果

kubectl  get node

bdbb7d1913214e48970af236e0898884.png

 

四.升级工作节点

 

1.升级kubeadm (所有node節點上執行)

[root@k8s-node-01 ~]#  yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes

2.驱逐node上的pod,且不可调度(master節點上執行)

[root@k8s-master-01 ~]# kubectl drain k8s-node-01 --ignore-daemonsets --delete-local-data

驅逐所有節點上的pod

7ed9ac1a01784723908cd7d9b9d777c7.png

3.升级kubelet配置

kubeadm upgrade node

b9c482883eb24697a38d2bedfc85b2b3.png

c86191a01075411a90312bd1a31dd3eb.png

34b63b90581645adb2a554b0b4a463fb.png

4.升级kubelet和kubectl  (所有node節點)

yum install -y kubelet-1.20.15 kubectl-1.20.15 --disableexcludes=kubernetes

fc6a245ce146440c936be7e88756c64b.png

5. 重启kubelet

[root@k8s-node-01 ~]# systemctl daemon-reload

[root@k8s-node-01 ~]# systemctl restart kubelet

6.取消不可调度,节点重新上线(在master節點對所有節點執行)

[root@k8s-master-01 ~]# kubectl uncordon k8s-node-01

node/k8s-node-01 uncordoned

[root@k8s-master-01 ~]# kubectl uncordon k8s-node-02

node/k8s-node-02 uncordoned

[root@k8s-master-01 ~]# kubectl uncordon k8s-node-03

node/k8s-node-03 uncordoned

 

7.驗證集群版本

kubectl get node

d6f7182ff94243adb39dfebcb78561b2.png

已成功升級到1.20.15,從1.20.15版本升級到1.21.14版本重新按照以上步驟執行升級即可,升級的順序:

1.20.14——>1.20.15——>1.21.14——>1.22.17——>1.23.17

70a2b96068664d04a9380180aa2c7b66.png

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值