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.参考链接

相关推荐
小白的码BUG之路2 小时前
Docker -- 构建nacos镜像
运维·docker·容器
赵谨言6 小时前
红蓝对抗Docker渗透复盘-技能与产出汇总
docker·容器·eureka
打工仔折腾 AI11 小时前
飞牛OS上用Docker Compose部署ExerciseDiary运动记录并配置远程访问
运维·人工智能·后端·python·docker·容器·ai agent 实战
天衍四九-11 小时前
Docker Compose企业实战系列(八·终章):多环境隔离实战,开发/测试/生产一键切换
运维·docker·容器
ysu_031413 小时前
Docker-Desktop-WSL2实战指南-Windows从安装配置到项目容器化
windows·python·docker·容器·composer·dockerfile·wsl2
陈陈CHENCHEN13 小时前
【Kubernetes】纯 IPv6 K8s 集群访问外部 IPv4 服务
云原生·容器·kubernetes
明王明王14 小时前
从零搭建一个 AI Infra 实验室⑫:Docker 为什么默认看不到 GPU
人工智能·docker·容器
天衍四九-14 小时前
Docker Compose企业实战系列(四):Redis生产级部署|密码加固、持久化、内存优化完整方案
redis·docker·容器
troy12814 小时前
如何在谷歌云(Google Cloud)上部署 Kubernetes 集群
云原生·容器·kubernetes
guo_wen_qiang14 小时前
docker安装常见软件集合
运维·docker·容器