专栏首页千里行走kubernetes-26:升级kubeadm版本—从v1.13.3升级到v1.19.3

kubernetes-26:升级kubeadm版本—从v1.13.3升级到v1.19.3

kubeadm升级前版本:v1.13.3

kubeadm version

本文要升级到最新版:v1.19.3

目录:

(1).kubernetes从v1.13.3升级到v1.14.0

(2).kubernetes从v1.14.0升级到v1.15.0

(3).kubernetes从v1.15.0升级到v1.16.0

(4).kubernetes从v1.16.0升级到v1.17.0

(5).kubernetes从v1.17.0升级到v1.18.0

(6).kubernetes从v1.18.0升级到v1.19.3

(7).参考文章

(1).kubernetes从v1.13.3升级到v1.14.0

kubeadm upgrade plan

检查可升级到哪些版本,并验证您当前的集群是否可升级。

执行:kubeadm upgrade plan

最新版本是v1.19.3。

执行下述命令获得版本升级命令:kubeadm upgrade plan v1.19.3

可以从上图中看出当前版本和最新版本的差异,以及升级操作。

执行kubeadm升级命令:kubeadm upgrade apply v1.19.3

可以看到,版本差距太大,不允许升级。一个个版本升吧。

Specified version to upgrade to "v1.14.1" is at least one minor release higher than the kubeadm minor release (14 > 13). Such an upgrade is not supported

先安装kubeadm的yum源,因为k8s官网给的yum源是packages.cloud.google.com,国内访问不了,此时我们可以使用阿里云的yum仓库镜像。

阿里云上没有附Help说明连接,简单摸索了下,如下设置可用(centos)。注意不要开启check。

建立文件:/etc/yum.repos.d/kubernetes.repo

保存如下内容

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

找到最新的稳定版 1.14:

yum list --showduplicates kubeadm --disableexcludes=kubernetes

我选择version=1.14.0-0,因为我最终要升级到最新版本v1.19.1,所以无所谓1.14是哪个小版本号。

升级 kubeadm :

yum install -y kubeadm-1.14.0-0 --disableexcludes=kubernetes

查看版本验证升级成功:

kubeadm version

从集群中移除要升级的节点:

kubectl drain future --ignore-daemonsets

(future是当前节点名称,通过kubectl get nodes获得)

执行后提示失败,因为当前node有挂载localPV:

增加参数再次执行,成功:

kubectl drain future --ignore-daemonsets --delete-local-data=true

再次kubect get nodes,可以看到:

kubectl get pods --all-namespaces:可以看到coredns是Pending,说明已经被完全隔离。

必须执行drain,否则kubeadm upgrade会执行失败,报如下类似错误:

Failed to upgrade etcd: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced。

升级需要如下image,墙原因需要曲线下载(或者vpn):

k8s.gcr.io/etcd:3.3.10

k8s.gcr.io/kube-apiserver:v1.14.0

k8s.gcr.io/kube-controller-manager:v1.14.0

k8s.gcr.io/kube-scheduler:v1.14.0

k8s.gcr.io/coredns:1.3.1

我是曲线下载:

docker pull mirrorgooglecontainers/etcd:3.3.10

docker pull mirrorgooglecontainers/kube-apiserver:v1.14.0

docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.0

docker pull mirrorgooglecontainers/kube-scheduler:v1.14.0

docker pull coredns/coredns:1.3.1

然后重命名:

docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10

docker tag mirrorgooglecontainers/kube-apiserver:v1.14.0 k8s.gcr.io/kube-apiserver:v1.14.0

docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.0 k8s.gcr.io/kube-controller-manager:v1.14.0

docker tag mirrorgooglecontainers/kube-scheduler:v1.14.0 k8s.gcr.io/kube-scheduler:v1.14.0

docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

升级kubeadm k8s cluster版本:

kubeadm upgrade apply v1.14.0

发现一直停在这里,kubectl get nodes,发现节点处在不可调度状态:

需要将worknode的unschedulable改为ture,这样让节点可以被集群调度。

kubectl patch node future -p "{\"spec\":{\"unschedulable\":false}}"

集群OK:

kubeadm upgrade升级成功信息:

要重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

重启后发现cluster变成notReady,查看原因:kubectl describe node future

需要禁用CSIMigration属性:

在/var/lib/kubelet/config.yaml配置文件中添加以下配置

featureGates:

CSIMigration: false

然后重启:

systemctl daemon-reload

systemctl restart kubelet

然后我们依次一个个版本升级,最终升级到kubeadm最新版本1.19.3.

(2).kubernetes从v1.14.0升级到v1.15.0

yum install -y kubeadm-1.15.0-0 --disableexcludes=kubernetes

升级需要如下image,墙原因需要曲线下载(或者vpn):

k8s.gcr.io/kube-proxy:v1.15.0

k8s.gcr.io/kube-apiserver:v1.15.0

k8s.gcr.io/kube-controller-manager:v1.15.0

k8s.gcr.io/kube-scheduler:v1.15.0

我是曲线下载:

docker pull mirrorgooglecontainers/kube-proxy:v1.15.0

docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0

docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0

docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0

