对由kubeadm安装的kubernetes集群进行升级
kubernetes版本升级应该是一件常见的事情,kubernetes在2015年7月21号发布1.0版本,到今年2019年已经到了1.15版本,而且版本的发布速度越来越快,对于DevOps人员来讲,kubernetes版本升级也就成了一个必备技能。本文会讲述将版本从 v1.10.x
升级到 v1.11.x
。升级主要包含二部分:kubeadm的升级,master节点和node节点上kubernetes 包(kubelet)的升级。
注意事项:
-
不能跨版本升级,只能从一个minor版本升级到下一个minor版本,比如从
v1.10.x
到v1.11.x
,不能从v1.9.x
直接到v1.11.x
。 -
在
v1.11
以后默认的DNS是CoreDNS
而不是kube-dns
,如果升级以后想继续用kube-dns
,则应该是升级的时候添加参数kubeadm upgrade apply v1.11.x --feature-gates=CoreDNS=false
kubeadm 升级
在master节点上,按照如下命令可以完成kubeadm的升级
$ export VERSION=$(curl -sSL https://dl.k8s.io/release/stable.txt)
$ export ARCH=amd64
$ curl -sSL https://dl.k8s.io/release/${VERSION}/bin/linux/${ARCH}/kubeadm > /usr/bin/kubeadm
$ chmod a+rx /usr/bin/kubeadm
这个地方要特别注意,curl -sSL https://dl.k8s.io/release/stable.txt
会获取到kubernetes当前最稳定版本信息,目前为止是 v1.15.0
, 也就是意味着 kubeadm
的版本是 v1.15.0
。如果按照上述方案,升级之后的 kubeadm
是 v1.15.0
,然后在master节点上面执行 kubeadm upgrade plan
会出现如下错误
$ kubeadm upgrade plan
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade/config] FATAL: unexpected error when reading kubeadm-config ConfigMap: ClusterConfiguration key value pair missing
原因是因为 kubeadm
的版本过高,可以通过降低版本来实现。(https://serverfault.com/questions/943696/fatal-unexpected-error-when-reading-kubeadm-config-configmap-clusterconfigurat
)
。我现在的版本是 v1.10.x
我要升级到 v1.11.x
, 在安装 kubeadm
的时候直接指定版本 v1.11.0
就可以解决这个问题
$ curl -sSL https://dl.k8s.io/release/v1