资讯专栏INFORMATION COLUMN

k8s版本升级

IT那活儿 / 1349人阅读
k8s版本升级

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

1

主机规划

默认主机系统为centos系统,使用别的系统安装的集群,升级过程中部分步骤命令可能需要更改。

注意事项:

本次演示为本地测试环境,k8s集群为单节点一主两从集群;在生产环境若是多主多从环境需要另外全部升级。

2

升级流程

2.1 升级前注意事项

  • 在升级开始前已拥有一个运行的kubernetes v1.17.0或更高小版本集群。
  • 只能从一个大版本升级到下一个大版本,或者在同一个大版本下升级小版本,升级不能跳过大版本。例如:可以从1.17.4升级到1.17.20或者1.18.4,但是不能升级到1.19.x。

2.2 确认需要升级的版本

通过命令 yum list --showduplicates kubeadm --disableexcludes=kubernete 可以看到可下载的kubeadm版本,本次选择 1.18.4 版本。

2.3 升级控制节点

1)yum安装kubeadm1.18.4版本:
[root@master ~]# yum install -y kubeadm-1.18.4-0 --
disableexcludes=kubernetes
Bash
2)验证kubeadm版本是否为预期更新的版本,下列查看版本为1.18.4符合预期:
[root@master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.4",
GitCommit:"c96aede7b5205121079932896c4ad89bb93260af",
GitTreeState:"clean", BuildDate:"2020-06-17T11:39:11Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Bash
3)查看kubeadm需要升级的组件,kubeadm upgrade plan   ##此命令检查您的集群是否可以升级,并获取您可以升级到的版本。它还显示了一个包含组件配置版本状态的表格。
4)在控制节点执行kubeadm升级操作,出现如下更新成功:
kubeadm upgrade apply v1.18.4
Bash
5)若有其他控制节点需要升级,操作步骤与前四步一样,但需要使用kubeadm upgrade node代替kubeadm upgrade apply,不需要 kubeadm upgrade plan。
6)将master节点标记为不可调度并逐出工作负载来准备节点以进行维护。
[root@master ~]# kubectl drain master --ignore-daemonsets
node/master cordoned
evicting pod "coredns-9d85f5447-dfq9b"
evicting pod "coredns-9d85f5447-rvckm"
pod/coredns-9d85f5447-dfq9b evicted
pod/coredns-9d85f5447-rvckm evicted
node/master evicted
Bash
7)安装kubelet和kubectl:
[root@master ~]# yum install -y kubelet-1.18.4-0 kubectl-1.18.4-0 --disableexcludes=kubernetes
Bash
8)重启守护程序和kubelet:
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart kubelet
Bash
9)解除对节点不可调度的限制:
[root@master ~]# kubectl uncordon master
Bash
10)查看节点信息,如下所示,master节点成功升级成1.18.4版本:
[root@master ~]# kubectl get nodes 
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   36d   v1.18.4
node01   Ready    <none> 36d   v1.17.4
node02   Ready    <none> 36d   v1.17.4
Bash

2.4 升级工作节点

  • 如果有多台node节点,每台执行同样操作。
  • drain和取消drain都是在master上操作的。
1)在node节点上yum安装kubeadm1.18.4版本:
[root@master ~]# yum install -y kubeadm-1.18.4-0 --disableexcludes=kubernetes
Bash
2)在master上排空节点,将节点标记为不可调度并将所有pod排出该节点:
[root@master ~]# kubectl drain node01 --ignore-daemonsets

node/node01 cordoned
error: unable to drain node "node01", aborting command...

There are pending nodes to be drained:
node01
cannot delete Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): default/nginx-58777cc9fd-cwj77
cannot delete Pods with local storage (use --delete-local-data to override): kube-system/metrics-server-6b976979db-8d59w
# 出现报错,由于演示机是本地测试环境就直接添加参数--delete-local-data --force 了,生产环境请做好数据备份并清除pod后再执行操作。
[root@master ~]# kubectl drain node01 --ignore-daemonsets --delete-local-data --force 

