kubectl version查看当前集群版本,在官方升级文档中确认目标版本的兼容性。kubectl get pods -n kube-system -l component=kube-apiserver(需全部Running);kubectl get nodes(所有节点需为Ready);kubectl get pods --all-namespaces --field-selector status.phase!=Running(无CrashLoopBackOff或Error状态的Pod)。ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-snapshot-$(date +%F).db
cp -r /etc/kubernetes /etc/kubernetes.backup。containerd(Docker已弃用),需升级到兼容版本(如containerd 1.6+);kubectl版本需与集群版本相差不超过1个次要版本(如集群1.24,kubectl需为1.23-1.25)。控制平面是集群核心,需优先升级,步骤如下:
升级kubeadm工具
kubeadm是升级控制平面的关键工具,需先升级到目标版本:
sudo yum install -y kubeadm-<目标版本> --disableexcludes=kubernetes
sudo apt update && sudo apt install -y kubeadm=<目标版本> -V
安装后通过kubeadm version验证版本是否正确。
检查升级计划
运行kubeadm upgrade plan查看集群可升级到的版本及需要升级的组件(如kube-apiserver、kube-controller-manager等),确认无误后继续。
应用升级
执行kubeadm upgrade apply <目标版本>(如kubeadm upgrade apply v1.25.0),该命令会自动升级控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler)及kubelet配置文件。升级完成后,重启控制平面组件:
sudo systemctl daemon-reload
sudo systemctl restart kube-apiserver kube-controller-manager kube-scheduler
升级kubelet和kubectl
sudo yum install -y kubelet-<目标版本> --disableexcludes=kubernetes(CentOS);sudo apt install -y kubectl=<目标版本> -V(Ubuntu);sudo systemctl daemon-reload && sudo systemctl restart kubelet。工作节点负责运行Pod,需在控制平面升级完成后逐个升级,确保集群始终有可用节点承载业务:
标记节点为不可调度
避免新Pod调度到待升级节点:
kubectl cordon <节点名称>
驱逐节点上的Pod
将节点上的Pod安全驱逐到其他节点(--ignore-daemonsets忽略DaemonSet管理的Pod,--force强制驱逐):
kubectl drain <节点名称> --ignore-daemonsets --force
升级kubelet和kubectl
步骤同控制平面节点的kubelet/kubectl升级(见上文)。
重启kubelet
sudo systemctl daemon-reload && sudo systemctl restart kubelet
标记节点为可调度
升级完成后,允许新Pod调度到该节点:
kubectl uncordon <节点名称>
重复操作
依次升级所有工作节点,确保集群高可用。
检查节点状态
确认所有节点已升级到目标版本且状态正常:
kubectl get nodes -o wide
输出中VERSION列应显示为目标版本(如v1.25.0),STATUS为Ready。
检查Pod状态
确认所有Pod正常运行:
kubectl get pods --all-namespaces
无CrashLoopBackOff、Error或Pending状态的Pod(短暂ContainerCreating属正常)。
验证业务功能
检查核心业务应用(如数据库、Web服务)的可用性(如访问接口、查询数据),确保升级未影响业务逻辑。
ETCDCTL_API=3 etcdctl snapshot restore恢复);通过以上步骤,可平稳完成Linux环境下K8S集群的版本升级,兼顾稳定性与新特性。升级过程中需严格遵循“备份→检查→升级→验证”的流程,确保业务连续性。