2.5 Kubernetes的版本升级

本节讲解Kubernetes的版本升级方面的内容。

2.5.1 二进制文件升级

在进行Kubernetes的版本升级之前,需要考虑不中断正在运行的业务容器的灰度升级方案。常见的做法是:先更新Master上Kubernetes服务的版本,再逐个或批量更新集群中的Node上Kubernetes服务的版本。更新Node的Kubernetes服务的步骤通常包括:先隔离一个或多个Node的业务流量,等待这些Node上运行的Pod将当前任务全部执行完成后,停掉业务应用(Pod),再更新这些Node上的kubelet和kube-proxy版本,更新完成后重启业务应用(Pod),并将业务流量导入新启动的这些Node上,再隔离剩余的Node,逐步完成Node的版本升级,最终完成整个集群的Kubernetes版本升级。

同时,应该考虑高版本的Master对低版本的Node的兼容性问题。高版本的Master通常可以管理低版本的Node,但版本差异不应过大,以免某些功能或API版本被弃用后,低版本的Node无法运行。

◎ 通过官网获取最新版本的二进制包kubernetes.tar.gz,解压后提取服务的二进制文件。

◎ 更新Master的kube-apiserver、kube-controller-manager、kube-scheduler服务的二进制文件和相关配置(在需要修改时更新)并重启服务。

◎ 逐个或批量隔离Node,等待其上运行的全部容器工作完成后停掉Pod,更新kubelet、kube-proxy服务文件和相关配置(在需要修改时更新),然后重启这两个服务。

2.5.2 使用kubeadm进行集群升级

kubeadm提供了upgrade命令用于对kubeadm安装的Kubernetes集群进行升级。这一功能提供了从1.10到1.11、从1.11到1.12、从1.12到1.13及从1.13到1.14升级的能力,本节以从1.13到1.14升级为例进行说明。

升级之前需要注意:

◎ 虽然kubeadm的升级不会触及工作负载,但还是要在升级之前做好备份;

◎ 升级过程中可能会因为Pod的变化而造成容器重启。

继续以CentOS 7环境为例,首先需要升级的是kubeadm:

查看kubeadm的版本:

接下来查看kubeadm的升级计划:

会出现预备升级的内容描述:

按照任务指引进行升级:

输入“y”,确认后开始升级。

运行完成之后,再次查询版本:

可以看到,虽然kubectl还是1.13.2,服务端的控制平面已经升级到了1.14.0,但是查看Node版本,会发现Node版本还是滞后的:

然后可以对节点配置进行升级:

接下来,直接下载新版本的kubectl二进制文件,用其覆盖旧版本的文件来完成kubectl的升级,这样就完成了集群的整体升级: