Kubernetes集群升级非常简单,但如果你要升级的版本是一个末位数为0的请慎重,比如你要从v1.15.5升级到v1.16.0。我之前盲目升级导致目前一直有两个坑一个没有填好
- 升级后CronJob的Pod不会自动清理,升级之前自动保留最后三个,即使设置了
successfulJobsHistoryLimit: 3
也无效,发现跟我入坑的还有不少人 - 升级后跑Gitlab-Runner时容器总是经常
command terminated with exit code 137
,升级之前从来没有这个问题,开issue Gitlab团队的人回复目前这个问题无解,尝试给足够多的Resources来减少这种问题的出现,但仍然还是不能完全避免
所以要升级你的Kubernetes到一个新features版本号并且末尾数比较小的版本号之前请仔细考虑可能会入坑,如果不是特别必要请不要随意升级,除非只是升级末尾版本号,比如从v1.16.2升级到v1.16.3这种情况极力推荐。如果你仍然拿不定主义,又想找一个参考请打开GCP控制台Home -> Kubernetes Engine - Cluster -> Create cluster
,在Master version
中有一个下拉菜单,上边列出所有可选择的版本,截止我写这篇短文时最高只能选择1.14.8,而Github上Release已经到v1.16.3
好了,我们继续说升级的事,升级很简单,只需要三步
获取升级计划
在任意一台Master上执行以下命令获取升级计划
kubeadm upgrade plan
在控制台输出的末尾,应该看到类似You can now apply the upgrade by executing the following command:
输出,如我的输出是
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.16.3
Note: Before you can perform this upgrade, you have to update kubeadm to v1.16.3.
我只有一个升级计划就是升级到v1.16.3,也许你的跟我的不一样,请按照实际输出的list中挑一个你想要升级的版本
下载kubeadm
挑好版本之后,需要在升级之前下载好相应版本的kubeadm,根据每个操作系统有不同的下载方法,可以看官方提供的方式下载即可
我的操作系统是CoreOS,并且使用ansible管理节点,所以我直接使用ansible加官方提供的下载脚本很容易就下载好新版本的kubeadm,kubelet和kubectl并部署到所需节点。
执行升级命令
这一步就很简单了,直接执行升级命令就好,升级命令就是在第一步获得的,比如我的升级命令就是kubeadm upgrade apply v1.16.3
。
执行升级命令后通常需要几分钟时间,如果在末尾看到类似[upgrade/successful] SUCCESS! Your cluster was upgraded to "vX.X.X". Enjoy!
就表示成功升级Kubernetes到相应版本了。
注意
这里有个坑,以前我也遇到过,就是你通过第二步下载好新版本的kubeadm并部署到所有节点之后,即使你不执行第三步升级命令,你却能通过kubectl get nodes
获取的列表中看到所有节点已经更新到最新版本了。但实际上这是一个假象,一定要执行第三步才能完成最后的升级,否则你仅仅是更新了那几个二进制程序包,但实际上集群仍然在以旧版本在运行。