Kubernetes 版本升级(1.25→1.28):kubeadm 证书续期与插件兼容处理指南

一、证书续期核心步骤
  1. 检查证书有效期
    升级前执行:

    kubeadm certs check-expiration
    

    重点关注输出中的 RESIDUAL TIME 列,若剩余时间 < 180 天需续期

  2. 手动续期证书(推荐在升级前完成)

    kubeadm certs renew all  # 续期所有证书
    systemctl restart kubelet
    

  3. 升级过程中的自动续期
    kubeadm 在 upgrade apply 时会自动处理:

    • 若证书剩余有效期 > 180 天:保留原证书
    • 若证书即将过期:自动生成新证书(有效期 1 年)
    • 验证命令:
      openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt
      

二、kubeadm 升级流程
graph TD
    A[备份集群] --> B[升级控制平面]
    B --> C[升级工作节点]
    C --> D[验证集群状态]

  1. 控制平面升级

    # 升级 kubeadm 工具
    apt-get update && apt-get install kubeadm=1.28.0-00
    
    # 检查升级计划
    kubeadm upgrade plan
    
    # 执行升级(自动处理证书)
    kubeadm upgrade apply v1.28.0
    
    # 升级节点组件
    apt-get install kubelet=1.28.0-00 kubectl=1.28.0-00
    systemctl daemon-reload
    systemctl restart kubelet
    

  2. 工作节点升级

    kubectl drain <node-name> --ignore-daemonsets
    apt-get install kubeadm=1.28.0-00 kubelet=1.28.0-00
    kubeadm upgrade node
    systemctl restart kubelet
    kubectl uncordon <node-name>
    

三、插件兼容性处理
  1. 关键插件检查清单

    插件类型 1.28 兼容要求 验证方法
    CNI 网络 Calico ≥ v3.25 calicoctl version
    CSI 存储 需支持 v1.28 API 供应商文档
    CoreDNS ≥ 1.10.1 kubectl get deployment coredns -n kube-system -o yaml
    kube-proxy 需匹配 k8s 版本 DaemonSet 镜像版本
  2. 常见问题处理

    • Docker 弃用问题
      1.28 默认使用 containerd,若需兼容 Docker:

      # 在所有节点安装 cri-dockerd
      git clone https://github.com/Mirantis/cri-dockerd.git
      cd cri-dockerd && make
      

    • API 版本废弃
      检查已废弃 API:

      kubectl convert --list-versions | grep deprecated
      

四、升级后验证
  1. 集群状态检查

    kubectl get nodes -o wide  # 所有节点 Ready
    kubectl get pods -n kube-system  # 核心组件 Running
    

  2. 证书状态复查

    kubeadm certs check-expiration | grep -v 'never'
    

  3. 网络验证

    kubectl run test --image=nginx --restart=Never
    kubectl exec test -- curl -I http://google.com
    

关键注意事项

  1. 始终在升级前备份 /etc/kubernetes/var/lib/etcd
  2. 生产环境建议先升级测试集群
  3. 关注 kubelet 与 API Server 的版本差(不超过 2 个 minor 版本)
  4. 使用 kubectl convert 处理废弃 API 资源

更多推荐