前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes-32:升级kubernetes集群之从v1.19.3升级到v1.20.2

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

作者头像
千里行走
发布2021-02-02 10:56:23
8310
发布2021-02-02 10:56:23
举报
文章被收录于专栏:千里行走

kubeadm升级前版本:v1.19.3

kubeadm version

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

kubeadm upgrade plan

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

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

建立repo文件:

/etc/yum.repos.d/kubernetes.repo

内容如下:

[kubernetes]

name=Kubernetes

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

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

如果你之前已经装过这个repo,那么有可能需要执行如下命令清除本地yum缓存,否则看不到最新的k8s--1.20.2版本

yum clean all

yum makecache

笔者由于之前已经有了这个repo,所以必须执行yum缓存清除的操作。

查看支持的版本:

yum list --showduplicates kubeadm --disableexcludes=kubernetes

升级 kubeadm到1.20.2-0:

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

查看版本验证升级成功:

kubeadm version

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

kubectl drain future --ignore-daemonsets

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

再次kubectl get nodes,可以看到:

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

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

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

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

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

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

我是曲线下载:

docker pull gotok8s/kube-scheduler:v1.20.2

docker pull gotok8s/kube-apiserver:v1.20.2

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

docker pull gotok8s/kube-proxy:v1.20.2

然后重命名:

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

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

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

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

升级kubeadm k8s cluster版本:

kubeadm upgrade apply v1.20.2

你的coredns pod可能会报这个错:

是因为目前节点还是不可调度状态:kubectl get nodes

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

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

可以看到集群恢复:

查看镜像版本:

kubectl get pods --all-namespaces -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image

kubectl version,看到kubectl client版本还不对:

要重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

重启后依然不对,纳闷了,之前版本升级到这里已经OK了,我采用手动升级kubectl和kubelete。

手动升级kubectl到1.20.2-0:

列出版本找到要升级的版本:

yum list --showduplicates kubectl --disableexcludes=kubernetes

升级 kubectl到1.20.2-0:

yum install -y kubectl-1.20.2-0 --disableexcludes=kubernetes

kubectl version执行后版本正确:

手动升级kubelet到1.20.2-0:

升级前的kubelet版本:kubelet --version

列出版本找到要升级的版本:

yum list --showduplicates kubelet --disableexcludes=kubernetes

升级 kubelet到1.20.2-0:

yum install -y kubelet-1.20.2-0 --disableexcludes=kubernetes

需要重启kubelet才会生效,否则node依然是1.19.3版本:

重启kubelet:

systemctl daemon-reload

systemctl restart kubelet

再次查看node版本:

最后全部重新验证一下:

kubeadm version:正确

kubectl version:正确

kubelet --version:正确

kubectl get nodes:正确

查看镜像版本:正确

kubectl get pods --all-namespaces -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image

至此,kubernetes集群从v1.19.3升级到了v1.20.2。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档