在Debian上更新K8s版本的步骤(以kubeadm部署为例)
备份关键数据
备份集群配置(/etc/kubernetes/目录)和etcd数据(etcd是K8s的核心存储组件),防止升级失败导致数据丢失。etcd备份命令示例:
ETCDCTL_API=3 etcdctl --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 snapshot save /data/etcd/etcd_bak.db
检查集群健康状态
确保集群所有节点(Master/Worker)状态为Ready,无CrashLoopBackOff或Error的Pod:
kubectl get nodes # 检查节点状态
kubectl get pods --all-namespaces --field-selector=status.phase!=Running # 检查异常Pod
确认升级路径
Kubernetes仅支持相邻小版本递进升级(如1.24→1.25),禁止跨大版本跳跃(如1.24→1.26)。通过kubectl version查看当前版本,在官方文档中确认目标版本的兼容性。
更新系统包
确保Debian系统和软件包为最新状态:
sudo apt update && sudo apt upgrade -y
升级kubeadm工具
kubeadm是升级控制平面的核心工具,需先升级到目标版本(以1.25为例):
sudo apt install -y kubeadm=1.25.0-00
sudo apt-mark hold kubeadm # 锁定版本,避免意外升级
检查升级计划
查看当前集群可升级的版本及需要修改的组件:
sudo kubeadm upgrade plan
输出会显示目标版本(如v1.25.0)和需要升级的组件(如kube-apiserver、kube-controller-manager)。
执行控制平面升级
应用升级命令,自动更新控制平面组件并生成新的kubelet配置:
sudo kubeadm upgrade apply v1.25.0
升级kubelet和kubectl
更新Master节点上的kubelet和kubectl,确保与集群版本一致:
sudo apt install -y kubelet=1.25.0-00 kubectl=1.25.0-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
解除Master节点保护
升级完成后,允许Master节点重新调度Pod:
kubectl uncordon k8s-master # 替换为你的Master节点名称
逐个升级工作节点
每次仅升级1个节点,确保集群剩余节点能承载业务流量。
腾空节点
将节点标记为不可调度,并驱逐所有Pod(--ignore-daemonsets忽略DaemonSet管理的Pod,--delete-emptydir-data删除EmptyDir数据):
kubectl cordon k8s-node1 # 替换为你的Worker节点名称
kubectl drain k8s-node1 --ignore-daemonsets --delete-emptydir-data
升级工作节点组件
在工作节点上重复“升级kubeadm、kubelet、kubectl”的步骤(与Master节点一致):
sudo apt install -y kubeadm=1.25.0-00 kubelet=1.25.0-00 kubectl=1.25.0-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
执行节点升级
使用kubeadm升级节点,同步新版本配置:
sudo kubeadm upgrade node
恢复节点调度
升级完成后,允许节点重新接收Pod调度:
kubectl uncordon k8s-node1
验证节点状态
确认节点已恢复Ready状态:
kubectl get nodes
检查集群状态
确保所有节点(Master/Worker)状态为Ready,核心组件(如kube-apiserver、kube-controller-manager)运行正常:
kubectl get nodes
kubectl get pods -n kube-system
测试业务功能
访问集群内的业务Pod,验证服务是否正常(如通过curl访问应用接口)。
清理旧资源
删除升级过程中生成的临时备份文件(如etcd备份),释放集群资源。
kubeadm upgrade revert命令回滚到上一个版本,并恢复etcd备份数据。