centos

centos k8s升级如何进行

小樊
38
2025-11-01 21:40:01
栏目: 智能运维

CentOS环境下Kubernetes集群升级详细步骤

一、升级前准备

  1. 备份关键数据
    升级前必须备份集群核心数据,确保故障时可快速恢复:

    • 备份etcd数据(存储集群状态的核心组件):
      etcdctl snapshot save /var/lib/etcd/backup/snapshot.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
      
    • 备份kubeconfig文件(集群访问凭证):
      cp /root/.kube/config /root/.kube/config.backup
      
    • 备份/etc/kubernetes/目录(包含集群配置文件)。
  2. 检查兼容性

    • 升级路径:Kubernetes不支持跨次版本升级(如1.27→1.29),必须逐次升级(1.27→1.28→1.29)。
    • 组件兼容性:参考Kubernetes官方升级指南,确保新版本与当前集群的容器运行时(Docker/containerd)、CNI插件(Calico/Flannel)、存储驱动等组件兼容。
  3. 更新系统及仓库

    • 更新CentOS系统:
      sudo yum update -y
      
    • 配置Kubernetes最新仓库(以CentOS 7为例,替换为对应版本):
      cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
      enabled=1
      gpgcheck=1
      gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
      EOF
      ```。  
      
      
      

二、升级Master节点

  1. 升级kubeadm
    kubeadm是升级集群的核心工具,需先升级至目标版本:

    sudo yum update -y kubeadm
    
  2. 检查升级计划
    通过kubeadm upgrade plan命令查看可升级的版本及所需操作:

    sudo kubeadm upgrade plan
    

    输出会显示当前版本、可升级的目标版本及兼容性检查结果。

  3. 执行升级
    使用kubeadm upgrade apply命令升级Master节点(替换<目标版本>,如v1.28.2):

    sudo kubeadm upgrade apply v1.28.2
    

    若提示确认,输入yes继续。升级完成后,手动升级控制平面组件(如kube-apiserverkube-controller-managerkube-scheduler):

    sudo systemctl restart kube-apiserver kube-controller-manager kube-scheduler
    
  4. 升级kubelet和kubectl

    • 升级kubelet:
      sudo yum update -y kubelet
      sudo systemctl daemon-reload
      sudo systemctl restart kubelet
      
    • 升级kubectl(可选,但建议同步):
      sudo yum update -y kubectl
      
  5. 腾空Master节点(可选)
    若需在Master节点上执行升级操作,可先将其标记为不可调度并驱逐Pod:

    kubectl cordon k8s-master
    kubectl drain k8s-master --ignore-daemonsets --force
    

    升级完成后,恢复节点可调度:

    kubectl uncordon k8s-master
    ```。  
    
    
    

三、升级Worker节点

  1. 标记节点为不可调度
    避免升级过程中新Pod调度到该节点:

    kubectl cordon <节点名称>  # 如 kubectl cordon k8s-node01
    
  2. 驱逐节点上的Pod
    将节点上的Pod安全驱逐至其他节点(--ignore-daemonsets忽略DaemonSet管理的Pod,--force强制驱逐):

    kubectl drain <节点名称> --ignore-daemonsets --force
    
  3. 升级kubelet和kubectl
    操作与Master节点一致:

    sudo yum update -y kubelet kubectl
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  4. 升级节点
    使用kubeadm upgrade node命令升级Worker节点(需指定Master节点的Kubeadm版本):

    sudo kubeadm upgrade node
    
  5. 恢复节点可调度
    升级完成后,允许节点重新接收Pod调度:

    kubectl uncordon <节点名称>
    ```。  
    
    
    

四、升级后验证

  1. 检查节点状态
    确认所有节点状态为Ready

    kubectl get nodes
    
  2. 检查Pod状态
    确保所有Pod正常运行(无ErrorCrashLoopBackOff):

    kubectl get pods --all-namespaces
    
  3. 检查组件日志
    查看Kubernetes组件日志,排查潜在错误:

    sudo journalctl -u kubelet -f  # 实时查看kubelet日志
    sudo journalctl -u kube-apiserver -f  # 查看apiserver日志
    ```。  
    
    
    

五、清理旧版本(可选)

若升级成功且无问题,可删除旧版本组件以释放空间:

sudo yum remove -y kubeadm-<旧版本> kubelet-<旧版本> kubectl-<旧版本>
```。  


#### **注意事项**
- **滚动升级**:对于大型集群,建议逐个升级Worker节点,避免集群资源耗尽。  
- **测试环境验证**:生产环境升级前,务必在测试环境模拟升级流程,确认兼容性。  
- **监控告警**:升级过程中开启集群监控(如Prometheus),及时发现性能异常或错误。  
- **自定义配置**:若集群有自定义配置(如kubelet参数、CNI配置),升级前备份并检查新版本的配置兼容性。

0
看了该问题的人还看了