温馨提示×

Debian如何升级K8S集群组件

小樊
46
2025-10-19 07:09:03
栏目: 智能运维

Debian系统升级K8S集群组件指南

一、升级前准备工作

  1. 备份关键数据
    备份集群配置(/etc/kubernetes/目录)和etcd数据(/var/lib/etcd/目录),使用etcdctl工具备份etcd数据(需提前安装):
    etcdctl snapshot save /data/etcd/etcd_bak.db \
      --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
    
  2. 检查集群状态
    确保所有节点状态为Readykubectl get nodes),所有Pod处于Running状态(kubectl get pods --all-namespaces),无未完成作业或异常事件。
  3. 更新系统包
    同步Debian系统包索引并升级现有软件包:
    sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y
    

二、升级Kubernetes软件源

编辑Kubernetes源列表文件(/etc/apt/sources.list.d/kubernetes.list),替换为最新稳定版本的源地址(以1.29为例):

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/RPM-GPG-KEY-kubernetes-1.29.0
EOF

更新软件包列表:

sudo apt update

三、升级Master节点

  1. 升级kubeadm
    安装指定版本的kubeadm(需与目标K8S版本一致):
    sudo apt install -y kubeadm=1.29.10-00 kubelet=1.29.10-00 kubectl=1.29.10-00 --disableexcludes=kubernetes
    
  2. 检查升级计划
    查看集群可升级的版本及兼容性:
    sudo kubeadm upgrade plan
    
  3. 执行控制平面升级
    应用升级并自动处理控制平面组件(如kube-apiserver、kube-controller-manager、kube-scheduler):
    sudo kubeadm upgrade apply v1.29.10
    
  4. 腾空Master节点
    将Master节点标记为不可调度并驱逐所有Pod(避免升级期间影响业务):
    kubectl drain k8s-master --ignore-daemonsets --delete-emptydir-data
    
  5. 升级kubelet和kubectl
    手动下载并安装指定版本的kubelet和kubectl(若未通过apt安装):
    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/
    
  6. 重启kubelet服务
    应用kubelet配置变更:
    sudo systemctl daemon-reload && sudo systemctl restart kubelet
    
  7. 解除节点保护
    将Master节点恢复为可调度状态:
    kubectl uncordon k8s-master
    

四、升级Worker节点

  1. 腾空工作节点
    对每个Worker节点执行腾空操作(避免数据丢失):
    kubectl drain k8s-node1 --ignore-daemonsets --delete-emptydir-data
    
  2. 升级kubeadm
    在Worker节点上安装与Master节点一致的kubeadm版本:
    sudo apt install -y kubeadm=1.29.10-00 --disableexcludes=kubernetes
    
  3. 升级kubelet和kubectl
    同Master节点步骤,下载并安装指定版本的kubelet和kubectl,重启kubelet服务。
  4. 执行节点升级
    在Master节点上执行以下命令,将Worker节点升级到目标版本:
    sudo kubeadm upgrade node
    
  5. 解除节点保护
    将Worker节点恢复为可调度状态:
    kubectl uncordon k8s-node1
    

五、升级后验证

  1. 检查集群状态
    确认所有节点状态为Ready
    kubectl get nodes
    
  2. 检查组件健康度
    验证核心组件(如kube-apiserver、kube-controller-manager)的运行状态:
    kubectl get componentstatuses
    
  3. 检查Pod状态
    确保所有Pod正常运行(无ErrorCrashLoopBackOff状态):
    kubectl get pods --all-namespaces
    

六、注意事项

  • 版本兼容性:K8S升级需遵循“小版本递增”原则(如1.28→1.29),禁止跳过大版本(如1.28→1.30)。
  • CNI插件升级:升级后需检查CNI插件(如Calico、Flannel)版本兼容性,必要时升级插件以适配新版本K8S。
  • 回滚方案:若升级失败,可通过kubeadm upgrade revert命令回滚到上一版本,并恢复备份数据。
  • 测试环境验证:生产环境升级前,务必在测试环境中验证升级流程,避免业务中断。

0