把一个集群从1.22版升级到1.23版。

前提条件

  • 确保备份所有重要组件,例如存储在数据库中的应用状态。Kubernetes 升级不涉及正常的工作负载,只涉及与 Kubernetes 相关的组件,但备份始终是最佳实践。
  • 必须禁用Swap交换

步骤

master节点

1.清空主节点

驱逐/删除主节点的所有 Pod(镜像 Pod 除外)(不能通过 API 服务器删除),以便能够执行升级。如果有 daemon set-managed pods,drain 不会在没有 --ignore-daemonsets 的情况下继续进行,因为这些 pods 将立即被 daemon set 控制器替换,它会忽略不可调度的标记。

#kubectl drain master --ignore-daemonsets
node/master already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-lfplf, kube-system/weave-net-fv7sn
evicting pod kube-system/coredns-64897985d-pl2v9
evicting pod kube-system/coredns-64897985d-65g5p
pod/coredns-64897985d-65g5p evicted
pod/coredns-64897985d-pl2v9 evicted
node/master drained

Draining 成功后,您可以检查节点的状态以确保它是SchedulingDisabled,这意味着该节点上不能调度任何 Pod。

#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready, SchedulingDisabled control-plane,master v1.22.2
worker Ready <none> v1.22.2

2.更新系统中的包管理器,根据您的操作系统,它可能会有所不同。

#apt-get update

3.在包管理器中搜索可用的 kubeadm 包,并使用 grep 过滤结果以获得您需要的版本。在我们的例子中是 1.23 版本。

#apt-cache show kubeadm | grep 1.23

输出应类似于以下内容:

Version: 1.23.1–00
Filename: pool/kubeadm_1.23.1–00_amd64_6bc970cf9bf5349ba18526f77c6ac16caf2a52b6a7b0e40753541ebef52ad99f.deb
Version: 1.23.0–00
Filename: pool/kubeadm_1.23.0–00_amd64_36016a07eb5c2bfae656cfee1b3848930757d201b474fea1cce1ecd507b94f0b.deb

4.保留 kubectl 和 kubelet包,防止它们被自动安装、升级或删除。这是一个预防措施。

#apt-mark hold kubectl kubelet

5.取消保留 kubeadm 包,升级后再次 hold。

#apt-mark unhold kubeadm
#apt-get install kubeadm=1.23.1–00
#apt-mark hold kubeadm

6.检查 kubeadm版本以确保它已升级。

#kubeadm version

7.查看kubeadm升级计划,看看还有哪些组件需要升级。

#kubeadm upgrade plan

8.应用计划,你应该可以看到升级成功的消息

#kubeadm upgrade apply v1.23.1

9.取消保留 kubectl 和 kubelet包,升级它们然后再次持有它们。

请注意,如果您要复制此内容,您可能需要删除“-”并在终端中再次输入,因为它可能被视为拼写错误。

#apt-mark unhold kubelet kubectl
#apt-get install kubelet=1.23.1-00 kubectl=1.23.1-00
#apt-mark hold kubelet kubectl

10.重新启动 kubelet 并检查是否正常运行。

#systemctl restart kubelet
#systemctl status kubelet

11.运行 kubeadm upgrade plan check以确保一切都已升级。

#kubeadm upgrade plan

12.检查节点状态和主节点的新版本。

#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready,SchedulingDisabled control-plane,master v1.23.1
worker Ready <none> v1.22.2

13.解封主节点,使其再次可调度

#kubectl uncordon master
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready control-plane,master v1.23.1
worker Ready <none> v1.22.2

这里我们完成了主节点,让我们移动到工作节点

worker 节点

我们将重复使用以下相同的命令

清空主节点

您可能需要使用“force”参数来强制驱逐一些 pod。

#kubectl drain worker --ignore-daemonsets --force
node/cks-worker drained
更新包管理器。取消保留,安装 kubeadm。
#apt-get update
#apt-mark unhold kubeadm
#apt-get install kubeadm=1.23.1-00
#apt-mark hold kubeadm
取消保留,安装,然后保留 kubectl 和 kubeadm。
#apt-mark unhold kubelet kubectl
#apt-get install kubelet=1.23.1-00 kubectl=1.23.1-00
#apt-mark hold kubelet kubectl
重启kubelet进程并检查其状态
#systemctl restart kubelet
#systemctl status kubelet
检查节点状态
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready control-plane,master v1.23.1
worker Ready,SchedulingDisabled <none> v1.23.1
解封worker节点,使其再次可调度
#kubectl uncordon worker
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready control-plane,master v1.23.1
worker Ready <none> v1.23.1

至此升级成功!!

最新文章

  1. VB6.0 为批量字体改名
  2. JavaScript 加载动画Canvas 设计
  3. 【编程篇】C++11系列之——临时对象分析
  4. CAS单点登录和spring securtiy集成
  5. 使用ContentProvider进行应用程序间的数据交互
  6. Django项目--web聊天室
  7. Eclipse背景颜色修改
  8. python编码基础知识
  9. 如何灵活利用免费开源图标字体-IcoMoon篇
  10. foreach 内嵌的使用
  11. java 锁 Lock接口详解
  12. ESP定律学习
  13. Java NIO的工作方式
  14. josn的格式化
  15. Oracle 监听器日志配置与管理
  16. bootstrap的化妆页面
  17. Java实现网易企业邮箱发送邮件
  18. EBS标准的查看供应商地点
  19. 文献综述十七:基于 sql环境下超市管理系统的设计与实现
  20. swift 值得学习的项目

热门文章

  1. resultMap自定义映射(一对多)
  2. 准备java编程软件与第一个java程序
  3. 网站迁移服务器后CPU、内存飙升,设置robots.txt 问题
  4. 无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离
  5. [SWPU2019]Web1-1|SQL注入
  6. Operating System_via牛客网
  7. mysql主从复制学习笔记
  8. 前端(五)-Vue简单基础
  9. 2506-nginx的配置-域名分发与负载均衡(只有配置无原理)
  10. JS 字符串转 GBK 编码超精简实现