centos

centos k8s如何更新到最新版本

小樊
47
2025-10-15 13:30:10
栏目: 智能运维

CentOS环境下Kubernetes集群升级至最新版本指南

一、升级前准备:规避风险的关键步骤

  1. 备份核心数据
    升级前必须备份集群关键数据,确保故障时可快速恢复:

    • 备份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
  2. 检查当前集群状态
    确保集群处于健康状态,避免带病升级:

    • 检查控制平面组件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(需无CrashLoopBackOffError状态的Pod)。
  3. 确认升级路径
    Kubernetes不支持跨多个次要版本跳跃升级(如1.23→1.25),必须遵循“相邻次要版本递进”规则(如1.23→1.24→1.25)。通过kubectl version --short查看当前版本,在官方升级文档中确认目标版本的兼容性。

  4. 检查组件兼容性
    确保周边组件与目标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 --versionkubectl 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 --versionkubectl version --short

(5)加入集群
使用kubeadm upgrade node命令将节点升级到目标版本,并重新加入集群:

sudo kubeadm upgrade node
sudo systemctl restart kubelet

升级完成后,节点会自动同步新版本的组件。

(6)恢复节点调度
将节点标记为可调度:

kubectl uncordon <worker-node-name>

例如:kubectl uncordon k8s-node1

三、升级后验证:确保集群正常运行

  1. 检查集群状态
    确认所有节点状态为Readykubectl get nodes -o wide
    确认所有Pod状态为Runningkubectl get pods --all-namespaces --field-selector status.phase=Running

  2. 验证组件版本
    检查控制平面组件版本:kubectl version --short(需显示为目标版本);
    检查kubelet版本:ssh <node-name> "kubelet --version"(所有节点需一致)。

  3. 检查业务应用
    确认业务Pod正常运行:kubectl get pods -n <namespace>
    检查应用日志:kubectl logs <pod-name> -n <namespace>
    验证应用功能(如访问Ingress、数据库连接等)。

四、注意事项:保障升级成功率

0
看了该问题的人还看了