经验总结
我的集群是自建的独立 ETCD 集群,然后其他组件全部用 kubeadm 来进行安装的,升级起来比较方便。
一般来说,只有第一台 Master 需要的操作比较多,后续的 Master 和 Node 操作基本相同。如果经常升级的话,倒是可以写一个脚本去做,我因为第一次做 K8S 的升级。不太熟,所以全程手动升级的。
过程中使用 Tmux 进行远程链接安全性的保证。如果因为某些操作中途中断导致升级失败,那麻烦就大了。
升级要求
- 必须在 1.17 以上版本
- 必须使用外部 ETCD
- 切记备份数据
确定目标版本
1 | apt update |
得到最新版本 1.18.2-00
升级主节点集群
开始升级第一个主节点
升级 kubeadm
1 | apt-mark unhold kubeadm && \ |
确认版本
1 | kubeadm version |
清空节点上的容器
1 | kubectl drain <cp-node-name> --ignore-daemonsets |
在需要升级的节点上运行
1 | kubeadm upgrade plan |
选择要升级到的版本,然后运行相应的命令
1 | kubeadm upgrade apply v1.18.2 |
升级完成之后需要升级 kubelet 和 kubectl :
1 | apt-mark unhold kubelet kubectl && \ |
重启 kubelet
1 | systemctl restart kubelet |
取消节点限制策略
1 | kubectl uncordon <cp-node-name> |
升级其他主节点
先升级 kubeadm
1 | apt-mark unhold kubeadm && \ |
然后清空节点:
1 | kubectl drain <cp-node-name> --ignore-daemonsets |
执行升级命令
1 | kubeadm upgrade node |
升级完成之后需要升级 kubelet 和 kubectl :
1 | apt-mark unhold kubelet kubectl && \ |
重启 kubelet
1 | systemctl restart kubelet |
取消节点限制策略
1 | kubectl uncordon <cp-node-name> |
升级工作节点
升级工作节点的步骤与升级其他主节点步骤相同。
其他
网络插件按需升级,我这边暂时没有升级的需求,就没有升级了。