Linux下如何升级K8S版本
Linux下升级K8S版本的分步指南(以kubeadm部署为例)
一、升级前准备:规避风险的关键
- 明确升级路径
K8s遵循“相邻次要版本递进”原则(如1.23→1.24→1.25),禁止跨多个次要版本跳跃升级(如1.22→1.25)。需通过kubectl version
查看当前集群版本,在官方升级文档中确认目标版本的兼容性。 - 检查集群健康状态
升级前必须确保集群无异常,关键检查项:- 控制平面组件状态:
kubectl get pods -n kube-system -l component=kube-apiserver
(需全部Running
); - 节点状态:
kubectl get nodes
(所有节点需为Ready
); - Pod运行状态:
kubectl get pods --all-namespaces --field-selector status.phase!=Running
(无CrashLoopBackOff
或Error
状态的Pod)。
- 控制平面组件状态:
- 备份关键数据
- 备份etcd数据(etcd是集群状态存储核心):
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-snapshot-$(date +%F).db
- 备份配置文件:
cp -r /etc/kubernetes /etc/kubernetes.backup
。
- 备份etcd数据(etcd是集群状态存储核心):
- 确认组件兼容性
- 网络插件(如Calico、Flannel):需升级到支持目标K8s版本的版本(如Calico 3.24支持K8s 1.25);
- 容器运行时:K8s 1.25+推荐使用
containerd
(Docker已弃用),需升级到兼容版本(如containerd 1.6+); - 工具链:
kubectl
版本需与集群版本相差不超过1个次要版本(如集群1.24,kubectl需为1.23-1.25)。
二、升级控制平面节点(Master节点)
控制平面是集群核心,需优先升级,步骤如下:
-
升级kubeadm工具
kubeadm是升级控制平面的关键工具,需先升级到目标版本:- CentOS/RHEL:
sudo yum install -y kubeadm-< 目标版本> --disableexcludes=kubernetes
- Ubuntu/Debian:
sudo apt update & & sudo apt install -y kubeadm=< 目标版本> -V
安装后通过
kubeadm version
验证版本是否正确。 - CentOS/RHEL:
-
检查升级计划
运行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
- 升级kubelet:
sudo yum install -y kubelet-< 目标版本> --disableexcludes=kubernetes
(CentOS); - 升级kubectl:
sudo apt install -y kubectl=< 目标版本> -V
(Ubuntu); - 重启kubelet:
sudo systemctl daemon-reload & & sudo systemctl restart kubelet
。
- 升级kubelet:
三、升级工作节点(Worker节点)
工作节点负责运行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服务)的可用性(如访问接口、查询数据),确保升级未影响业务逻辑。
五、常见问题与注意事项
- 版本跳过:禁止跨多个次要版本升级,否则可能导致组件不兼容(如1.22→1.25可能引发kube-apiserver启动失败);
- etcd备份:etcd数据丢失将导致集群无法恢复,升级前必须备份(可通过
ETCDCTL_API=3 etcdctl snapshot restore
恢复); - 网络插件:升级前需确认网络插件支持目标版本(如Calico 3.23不支持K8s 1.25,需升级到3.24+);
- 测试环境:生产环境升级前,务必在测试环境验证步骤(如模拟节点驱逐、组件升级),避免生产故障。
通过以上步骤,可平稳完成Linux环境下K8S集群的版本升级,兼顾稳定性与新特性。升级过程中需严格遵循“备份→检查→升级→验证”的流程,确保业务连续性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux下如何升级K8S版本
本文地址: https://pptw.com/jishu/733620.html