开发者社区> CTO技术共享> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Kubernetes 怎么优雅升级

简介: Kubernetes 怎么优雅升级
+关注继续查看

Kubernetes 怎么优雅升级

image

首先,让我们定义一下 Kubernetes 中 hard-way 的概念:Kubernetes 中的困难方式是为了学习和应用每一步,但是你要了解该步骤背后的内容。因此,您每点击一个命令都会发生神奇的事情,最后通过一个很长的路径和命令才能升级您的集群。第一次看起来可能很难,但这将是您之后升级的经验积累,因为您将熟悉每个 Kubernetes 升级组件,因为您将使用大量命令工具,这可以帮助您进行故障排除并为您提供更多的集群可控性。

现在让我们跳到一个演示中,用我们的双手来操作命令行。我们将把一个集群从 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-daemonsetsnode/master already cordonedWARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-lfplf, kube-system/weave-net-fv7snevicting pod kube-system/coredns-64897985d-pl2v9evicting pod kube-system/coredns-64897985d-65g5ppod/coredns-64897985d-65g5p evictedpod/coredns-64897985d-pl2v9 evictednode/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
  1. 更新系统中的包管理器,根据您的操作系统,它可能会有所不同。
#apt-get update
  1. 在包管理器中搜索可用的 kubeadm 包,并使用 grep 过滤结果以获得您需要的版本。在我们的例子中是 1.23 版本。
#apt-cache show kubeadm | grep 1.23


输出应类似于以下内容:

Version: 1.23.1–00Filename: pool/kubeadm_1.23.1–00_amd64_6bc970cf9bf5349ba18526f77c6ac16caf2a52b6a7b0e40753541ebef52ad99f.debVersion: 1.23.0–00Filename: pool/kubeadm_1.23.0–00_amd64_36016a07eb5c2bfae656cfee1b3848930757d201b474fea1cce1ecd507b94f0b.deb
  1. 保留 kubectl 和 kubelet 包,防止它们被自动安装、升级或删除。这是一个预防措施。
#apt-mark hold kubectl kubelet
  1. 取消保留 kubeadm 包,升级后再次 hold。
#apt-mark unhold kubeadm#apt-get install kubeadm=1.23.1–00#apt-mark hold kubeadm
  1. 检查 kubeadm 版本以确保它已升级。
#kubeadm version


image

kubeadm 版本


  1. 查看 kubeadm 升级计划,看看还有哪些组件需要升级。
#kubeadm upgrade plan


image

kubeadm 升级计划

  1. 应用计划,你应该可以看到升级成功的消息
#kubeadm upgrade apply v1.23.1


image

  1. 取消保留 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


  1. 重新启动 kubelet 并检查是否正常运行。
#systemctl restart kubelet#systemctl status kubelet
  1. 运行 kubeadm upgrade plan check 以确保一切都已升级。
#kubeadm upgrade plan


image

kubeadm 升级检查

  1. 检查节点状态和主节点的新版本。
#kubectl get nodesNAME       STATUS                    ROLES                   VERSIONmaster     Ready,SchedulingDisabled  control-plane,master    v1.23.1worker     Ready                     <none>                  v1.22.2
  1. 解封主节点,使其再次可调度
#kubectl uncordon master#kubectl get nodesNAME       STATUS    ROLES                  VERSIONmaster     Ready     control-plane,master   v1.23.1worker     Ready     <none>                 v1.22.2

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

worker 节点

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

  1. 清空主节点

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

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

至此升级成功!!


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
升级二进制kubernetes集群
最近由于时间不足,暂时无法对小版本更新第一时间出新的文档。若需要升级集群版本,可以参考此文档进行操作,每个节点一个一个的更新。大版本更新请各位持续关注我的Github项目仓库。后续更新会在仓库持续更新。感谢各位小伙伴一直以来的支持。
41 0
Kubernetes API
Kubernetes API
57 0
kubernetes搭建
当前最后的saas系统
284 0
不要自建Kubernetes
这是“如何高效使用云服务”系列文章的首篇分享。可能有朋友好奇为什么不是从云计算最基础的服务--计算资源ECS/EC2讲起呢?在Cloud Native已经被越来越接受的今天,基于Kubernetes部署、编排应用的方式已经是业界的事实标准。
7945 0
Kubernetes部署的最佳安全实践
本文讲的是Kubernetes部署的最佳安全实践【编者的话】本文阐述了作者在部署一个安全的kubernetes应用时的最佳实践,包括:镜像无漏洞,使用授权镜像,限制节点访问,限制资源访问,定义资源配额,实现网络分割,运用安全上下文,处处记录日志,等等,并建议读者将这些措施无缝集成到持续集成流水线中。
2287 0
Kubernetes是什么?
本文讲的是Kubernetes是什么?【编者的话】你能向你的老板,同事解释清楚Kubernetes到底是个什么东西吗?本文应该能帮助到你。
1856 0
手工安装kubernetes
参考的URL是 http://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html 安装kubernets本身比较顺利,只是作dashboard时,老是日文版, 当时用的docker镜像是registry.cn-beijing.aliyuncs.com/bbt_k8s/kubernetes-dashboard-amd64   v1.6.0 , 后来,升级为registry.cn-beijing.aliyuncs.com/bbt_k8s/kubernetes-dashboard-amd64   v1.6.1之后,就成中文的了。
1247 0
+关注
CTO技术共享
专注大数据、架构框架、集群、中间件、分布式、数据库、监控、开源、基础架构等技术分享,助力数字化转型。
279
文章
47
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载