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

2021-02-02 10:56:23 浏览数 (1)

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。

0 人点赞