然后重命名:

docker tag mirrorgooglecontainers/kube-proxy:v1.15.0 k8s.gcr.io/kube-proxy:v1.15.0

docker tag mirrorgooglecontainers/kube-apiserver:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0

docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.0 k8s.gcr.io/kube-controller-manager:v1.15.0

docker tag mirrorgooglecontainers/kube-scheduler:v1.15.0 k8s.gcr.io/kube-scheduler:v1.15.0

升级kubernetes集群到v1.15.0

kubeadm upgrade apply v1.15.0

重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

重启后发现cluster变成notReady,查看原因:kubectl describe node future

需要禁用CSIMigration属性:

在/var/lib/kubelet/config.yaml配置文件中添加以下配置

featureGates:

CSIMigration: false

然后重启:

systemctl daemon-reload

systemctl restart kubelet

(3).kubernetes从v1.15.0升级到v1.16.0

yum install -y kubeadm-1.16.0-0 --disableexcludes=kubernetes

升级需要如下image,墙原因需要曲线下载(或者vpn):

k8s.gcr.io/etcd:3.3.15-0

k8s.gcr.io/kube-apiserver:v1.16.0

k8s.gcr.io/kube-controller-manager:v1.16.0

k8s.gcr.io/kube-scheduler:v1.16.0

k8s.gcr.io/kube-proxy:v1.16.0

k8s.gcr.io/coredns:1.6.2

我是曲线下载:

docker pull mirrorgooglecontainers/etcd:3.3.15-0

docker pull kubesphere/kube-apiserver:v1.16.0

docker pull kubesphere/kube-controller-manager:v1.16.0

docker pull kubesphere/kube-scheduler:v1.16.0

docker pull kubesphere/kube-proxy:v1.16.0

docker pull coredns/coredns:1.6.2

然后重命名:

docker tag mirrorgooglecontainers/etcd:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0

docker tag kubesphere/kube-apiserver:v1.16.0 k8s.gcr.io/kube-apiserver:v1.16.0

docker tag kubesphere/kube-controller-manager:v1.16.0 k8s.gcr.io/kube-controller-manager:v1.16.0

docker tag kubesphere/kube-scheduler:v1.16.0 k8s.gcr.io/kube-scheduler:v1.16.0

docker tag kubesphere/kube-proxy:v1.16.0 k8s.gcr.io/kube-proxy:v1.16.0

docker tag coredns/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2

升级kubernetes集群到v1.16.0

kubeadm upgrade apply v1.16.0

提示error:

官方issue提示可以忽略:https://github.com/kubernetes/kubernetes/issues/82889

再次执行升级操作,增加参数忽略:

kubeadm upgrade apply v1.16.0 --ignore-preflight-errors=CoreDNSUnsupportedPlugins

重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

重启后发现cluster变成notReady,查看原因:kubectl describe node future

需要禁用CSIMigration属性:

在/var/lib/kubelet/config.yaml配置文件中添加以下配置

featureGates:

CSIMigration: false

然后重启:

systemctl daemon-reload

systemctl restart kubelet

1.16.0升级完成:

(4).kubernetes从v1.16.0升级到v1.17.0

yum install -y kubeadm-1.17.0-0 --disableexcludes=kubernetes

升级需要如下image,墙原因需要曲线下载(或者vpn):

docker pull gotok8s/etcd:3.4.3-0

k8s.gcr.io/kube-apiserver:v1.17.0

k8s.gcr.io/kube-controller-manager:v1.17.0

k8s.gcr.io/kube-scheduler:v1.17.0

k8s.gcr.io/kube-proxy:v1.17.0

k8s.gcr.io/coredns:1.6.5

我是曲线下载:

docker pull gotok8s/etcd:3.4.3-0

docker pull kubesphere/kube-apiserver:v1.17.0

docker pull kubesphere/kube-controller-manager:v1.17.0

docker pull kubesphere/kube-scheduler:v1.17.0

docker pull kubesphere/kube-proxy:v1.17.0

docker pull coredns/coredns:1.6.5

然后重命名:

docker tag gotok8s/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0

docker tag kubesphere/kube-apiserver:v1.17.0 k8s.gcr.io/kube-apiserver:v1.17.0

docker tag kubesphere/kube-controller-manager:v1.17.0 k8s.gcr.io/kube-controller-manager:v1.17.0

docker tag kubesphere/kube-scheduler:v1.17.0 k8s.gcr.io/kube-scheduler:v1.17.0

docker tag kubesphere/kube-proxy:v1.17.0 k8s.gcr.io/kube-proxy:v1.17.0

docker tag coredns/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5

升级kubernetes集群到v1.17.0

kubeadm upgrade apply v1.17.0

重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

完成1.17.0的升级:

没有提示CSIMigration错误,是因为,这个功能从1.17.0开始存在,所以不用禁用。

(5).kubernetes从v1.17.0升级到v1.18.0

yum install -y kubeadm-1.18.0-0 --disableexcludes=kubernetes

升级需要如下image,墙原因需要曲线下载(或者vpn):

k8s.gcr.io/kube-apiserver:v1.18.0

k8s.gcr.io/kube-controller-manager:v1.18.0

