在之前的文章 kubeadm部署1.17集群 中部署了一个1.17版本的集群,这次对这个集群进行升级。
更新于 2021-04-13
检查 kubeadm 可用版本
1 | yum list kubeadm --showduplicates |

这里我们当前的版本为1.17,下面升级到1.18.0。
升级 kubeadm
建议一台一台升级,批量操作存在无法预估的错误。这里先升级第一台master的kubeadm。
1 | yum install -y kubeadm-1.18.0-0 |
隔离 master1
先将master1隔离,使用drain
命令可以优雅地结束节点的pod并将节点设置为不可调度:
1 | kubectl drain sca-lum700007 --ignore-daemonsets |

看到第一个master已经处于不可调度的状态了。
升级 kubernetes
1 | kubeadm upgrade apply v1.18.0 |
当出现下面的输出内容时,表示命令执行成功了。
取消隔离master1
1 | kubectl uncordon sca-lum700007 |
升级 kubectl 和 kubelet
1 | yum install -y kubelet-1.18.0-0 kubectl-1.18.0-0 |
重启kubelet
1 | systemctl daemon-reload |
确认节点升级成功
1 | kubectl get node |

可以看到第一个节点已经升级成为1.18.0版本的了。后续几个master节点也是按照上边的步骤升级
升级node节点
node节点的升级最好也是一个一个来,首先将node节点驱逐:
1 | kubectl drain sca-lum700013 --ignore-daemonsets |
然后在节点上执行下面的命令,升级kubernetes:
1 | kubeadm upgrade node |
在master上取消禁止调度:
1 | kubectl uncordon sca-lum00013 |
升级worker节点上的kubelet:
1 | yum install -y kubelet-1.18.0-0 |
注意事项
需要注意的是:
- 跨多个版本升级需要注意,最好不要一次升上去,防止出现问题;
- 升级的时候先从master开始,再升级worker;
- 升级的时候一个一个节点的进行,要先驱逐节点的pod并设置为不可调度;
最后,所有的节点都升级完毕:
