Hot For Coding
Kubernetes如何升级

kubernetes

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

full

好了,我们继续说升级的事,升级很简单,只需要三步

获取升级计划

在任意一台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获取的列表中看到所有节点已经更新到最新版本了。但实际上这是一个假象,一定要执行第三步才能完成最后的升级,否则你仅仅是更新了那几个二进制程序包,但实际上集群仍然在以旧版本在运行。

TITLE: Kubernetes如何升级

LINK: https://www.qttc.net/499_kubernetes_how_upgrade.html

NOTE: 转载内容请注明出处