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,再执行控制平面升级,最后升级 kubelet 和 kubectl。
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说明
这类跨多版本升级的关键,不在于命令本身,而在于节奏控制:
- 一次只升一个主版本。
- 每一步都确认集群状态正常后再继续。
- 升级前保留可用备份,避免故障后无法回退。