Cluster Upgrade

核心目标:

  • 将控制平面节点的 kubeadm、Kubernetes 集群本身和 kubeletv1.31.1 升级到 v1.32.2
  • 在升级前后,分别截取屏幕截图,证明 kubeadm、集群和 kubelet 的版本已经成功升级。

步骤详解:

1. 切换到正确的 Kubernetes 集群上下文 (至关重要!)

kubectl config use-context kubernetes-admin@kubernetes

务必确认你已经切换到了正确的集群! 这是最容易出错的地方,考试时一定要仔细检查。

2. 收集升级前的版本信息 (截屏!)

  • kubeadm:

    kubeadm version
    

    运行这个命令,并将输出结果截屏。这就是 kubeadm 升级前的版本信息。

  • Kubernetes 集群 (控制平面):

    kubectl version
    

    运行这个命令,找到 Server Version 的值,并将整个输出结果截屏。这就是 Kubernetes 集群升级前的版本信息。

  • kubelet:

    kubectl get nodes -o wide
    

    运行这个命令,找到 KUBELET VERSION 列,并将包含控制平面节点的那一行截屏。这就是 kubelet 升级前的版本信息。 另一种方法是 SSH 登录到控制平面节点,然后运行 kubelet --version 并截屏。

3. 隔离控制平面节点 (Drain)

kubectl get nodes  # 获取节点名称
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data --force

<节点名称> 替换成你实际的控制平面节点的名字。

4. 升级 kubeadm

apt update && apt-cache show kubeadm | grep Version  # 查找目标版本
apt-get update && apt-get install -y kubeadm=1.27.2-00
apt-mark hold kubeadm

1.27.2-00 替换成你实际要安装的版本。

5. 升级 Kubernetes 集群 (控制平面)

kubeadm upgrade plan
kubeadm upgrade apply v1.27.2

6. 升级 kubelet 和 kubectl

apt-get update && apt-get install -y kubelet=1.27.2-00 kubectl=1.27.2-00
apt-mark hold kubelet kubectl
systemctl daemon-reload && systemctl restart kubelet

7. 取消隔离控制平面节点 (Uncordon)

kubectl uncordon <节点名称>

<节点名称> 替换成你实际的控制平面节点的名字。

8. 收集升级后的版本信息

  • kubeadm:

    kubeadm version
    

    运行这个命令,并将输出结果截屏。这就是 kubeadm 升级后的版本信息。

  • Kubernetes 集群 (控制平面):

    kubectl version
    

    运行这个命令,找到 Server Version 的值,并将整个输出结果截屏。这就是 Kubernetes 集群升级后的版本信息。

  • kubelet:

    kubectl get nodes -o wide
    
  • 简而言之
    就是升级master节点的组件版本。核心考察的还是升级k8s的核心组件,这只是升级master节点,node节点升级也是一样,先给要升级的节点驱逐pod然后在对应的节点进行升级操作,确保集群的高可用性。

控制平面节点(controlplane)已经成功升级到 v1.32.2

  • kubeadm version 显示 kubeadm 版本为 v1.32.2
  • kubectl version 显示 Server Versionv1.32.2
  • kubectl get nodes -o wide 显示 controlplane 节点的 VERSIONv1.32.2

关于 Worker 节点的升级:

需要逐个升级 Worker 节点(例如 node01)。 Worker 节点的升级过程与控制平面节点类似,但有一些关键区别:

Worker 节点升级步骤:

  1. 选择一个 Worker 节点: 例如 node01

  2. Drain Worker 节点:

    kubectl drain node01 --ignore-daemonsets --delete-emptydir-data --force
    
  3. SSH 登录到 Worker 节点: 使用 SSH 连接到 node01

  4. 升级 kubelet 和 kubectl:

    sudo apt-get update && sudo apt-get install -y kubelet=1.32.2-00 kubectl=1.32.2-00
    sudo apt-mark hold kubelet kubectl
    sudo systemctl daemon-reload && sudo systemctl restart kubelet
    
    • 注意: 在 Worker 节点上,通常需要使用 sudo 来执行 apt-get 命令。
  5. Uncordon Worker 节点:

    kubectl uncordon node01
    

    注意: kubectl 命令需要在控制平面节点上执行,所以你需要退出 Worker 节点的 SSH 连接,回到控制平面节点执行这个命令。

  6. 验证升级:

    kubectl get nodes -o wide
    

    确认 node01VERSION 已经更新为 v1.32.2

重要提示:

  • 逐个升级: 强烈建议逐个升级 Worker 节点,而不是同时升级所有节点。 这样可以降低升级过程中出现问题的风险。
  • 监控: 在升级过程中,密切监控集群的健康状况,确保应用程序正常运行。
  • 版本匹配: 确保 Worker 节点的 kubelet 版本与控制平面的 Kubernetes 版本兼容。 通常建议 Worker 节点的 kubelet 版本与控制平面版本相同。
  • SSH 访问: 确保你可以通过 SSH 访问所有的 Worker 节点。

截图如下:

controlplane:~$ apt-mark hold kubelet kubectl #旨在阻止kubelet和kubectl自动更新。
kubelet set on hold.
kubectl set on hold.

posted on 2025-05-07 18:58  Leo-Yide  阅读(37)  评论(0)    收藏  举报