k8s.gcr.io/kube-scheduler:v1.18.0

k8s.gcr.io/kube-proxy:v1.18.0

k8s.gcr.io/coredns:1.6.7

我是曲线下载:

docker pull gotok8s/kube-apiserver:v1.18.0

docker pull gotok8s/kube-controller-manager:v1.18.0

docker pull gotok8s/kube-scheduler:v1.18.0

docker pull gotok8s/kube-proxy:v1.18.0

docker pull gotok8s/coredns:1.6.7

然后重命名:

docker tag gotok8s/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0

docker tag gotok8s/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0

docker tag gotok8s/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0

docker tag gotok8s/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0

docker tag gotok8s/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

升级kubernetes集群到v1.18.0

kubeadm upgrade apply v1.18.0

重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

完成1.18.0的升级:

没有提示CSIMigration错误,是因为,这个功能从1.17.0开始存在,所以不用禁用。

(6).kubernetes从v1.18.0升级到v1.19.3

yum install -y kubeadm-1.19.3-0 --disableexcludes=kubernetes

升级需要如下image,墙原因需要曲线下载(或者vpn):

k8s.gcr.io/kube-apiserver:v1.19.3

k8s.gcr.io/kube-controller-manager:v1.19.3

k8s.gcr.io/kube-scheduler:v1.19.3

k8s.gcr.io/kube-proxy:v1.19.3

k8s.gcr.io/pause:3.2

k8s.gcr.io/etcd:3.4.13-0

k8s.gcr.io/coredns:1.7.0

我是曲线下载:

docker pull gotok8s/kube-apiserver:v1.19.3

docker pull gotok8s/kube-controller-manager:v1.19.3

docker pull gotok8s/kube-scheduler:v1.19.3

docker pull gotok8s/kube-proxy:v1.19.3

docker pull gotok8s/pause:3.2

docker pull gotok8s/etcd:3.4.13-0

docker pull gotok8s/coredns:1.7.0

然后重命名:

docker tag gotok8s/kube-apiserver:v1.19.3 k8s.gcr.io/kube-apiserver:v1.19.3

docker tag gotok8s/kube-controller-manager:v1.19.3 k8s.gcr.io/kube-controller-manager:v1.19.3

docker tag gotok8s/kube-scheduler:v1.19.3 k8s.gcr.io/kube-scheduler:v1.19.3

docker tag gotok8s/kube-proxy:v1.19.3 k8s.gcr.io/kube-proxy:v1.19.3

docker tag gotok8s/pause:3.2 k8s.gcr.io/pause:3.2

docker tag gotok8s/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0

docker tag gotok8s/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0

升级kubernetes集群到v1.19.3

kubeadm upgrade apply v1.19.3

重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

完成本次升级目的:升级到最新版本1.19.3。

没有提示CSIMigration错误,是因为,这个功能从1.17.0开始存在,所以不用禁用。

(7).参考文章

1.kubeadm upgrade

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/

2.升级 kubeadm 集群

https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

3.kubeadm的yum和apt国内源

https://www.jianshu.com/p/4b5f960a5bea

本文分享自微信公众号 - 千里行走(a_thousands_of_miles),作者:千里行走

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • kubernetes-32:升级kubernetes集群之从v1.19.3升级到v1.20.2

    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

    千里行走
  • 使用kubeadm创建生产就绪的Kubernetes集群

    作者:LucasKäldström(CNCF大使)和Luc Perkins(CNCF开发者倡导者)

    CNCF
  • kubernetes-1:使用kubeadm搭建K8S单master节点集群

    现在官方推荐的是kubespray,但也是基于kubeadm;除此之外,还有kind,minikube,但是并不试用于部署生产级别集群。

    千里行走
  • 更新一个10年有效期的 Kubernetes 证书

    使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题,本文的演...

    我是阳明
  • 回顾 Kubernetes 最近 6 个版本重点更新

    Kubernetes 项目的首次 commit 发生在 2014 年 6 月 6 日,自 2016 年 3 月 10 日加入 CNCF,到目前为止,Kubern...

    我的小碗汤
  • 使用kubeadm平滑地升级kubenetes集群(v1.10.2到v1.10.3)

    kubernetes是目前最炙手火热的容器管理、调度、编排平台,不仅拥有全面的生态系统,而且还开源、开放自治,谁贡献的多,谁的话语权就大,云提供商都有专门的工程...

    justmine
  • kubernetes系列教程(四)离线升级kubernetes集群

    kubernetes版本升级迭代非常快,每三个月更新一个版本,很多新的功能在新版本中快速迭代,为了与社区版本功能保持一致,升级kubernetes集群,社区...

    HappyLau谈云计算
  • Kubeadm多master集群升级k8s版本

    版本说明 本次升级版本为从1.15.3升级至1.16.3。另外更高的k8s版本,要注意内核要为4.4以上,尤其是1.18版本。

    院长技术
  • kubeadm多master集群升级k8s版本

    本次升级版本为从1.15.3升级至1.16.3。另外更高的k8s版本,要注意内核要为4.4以上,尤其是1.18版本。

    SY小站

扫码关注云+社区

领取腾讯云代金券