centos k8s如何更新到最新版本
CentOS环境下Kubernetes集群升级至最新版本指南
一、升级前准备:规避风险的关键步骤
-
备份核心数据
升级前必须备份集群关键数据,确保故障时可快速恢复:- 备份etcd数据库(控制平面核心数据):
etcdctl snapshot save /var/lib/etcd/backup/snapshot.db
; - 备份kubeconfig配置文件:
cp /root/.kube/config /root/.kube/config.backup
; - 备份/etc/kubernetes目录(包含集群配置):
tar -czvf k8s-config-backup.tar.gz /etc/kubernetes
。
- 备份etcd数据库(控制平面核心数据):
-
检查当前集群状态
确保集群处于健康状态,避免带病升级:- 检查控制平面组件Pod状态:
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)。
- 检查控制平面组件Pod状态:
-
确认升级路径
Kubernetes不支持跨多个次要版本跳跃升级(如1.23→1.25),必须遵循“相邻次要版本递进”规则(如1.23→1.24→1.25)。通过kubectl version --short
查看当前版本,在官方升级文档中确认目标版本的兼容性。 -
检查组件兼容性
确保周边组件与目标K8s版本兼容:- 容器运行时:K8s 1.25+要求containerd 1.6+(Docker已弃用);
- 网络插件:Calico 3.24+支持K8s 1.25,Flannel 0.20.0+支持K8s 1.25;
- 工具链:kubectl版本需与集群版本相差不超过1个次要版本(如1.24集群需使用1.23-1.25版本的kubectl)。
二、核心升级步骤:以kubeadm部署的集群为例
1. 升级Master节点(控制平面)
(1)升级kubeadm工具
在Master节点上,使用yum安装最新版本的kubeadm(需提前配置kubernetes官方repo):
sudo yum update -y kubeadm --disableexcludes=kubernetes
验证kubeadm版本:kubeadm version
(需显示为目标版本,如1.29.0)。
(2)检查升级计划
运行kubeadm upgrade plan
命令,查看集群可升级到的版本及需要升级的组件:
sudo kubeadm upgrade plan
输出会提示当前版本、可升级的目标版本(如Recommended version: v1.29.0
)及需要升级的控制平面组件(kube-apiserver、kube-controller-manager等)。
(3)执行控制平面升级
使用kubeadm upgrade apply
命令升级控制平面组件:
sudo kubeadm upgrade apply v<
target-version>
例如升级到1.29.0:sudo kubeadm upgrade apply v1.29.0
。命令会自动下载并安装新版本的kube-apiserver、kube-controller-manager、kube-scheduler等组件。
(4)升级kubelet和kubectl
在Master节点上升级kubelet和kubectl:
sudo yum install -y kubelet-<
target-version>
kubectl-<
target-version>
--disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
验证版本:kubelet --version
、kubectl version --short
(需显示为目标版本)。
(5)解除Master节点保护
升级完成后,将Master节点标记为可调度,恢复其承载Pod的能力:
kubectl uncordon <
master-node-name>
例如:kubectl uncordon k8s-master
。
2. 升级Worker节点(工作节点)
(1)逐个升级Worker节点
为避免集群中断,每次仅升级1个Worker节点,重复以下步骤直至所有节点升级完成。
(2)腾空节点
将节点标记为不可调度,并驱逐所有Pod(Pod会被自动调度到其他节点):
kubectl drain <
worker-node-name>
--ignore-daemonsets --delete-emptydir-data
例如:kubectl drain k8s-node1
。
(3)升级kubeadm
在Worker节点上安装与Master节点相同版本的kubeadm:
sudo yum install -y kubeadm-<
target-version>
--disableexcludes=kubernetes
验证kubeadm版本:kubeadm version
。
(4)升级kubelet和kubectl
同Master节点步骤,升级kubelet和kubectl并重启服务:
sudo yum install -y kubelet-<
target-version>
kubectl-<
target-version>
--disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
验证版本:kubelet --version
、kubectl version --short
。
(5)加入集群
使用kubeadm upgrade node
命令将节点升级到目标版本,并重新加入集群:
sudo kubeadm upgrade node
sudo systemctl restart kubelet
升级完成后,节点会自动同步新版本的组件。
(6)恢复节点调度
将节点标记为可调度:
kubectl uncordon <
worker-node-name>
例如:kubectl uncordon k8s-node1
。
三、升级后验证:确保集群正常运行
-
检查集群状态
确认所有节点状态为Ready
:kubectl get nodes -o wide
;
确认所有Pod状态为Running
:kubectl get pods --all-namespaces --field-selector status.phase=Running
。 -
验证组件版本
检查控制平面组件版本:kubectl version --short
(需显示为目标版本);
检查kubelet版本:ssh < node-name> "kubelet --version"
(所有节点需一致)。 -
检查业务应用
确认业务Pod正常运行:kubectl get pods -n < namespace>
;
检查应用日志:kubectl logs < pod-name> -n < namespace>
;
验证应用功能(如访问Ingress、数据库连接等)。
四、注意事项:保障升级成功率
- 分批升级:大型集群可采用“控制平面→部分工作节点→剩余工作节点”的分批策略,减少业务影响;
- 监控集群:升级过程中使用Prometheus、Grafana等工具监控集群状态(如CPU、内存、Pod调度情况);
- 回退预案:若升级失败,可通过
kubeadm upgrade revert
命令回退到上一版本,并恢复etcd备份数据; - 测试环境验证:生产环境升级前,务必在测试环境模拟升级流程,排查潜在问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s如何更新到最新版本
本文地址: https://pptw.com/jishu/727512.html