Kubernetes / Linux Note / 运维笔记

kubeadm 集群升级

Einic Yeo · 12月30日 · 2021年 · ·

首先,让我们来定义Kuberneteshard way这个概念: Kubernetes的艰难之路是学习和演示每一个步骤,以确保理解步骤背后的内容和它所反映的内容。因此,这不是一个单一的命令,然后奇迹发生,它是一个漫长的路径和一系列的命令,以能够升级您的集群。光明的一面是,它似乎努力但第一次之后,它会成为你的首选方法升级,因为你会熟悉每个Kubernetes升级组件,除了发展你的技能,你会使用很多的命令行可以帮助在故障排除和给你更多的可控性。

现在,让我们跳到一个演示,让我们熟悉一下命令行。我们将把一个集群从版本1.22升级到1.23。要设置Kubernetes环境,您可以参考本文以获得快速、简单和干净的Kubernetes环境设置。

一、先决条件

  • 确保备份任何重要组件,例如存储在数据库中的应用程序级状态。Kubernetes升级不会影响您的工作负载,只会影响与Kubernetes相关的组件,但备份始终是一个最佳实践。
  • swap必须被禁用

二、升级步骤

2.1、master node

drain主节点,这将驱逐/删除您的所有 pod(镜像 pod 除外),以便能够执行升级。

如果存在由守护进程集管理的pod,如果没有- ignore-daemonsets,则drain将不会进行,因为这些pod将立即被守护进程集控制器替换,而守护进程集控制器将忽略不可调度的标记。

#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

drain成功完成后,您可以检查节点的状态,以确保它是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. ubuntu中更新包管理器,根据你的操作系统选择你合适的包管理器
#apt-get update
  1. 在包管理器中搜索可用的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
  1. 保留kubectlkubelet包,防止它们被自动安装、升级或删除。这是一个预防措施。
#apt-mark hold kubectl kubelet
  1. Unhold kubeadm包,升级后再hold
#apt-mark unhold kubeadm
#apt-get install kubeadm=1.23.1–00
#apt-mark hold kubeadm
  1. 检查kubead版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!m版本,确保它已经升级。
#kubeadmversion
kubeadm version: &version.InfofMajor:"1",Minor:"23',GitVersion:"v1.23.1",GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005892e",GitTreeState:"clean”,BuildDate:"2021-12-16T11:39:51Z",GoVersion:“go1.17.5",Compiler:"gc",Platform:“linux/amd64")
  1. 检查kubeadm升级计划,看看还有哪些组件需要升级。
#kubeadmupgradeplan
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       TARGET
kubelet     2 x v1.22.2   v1.23.1
Upgrade to the latest stable version:
COMPONENT                  CURRENT           TARGET
kube-apiserver             v1.22.2           v1.23.1
kube-controller-manager    v1.22.2           v1.23.1
kube-scheduler             v1.22.2           v1.23.1
kube-proxy                 v1.22.2           v1.23.1
CoreDNS                    1.8.4             v1.8.6
etcd                       3.5.0-0           3.5.1-0
You can now apply the upgrade by executing the following command:
        kubeadm upgrade apply v1.23.1
  1. 应用该计划,然后您应该能够看到升级成功的消息
#kubeadmupgradeapplyv1.23.1
[upgrade/successfu1] SUCCESS! Your cluster was upgraded to "v1.23.1". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't alread y done so.
  1. Unhold kubectlkubelet包,升级他们,然后再次unhold他们。

注意,如果你要复制它,你可能需要删除' - '并在终端中再次输入它,因为它版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!可能被认为是一个打字错误。

#apt-mark unhold kubelet kubectl
#apt-get install kubelet=1.23.1-00 kubectl=1.23.1-00
#apt-mark unhold kubelet kubectl
  1. 重新启动kubelet并检查应该处于活动状态并正在运行
#systemctl restart kubelet
#systemctl status kubelet
  1. 运行kubeadm升级计划检查以确保所有东西都升级版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!了。
#kubeadmupgradeplan
[upgrade/config] Making sure the configuration is correct:
[upgrade/config]Reading configuration from the cluster...
[upgrade/config]FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'[preflight] Running pre-flight checks.
[upgrade] Running cluster health checks
[upgrade]Fetching available versions to upgrade to
[upgrade/versions]Cluster version:v1.23.1
[upgrade/versions]kubeadm version:v1.23.1
[upgrade/versions] Target version:v1.23.1
[upgrade/versions]Latest version in the v1.23 series:v1.23.1
  1. 检查节点状态和主节点的新版本。
#kubectl get nodes
NAME       STATUS                    ROLES                   VERSION
master     Ready,SchedulingDisabled  control-plane,master    v1.23.1
worker     Ready                     <none>                  v1.22.2
  1. 解除主节点的警戒线,使其再次可调度
#kubectl uncordon master
#kubectl get nodes
NAME       STATUS    ROLES                  VERSION
master     Ready     control-plane,master   v1.23.1
worker     Ready     <none>                 v1.22.2

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

2.2、w版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!orker node

步骤:
  1. drain工作节点。你可能需要使用“force”参数强版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!制驱逐一些pod
#kubectl drain worker --ignore-daemonsets --force
node/cks-worker drained
  1. 更新包管理器。Unholdinstall然后hold kubeadm
#apt-get update
#apt-mark unhold kubeadm
#apt-get install kubeadm=1.23.1-00
#apt-mark hold kubeadm
  1. Unholdinstall然后hold kubectlkubeadm
#apt-mark unhold kubelet kubectl
#apt-get install kubelet=1.23.1-00 kubectl=1.23.1-00
#apt-mark unhold kubelet kubectl
  1. 重新启动kubelet进程并检查其状态
#systemctl restart kubelet
#systemctl status kubelet
  1. 检查节点状态
#kubectl get nodes
NAME       STATUS                   ROLES                 VERSION
master     Ready                    control-plane,master  v1.23.1
worker     Ready,SchedulingDisabled <none>                v1.23.1
  1. 解除工作节点的警戒线,使其再次可调度
#kubectl uncordon worker
#kubectl get nodes
NAME       STATUS    ROLES                  VERSION
master     Ready     control-plane,master   v1.23.1
worker     Ready     <none>                 v1.23.1

这里升级成功了!

0 条回应