在Debian上如何更新K8s版本
在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
查看当前版本,在官方文档中确认目标版本的兼容性。
二、升级控制平面节点(Master节点)
-
更新系统包
确保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节点名称
三、升级工作节点(Worker节点)
-
逐个升级工作节点
每次仅升级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备份),释放集群资源。
注意事项
- 版本兼容性:升级前确认容器运行时(如containerd)、网络插件(如Calico)、Ingress控制器(如Nginx Ingress)与目标K8s版本兼容。
- 滚动升级:工作节点需逐个升级,避免全量升级导致业务中断。
- 回滚预案:若升级失败,可通过
kubeadm upgrade revert
命令回滚到上一个版本,并恢复etcd备份数据。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 在Debian上如何更新K8s版本
本文地址: https://pptw.com/jishu/731561.html