1. 升级前的准备工作
ETCDCTL_API=3 etcdctl snapshot save命令对etcd数据进行快照(需指定etcd endpoint、cert路径等参数);同时备份Kubernetes配置文件(如/etc/kubernetes/admin.conf、/etc/kubernetes/manifests下的静态Pod清单)及应用配置(如Deployment、Service的YAML文件),防止升级过程中数据丢失。kubectl get nodes确认所有节点处于Ready状态;使用kubectl get pods --all-namespaces检查所有Pod是否正常运行(无CrashLoopBackOff、Pending等异常状态);执行kubectl describe node <node-name>获取节点详细诊断信息,排除潜在问题。2. 升级过程中的关键操作
kubeadm upgrade plan检查升级计划(确认可升级的目标版本),再执行kubeadm upgrade apply <new-version>升级控制平面组件(如kube-apiserver、etcd、kube-controller-manager);工作节点升级时,先在控制平面节点上更新kubeadm版本(sudo apt-get install -y kubeadm=<new-version>),再在工作节点上执行sudo kubeadm upgrade node升级节点,最后重启kubelet服务(sudo systemctl restart kubelet)。sudo apt-get update && sudo apt-get install -y kubeadm=<new-version> kubelet=<new-version> kubectl=<new-version>);若官方源版本滞后,需更换为最新的Kubernetes软件包仓库(如pkgs.k8s.io/core:/stable:/v<version>/deb/),并导入签名密钥以保证软件包安全性。/etc/kubernetes/tmp/kubeadm-kubelet-config-*.yaml);升级后,需检查新版本的默认配置(如/etc/kubernetes/manifests下的静态Pod清单、/etc/kubernetes/kubelet.conf),根据业务需求调整配置(如Pod资源限制、网络插件参数),确保配置与新版本兼容。3. 升级后的验证与收尾
kubectl get nodes确认所有节点状态变为Ready;通过kubectl get pods --all-namespaces检查所有Pod是否正常运行(无异常状态);执行kubectl logs -n kube-system <component-pod-name>查看核心组件(如kube-apiserver、etcd)的日志,排查潜在错误。curl或浏览器访问Service的ClusterIP或Ingress地址),确认业务逻辑正常;检查应用日志(如kubectl logs <deployment-pod-name>),确保无因升级导致的业务异常(如连接超时、接口报错)。docker rmi <old-image-name>)和临时文件(如/etc/kubernetes/tmp下的备份配置),释放磁盘空间;同时,更新监控告警规则(如Prometheus的告警阈值),适配新版本的指标变化。