Ubuntu K8s如何进行版本升级
导读:Ubuntu系统下Kubernetes版本升级指南(基于kubeadm部署) 一、升级前准备:规避风险的关键步骤 明确升级路径 Kubernetes不支持跨多个次要版本跳跃升级(如从1.22直接升级到1.25),必须遵循“相邻次要版本递进...
Ubuntu系统下Kubernetes版本升级指南(基于kubeadm部署)
一、升级前准备:规避风险的关键步骤
- 明确升级路径
Kubernetes不支持跨多个次要版本跳跃升级(如从1.22直接升级到1.25),必须遵循“相邻次要版本递进”规则(如1.22→1.23→1.24→1.25)。可通过kubectl version
查看当前集群版本,在官方升级文档中确认目标版本的兼容性。 - 检查集群健康状态
升级前必须确保集群处于稳定状态,避免因原有问题导致升级失败:- 控制平面组件:
kubectl get pods -n kube-system -l component=kube-apiserver
(API Server)、-l component=etcd
(Etcd)、-l component=kube-controller-manager
(Controller Manager)、-l component=kube-scheduler
(Scheduler),确认所有Pod状态为Running
。 - 节点状态:
kubectl get nodes
,确认所有节点状态为Ready
。 - 工作负载状态:
kubectl get pods --all-namespaces --field-selector status.phase!=Running
,确认无CrashLoopBackOff
、Error
等异常状态的Pod。
- 控制平面组件:
- 备份关键数据
- 备份etcd数据(集群核心数据):
sudo kubeadm etcd snapshot create --config /etc/kubernetes/admin.conf
。 - 备份Kubernetes配置文件:
sudo cp -r /etc/kubernetes /etc/kubernetes.bak
。
- 备份etcd数据(集群核心数据):
- 准备工具与环境
- 确保
kubeadm
、kubelet
、kubectl
版本与当前集群版本一致(可通过apt-mark hold kubeadm kubelet kubectl
锁定版本,避免自动升级)。 - 配置Ubuntu软件源(以Kubernetes 1.29为例):创建
/etc/apt/sources.list.d/kubernetes.list
文件,内容为deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/ /
,并导入GPG密钥。
- 确保
二、核心升级步骤:分阶段完成集群升级
1. 升级控制平面节点(Master节点)
控制平面是集群核心,需优先升级,且每次仅升级一个控制平面节点(若有高可用集群)。
-
升级kubeadm工具
解锁kubeadm
包(若之前锁定),安装目标版本,再锁定:sudo apt-mark unhold kubeadm sudo apt update sudo apt install -y kubeadm=1.29.2-1.1 # 替换为目标版本(如1.29.2) sudo apt-mark hold kubeadm
验证
kubeadm
版本:kubeadm version
。 -
检查升级计划
运行kubeadm upgrade plan
,查看集群是否可升级及推荐目标版本(如v1.29.2
),并确认配置文件是否需要更新。 -
应用升级
执行升级命令(以目标版本v1.29.2
为例):sudo kubeadm upgrade apply v1.29.2 --etcd-upgrade=false # 若etcd为外部部署,添加--etcd-upgrade=false
根据提示确认升级(输入
yes
),等待命令执行完成。 -
升级控制平面组件配置
升级完成后,更新控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler)的配置:sudo kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2) sudo systemctl restart kubelet
2. 升级工作节点(Worker节点)
工作节点升级需逐个进行(或分批,确保剩余节点能承载业务流量),避免全量升级导致业务中断。
-
腾空节点
将节点标记为不可调度并驱逐所有Pod(避免升级过程中Pod被调度到该节点):kubectl drain < node-name> --ignore-daemonsets --force # 替换< node-name> 为目标节点名称
升级完成后,解除节点保护(允许Pod重新调度):
kubectl uncordon < node-name>
-
升级kubelet和kubectl
在工作节点上执行与Master节点相同的步骤,升级kubelet
和kubectl
:sudo apt-mark unhold kubelet kubectl sudo apt update sudo apt install -y kubelet=1.29.2-1.1 kubectl=1.29.2-1.1 # 替换为目标版本 sudo apt-mark hold kubelet kubectl sudo systemctl daemon-reload sudo systemctl restart kubelet
-
升级节点本身
在Master节点上执行kubeadm upgrade node
,将工作节点升级到目标版本:sudo kubeadm upgrade node
升级完成后,
kubectl get nodes
会显示节点状态为Ready
,且版本号更新为目标版本。
三、升级后验证:确保集群正常运行
- 检查集群状态
运行kubectl get nodes
,确认所有节点状态为Ready
,且版本号均更新为目标版本。 - 检查工作负载状态
运行kubectl get pods --all-namespaces
,确认所有Pod状态为Running
,无异常状态。 - 验证新特性
根据目标版本的新特性(如K8s 1.25支持PodSecurity标准),进行简单测试(如创建符合PodSecurity约束的Pod),确保新特性正常工作。
四、注意事项:避免升级失败的常见陷阱
- 版本兼容性:确保
kubeadm
、kubelet
、kubectl
版本一致,且与集群版本匹配(如kubectl
版本需与集群版本相差不超过1个次要版本)。 - 网络插件兼容性:升级前检查网络插件(如Calico、Flannel)是否支持目标K8s版本(如Calico 3.24支持K8s 1.25),必要时升级插件。
- 业务低峰期操作:避免在业务高峰期升级,减少对业务的影响。
- 回退预案:若升级失败,可通过
kubeadm upgrade revert
回退到上一个版本,并恢复etcd备份数据。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu K8s如何进行版本升级
本文地址: https://pptw.com/jishu/733299.html