温馨提示×

Debian如何升级Kubernetes集群

小樊
41
2025-10-02 08:18:31
栏目: 智能运维

Debian系统升级Kubernetes集群详细步骤

一、升级前准备

  1. 备份关键数据
    备份集群配置(/etc/kubernetes/目录)和etcd数据(etcd是Kubernetes的核心存储组件),避免升级失败导致数据丢失。etcd备份命令示例:

    ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      --cert=/etc/kubernetes/pki/etcd/server.crt \
      --key=/etc/kubernetes/pki/etcd/server.key \
      snapshot save /data/etcd/etcd_bak.db
    
  2. 检查集群状态
    使用kubectl确认所有节点状态为Ready,所有Pod处于Running状态,且无未完成的作业或任务:

    kubectl get nodes
    kubectl get pods -A
    
  3. 更新Debian系统包
    确保系统包是最新的,避免依赖冲突:

    sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
    
  4. 确认升级兼容性
    查阅Kubernetes官方发布记录,确保目标版本与当前集群版本兼容(仅支持逐级升级,如v1.27→v1.28→v1.29,禁止跨大版本跳跃)。

二、升级控制平面节点(Master节点)

  1. 升级kubeadm工具
    下载目标版本的kubeadm二进制文件(以v1.29.10为例),替换旧版本:

    wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm
    chmod +x kubeadm
    sudo mv kubeadm /usr/local/bin/
    
  2. 检查升级计划
    使用kubeadm upgrade plan查看可升级的版本及需要更新的组件,确认无阻碍升级的问题:

    sudo kubeadm upgrade plan
    
  3. 执行控制平面升级
    运行kubeadm upgrade apply命令升级控制平面,完成后会自动更新API Server、Controller Manager等核心组件:

    sudo kubeadm upgrade apply v1.29.10
    
  4. 升级kubelet和kubectl
    下载目标版本的kubelet和kubectl,替换旧版本并重启kubelet服务:

    wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubelet
    wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubectl
    chmod +x kubelet kubectl
    sudo mv kubelet /usr/local/bin/
    sudo mv kubectl /usr/local/bin/
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  5. 解除Master节点保护
    升级完成后,将Master节点标记为可调度,恢复Pod调度:

    kubectl uncordon k8s-master
    

三、升级工作节点(Worker节点)

  1. 逐个腾空节点
    每次仅升级一个工作节点,避免集群资源不足。使用kubectl drain驱逐节点上的Pod(--ignore-daemonsets忽略守护进程集,--delete-emptydir-data删除临时数据):

    kubectl drain k8s-node1 --ignore-daemonsets --delete-emptydir-data
    
  2. 升级kubeadm、kubelet和kubectl
    在工作节点上重复控制平面的升级步骤,下载并安装目标版本的kubeadm、kubelet、kubectl,重启kubelet服务:

    wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm
    wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubelet
    wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubectl
    chmod +x kubeadm kubelet kubectl
    sudo mv kubeadm kubelet kubectl /usr/local/bin/
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  3. 执行节点升级
    使用kubeadm upgrade node命令将节点升级到目标版本,同步控制平面的配置:

    sudo kubeadm upgrade node
    
  4. 解除节点保护
    升级完成后,将节点标记为可调度,恢复Pod调度:

    kubectl uncordon k8s-node1
    
  5. 验证节点状态
    确认节点状态为Ready,表示升级成功:

    kubectl get nodes
    

四、升级后验证

  1. 检查集群组件状态
    确认kube-system命名空间中的核心组件(如kube-apiserver、kube-controller-manager、kube-scheduler)均处于Running状态:

    kubectl get pods -n kube-system
    
  2. 验证功能正常性
    部署一个测试Pod(如nginx),检查是否能正常调度和运行:

    kubectl run nginx-test --image=nginx --restart=Never
    kubectl get pod nginx-test
    

五、注意事项

  • 逐步升级:必须按照“控制平面→工作节点”的顺序,逐个节点升级,避免集群不可用。
  • 版本兼容性:禁止跨大版本升级(如v1.27→v1.29),需逐级升级(v1.27→v1.28→v1.29)。
  • CNI插件升级:若使用第三方CNI插件(如Calico、Flannel),需参考插件官方文档升级,确保与Kubernetes版本兼容。
  • 回滚准备:若升级失败,可通过kubeadm upgrade revert命令回滚控制平面,或重新安装旧版本组件恢复节点。

0