Home

Kubernetes 升级记录

这篇文章记录把 Kubernetes 集群从 1.28.2 逐步升级到 1.32.x 的做法。Kubernetes 不支持跨多个主版本直接升级,因此必须按顺序逐级推进。

1.28.2 -> 1.29.x -> 1.30.x -> 1.31.x -> 1.32.x

本文保留的是升级过程中最核心的命令和顺序,真正执行前仍然建议先在测试环境验证一轮。

升级前确认

开始之前,至少确认下面几件事:

  • 当前集群状态正常,控制平面和业务工作负载没有异常。
  • 每次只跨一个主版本,先确认目标小版本号,再执行安装。
  • 控制节点和工作节点分开处理,不要同时大面积升级。

备份关键数据

升级前先备份 etcd 和集群配置目录,这是最基本的回退保障。

# 备份 etcd
ETCD_POD=$(kubectl get pods -n kube-system -l component=etcd -o name)
kubectl exec -n kube-system $ETCD_POD -- sh -c "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 /snapshot.db"
kubectl cp -n kube-system $ETCD_POD:/snapshot.db ./etcd-snapshot.db

# 备份集群配置
cp -r /etc/kubernetes ~/kubernetes-backup

调整软件源

每升一个主版本,都要把仓库地址切换到对应版本。例如升级到 1.32 时,仓库可以这样写:

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
EOF

真正执行升级前,建议先查询当前仓库里可用的小版本:

dnf list kubeadm

控制节点升级

升级控制节点时,建议一台一台处理。先升级 kubeadm,再执行控制平面升级,最后升级 kubeletkubectl

sudo dnf install -y kubeadm-1.28.15-150500.1.1 --disableexcludes=kubernetes
sudo kubeadm upgrade apply v1.28.15

如果该控制节点还承载业务工作负载,先排空再继续:

kubectl drain master01 --ignore-daemonsets

然后升级节点组件并重启 kubelet

sudo dnf install -y kubelet-1.28.15-150500.1.1 kubectl-1.28.15-150500.1.1 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon master01

其余控制节点按照同样顺序逐台处理。

工作节点升级

工作节点不执行 kubeadm upgrade apply,重点是排空节点、升级组件并恢复调度。

# 先在控制节点执行
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

# 再到对应工作节点执行
sudo dnf install -y kubelet-1.28.5-0 kubectl-1.28.5-0 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet

节点恢复正常后,再执行:

kubectl uncordon <node-name>

验证结果

每完成一个版本阶段,都要做一次基础检查,确认可以继续下一跳升级。

# 检查节点版本
kubectl get nodes -o wide

# 检查核心组件状态
kubectl get pods -n kube-system

# 检查客户端和服务端版本
kubectl version --short

# 检查 kubeadm 版本
kubeadm version

说明

这类跨多版本升级的关键,不在于命令本身,而在于节奏控制:

  • 一次只升一个主版本。
  • 每一步都确认集群状态正常后再继续。
  • 升级前保留可用备份,避免故障后无法回退。
Kubernetes