石头记

Docker、Kubernetes、CI/CD 等技术分享

Kubernetes 集群升级

视频课程地址:戳我开始学习

控制平面升级

只有master节点需要执行如下操作,需要逐节点操作。将集群从当前的v1.14.3升级到v1.15.0。

列出可用的kubeadm软件包

1
$ yum list --showduplicates kubeadm --disableexcludes=kubernetes

安装kubeadm新版本软件包

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

确认kubeadm为正确的版本

1
$ kubeadm version

查看升级计划

1
$ kubeadm upgrade plan

升级第一个控制节点

1
$ kubeadm upgrade apply v1.15.0

升级kubelet软件包

1
$ yum install -y kubelet-1.15.0-0 kubectl-1.15.0-0 --disableexcludes=kubernetes

重启kubelet服务

1
$ systemctl restart kubelet

升级第二、三个控制节点

升级控制节点

1
$ kubeadm upgrade node

升级kubelet、kubectl软件包

1
$ yum install -y kubelet-1.15.0-0 kubectl-1.15.0-0 --disableexcludes=kubernetes

重启kubelet服务

1
2
$ systemctl daemon-reload
$ systemctl restart kubelet

升级工作节点

逐节点升级工作节点

升级kubeadm软件包

1
$ yum install -y kubeadm-1.15.x-0 --disableexcludes=kubernetes

驱逐节点上的pod并标记为不可调度

1
$ kubectl drain k8s-s1 --ignore-daemonsets

升级kubelet、kubectl软件包

1
$ yum install -y kubelet-1.15.0-0 kubectl-1.15.0-0 --disableexcludes=kubernetes

更新kubelet配置文件

1
$ kubeadm upgrade node

重启kubelet服务

1
2
$ systemctl daemon-reload
$ systemctl restart kubelet

查看kubelet状态

1
$ systemctl status kubelet

标注节点为可调度

1
$ kubectl uncordon k8s-s1

确定各节点状态为Ready

1
$ kubectl get nodes

从失败状态恢复

如果 kubeadm upgrade 执行失败,它将尝试执行回滚。因此,如果这种情况发生在第一个 master 身上,那么集群仍然完好无损的可能性很大。你可以再次运行 kubeadm upgrade apply,因为它是幂等的,最终应确保实际状态是你声明的所需状态。你可以使用参数 –force 运行 kubeadm upgrade apply 命令更改运行的集群为 y.y.y –> x.x.x,它可用于从糟糕的状态中恢复过来。

如果 kubeadm upgrade apply 是在其中一个辅助 master 上失败,则仍然有一个正在工作的已经升级的集群,但辅助 master 的状态有些不确定。你将不得不找出哪里出了问题,并手动加入辅助 master。如上所述,有时升级其中一个辅助 master 时,首先等待重新启动的静态 pod 失败,但在一两分钟的暂停后简单地重复该操作时会成功。

Proudly powered by Hexo and Theme by Hacker
© 2019 ist0ne