node/node01 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-mrxm4, kube-system/kube-proxy-8tvvm; deleting Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet: default/nginx-58777cc9fd-cwj77
evicting pod default/nginx-58777cc9fd-nv7s9
evicting pod default/nginx-58777cc9fd-cwj77
evicting pod default/nginx-58777cc9fd-hnd6c
evicting pod default/redis-cluster-5
evicting pod default/redis-cluster-1
evicting pod default/redis-cluster-3
evicting pod kube-system/coredns-7ff77c879f-4hstv
evicting pod kube-system/metrics-server-6b976979db-8d59w
evicting pod kubernetes-dashboard/kubernetes-metrics-scraper-6b97c6d857-c6r6k
I0318 11:17:34.515068    7386 request.go:621] Throttling request took 1.146898968s, request: GET:https://XXX.XXX.XXX.136:6443/api/v1/namespaces/kubernetes-dashboard/pods/kubernetes-metrics-scraper-6b97c6d857-c6r6k
I0318 11:17:44.701717    7386 request.go:621] Throttling request took 1.33562914s, request: GET:https://XXX.XXX.XXX.136:6443/api/v1/namespaces/default/pods/nginx-58777cc9fd-hnd6c
pod/nginx-58777cc9fd-cwj77 evicted
pod/coredns-7ff77c879f-4hstv evicted
pod/nginx-58777cc9fd-hnd6c evicted
pod/metrics-server-6b976979db-8d59w evicted
pod/redis-cluster-5 evicted
pod/nginx-58777cc9fd-nv7s9 evicted
pod/redis-cluster-3 evicted
pod/kubernetes-metrics-scraper-6b97c6d857-c6r6k evicted
pod/redis-cluster-1 evicted
node/node01 evicted
Bash
3)确认pod全部驱逐后在master节点执行kubeadm更新操作,出现下图标记表示更新成功:
[root@master ~]# kubeadm upgrade node
Bash
4)升级kubelet和kubectl,重启kubelet:
[root@node01 ~]# yum install -y kubelet-1.18.4-0 kubectl-1.18.4-0 --disableexcludes=kubernetes
[root@node01 ~]# systemctl daemon-reload
[root@node01 ~]# systemctl restart kubelet
Bash
5)在master节点取消woker节点drain标记,查看node信息验证版本是否更新成功:
[root@master ~]# kubectl uncordon node01
node/node01 already uncordoned
# 如下可以看到node01节点已成功升级为1.18.4版本
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 37d v1.18.4
node01 Ready 37d v1.18.4
node02 Ready 37d v1.17.4
Bash
6)剩下的node02节点也可以按照上述5个步骤完成整个集群的升级。

2.5 故障恢复

1)如果kubeadm upgrade失败且没有回滚,例如由于执行期间意外关闭,可在再次执行kubeadm upgrade。
2)在升级期间,kubeadm将一下备份文件写入/etc/kubernetes/tmp。
  • kubeadm-backup-etcd--
  • kubeadm-backup-manifests--

参考文档:

https://blog.csdn.net/cuichongxin/article/details/121488986?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://v1-19.docs.kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

END



本文作者:刘 欢

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129462.html

相关文章

  • k8s如何管理Pod

    摘要:本文整理自时速云线上微信群分享第十二期在本次分享开始前,让我们先回想下。但目前时速云平台还不支持这种。问时速云是怎么保持的高可用的答高可用目前是官方推荐的多方式,以及我们自己的监管方式。 本文整理自【时速云线上微信群分享】第十二期 在本次分享开始前,让我们先回想下Pod。Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。在k8s中...

    Aldous 评论0 收藏0
  • K8S 生态周报| 2019-05-13~2019-05-19

    摘要:生态周报内容主要包含我所接触到的生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏生态。更多详细信息请阅读发布常规版本,详细内容可阅读正式发布是一个基于和支持部署平台。本次的发布增加了版本的,这其实也是项目趋向稳定的一个信号。 「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 kind v0.0.3 正式发布 ki...

    tomorrowwu 评论0 收藏0
  • 如何在Rancher 2.2 Preview2上部署和管理多K8s集群应用

    摘要:于近日全面发布,这一版本包含了许多集群操作的强大特性。从开始,支持在任意数量的集群中同时部署和升级同一应用程序的副本。下面将演示,在中如何便捷的管理多集群应用。每个应用将显示当前状态和目标集群以及项目列表。 Rancher 2.2 Preview2于近日全面发布,这一版本包含了许多K8S集群操作的强大特性。本文将详细介绍多集群应用这一特性,让您可以在短时间内更新集群,大大提升工作效率。...

    fengxiuping 评论0 收藏0
  • k8s如何管理Pod

    摘要:是运行服务的基础,那我们如何来管理呢,下面我们就来聊一聊。所以即使只有一个也应该使用来进行管理。现在回到最开始的问题,如何通过修改副本数量。 这是在微信群分享的文章,也贴在这里。 在本次分享开始前,让我们先回想下Pod。Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管...

    Cheng_Gang 评论0 收藏0
  • k8s如何管理Pod

    摘要:是运行服务的基础,那我们如何来管理呢,下面我们就来聊一聊。所以即使只有一个也应该使用来进行管理。现在回到最开始的问题,如何通过修改副本数量。 这是在微信群分享的文章,也贴在这里。 在本次分享开始前,让我们先回想下Pod。Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管...

    zzbo 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<