kubeadm 升级 k8s集群 1.17到1.20

云原生学习路线导航页(持续更新中)

本文是 Kubernetes 基础学习 系列文章,主要讲解 使用kubeadm,将kubernetes集群从1.17升级到1.20

1.kubernetes一般不要跨大版本升级

  • 一般来说,跨越多个主要版本的升级需要逐个升级每个中间版本
  • 因此,无法直接将kubernetes从1.17直接升级到1.20或更高版本,需要按照1.17-->1.18-->1.19-->1.20的顺序一一进行升级
  • 本文暂时只适用于使用 kubeadm 安装的 kubernetes 集群

2.kubeadm升级单节点集群的步骤

如果你的kubernetes集群只有一个节点同时作为master和node,没有其他master和node,可以直接按照下面的步骤升级,否则请看第3部分

2.1.kubernetes集群从1.17-->1.18

sh 复制代码
# 查看kubeadm支持的所有版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

# 这里每次升级到中转版本,都升级到当前版本的最新版,当然你也可以自行选择其他版本
# 如这里选择1.18.20-0
yum install -y kubeadm-1.18.20-0 --disableexcludes=kubernetes

# 验证kubeadm是否升级成功
kubeadm version

# 将kubelet和kubectl也升级一下
yum downgrade kubelet-1.18.20 kubectl-1.18.20

# 查看升级计划,如果没有明显的报错,就可以继续
kubeadm upgrade plan

# 执行升级
kubeadm upgrade apply v1.18.20

# 注:如果上面升级报错:
	# 报错 - There are kubelets in this cluster that are too old that have these versions,
	# 则可以添加--force强制升级
	# kubeadm upgrade apply v1.18.20 --force

# 出现这段,代表升级成功
# [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.20". Enjoy!

2.2.kubernetes集群从1.18-->1.19

sh 复制代码
# 查看kubeadm支持的所有版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

# 这里每次升级到中转版本,都升级到当前版本的最新版,当然你也可以自行选择其他版本
# 如这里选择1.19.16-0
yum install -y kubeadm-1.19.16-0 --disableexcludes=kubernetes

# 验证kubeadm是否升级成功
kubeadm version

# 将kubelet和kubectl也升级一下
yum downgrade kubelet-1.19.16 kubectl-1.19.16

# 查看升级计划,如果没有明显的报错,就可以继续
kubeadm upgrade plan

# 执行升级
kubeadm upgrade apply v1.19.16

# 注:如果上面升级报错:
	# 报错 - There are kubelets in this cluster that are too old that have these versions,
	# 则可以添加--force强制升级
	# kubeadm upgrade apply v1.19.16 --force

# 出现这段,代表升级成功
# [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.16". Enjoy!

2.3.kubernetes集群从1.19-->1.20

sh 复制代码
# 查看kubeadm支持的所有版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

# 这里每次升级到中转版本,都升级到当前版本的最新版,当然你也可以自行选择其他版本
# 如这里选择1.20.15-0
yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes

# 验证kubeadm是否升级成功
kubeadm version

# 将kubelet和kubectl也升级一下
yum downgrade kubelet-1.20.15 kubectl-1.20.15

# 查看升级计划,如果没有明显的报错,就可以继续
kubeadm upgrade plan

# 执行升级
kubeadm upgrade apply v1.20.15

# 注:如果上面升级报错:
	# 报错 - There are kubelets in this cluster that are too old that have these versions,
	# 则可以添加--force强制升级
	# kubeadm upgrade apply v1.20.15 --force

# 出现这段,代表升级成功
# [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.20.15". Enjoy!

3.kubeadm升级多节点集群的步骤

下面演示 1.17-->1.18 的过程,升级后,用户可自行再升级到1.19和1.20,只需修改版本号即可

3.1.kubeadm升级一个master

  • 如果你有多个master,先选择一个master,按照第2部分的步骤,将1.17升级到1.18

    sh 复制代码
    # 查看kubeadm支持的所有版本
    yum list --showduplicates kubeadm --disableexcludes=kubernetes
    
    # 这里每次升级到中转版本,都升级到当前版本的最新版,当然你也可以自行选择其他版本
    # 如这里选择1.18.20-0
    yum install -y kubeadm-1.18.20-0 --disableexcludes=kubernetes
    
    # 验证kubeadm是否升级成功
    kubeadm version
    
    # 将kubelet和kubectl也升级一下
    yum downgrade kubelet-1.18.20 kubectl-1.18.20
    
    # 查看升级计划,如果没有明显的报错,就可以继续
    kubeadm upgrade plan
    
    # 执行升级
    kubeadm upgrade apply v1.18.20
    
    # 注:如果上面升级报错:
    	# 报错 - There are kubelets in this cluster that are too old that have these versions,
    	# 则可以添加--force强制升级
    	# kubeadm upgrade apply v1.18.20 --force
    
    # 出现这段,代表升级成功
    # [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.20". Enjoy!

3.2.kubeadm升级其他master和node

sh 复制代码
# 升级kubeadm
yum install -y kubeadm-1.18.20-0 --disableexcludes=kubernetes

# 查看kubeadm升级是否成功
kubeadm version

# 查看升级计划
kubeadm upgrade plan

# 注意,这里不是apply,而是node
kubeadm upgrade node

# 驱逐工作负载
# 将 <node-to-drain> 替换为你要腾空的控制面节点名称
kubectl drain <node-to-drain> --ignore-daemonsets

# 升级kubelet和kubectl
yum install -y kubelet-1.18.20-0 kubectl-1.18.20-0 --disableexcludes=kubernetes

# 重启kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet

# 解除节点保护
# 将 <node-to-uncordon> 替换为你的节点名称
kubectl uncordon <node-to-uncordon>

4.参考链接

相关推荐
lichenyang4531 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4531 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4531 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
运维开发故事4 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson6 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生6 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭6 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美7 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵8 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程