在 CentOS 上升级 Kubernetes(k8s) 需要分 场景 和 版本情况。下面我先给你一个 通用、安全、生产可用的升级流程,再补充 常见问题和注意事项。
kubectl version
kubeadm version
yum list --showduplicates kubeadm --disableexcludes=kubernetes
✅ 推荐升级策略:
逐个 minor 版本升级,例如 1.26 → 1.27 → 1.28
cp -r /etc/kubernetes /etc/kubernetes.bak
etcdctl snapshot save /backup/etcd-snapshot.db
yum install -y kubeadm-1.28.x-0 --disableexcludes=kubernetes
kubeadm version
kubeadm upgrade plan
确认输出中显示的版本。
kubeadm upgrade apply v1.28.x
或(多 master):
kubeadm upgrade node
yum install -y kubelet-1.28.x-0 kubectl-1.28.x-0 --disableexcludes=kubernetes
重启 kubelet:
systemctl daemon-reexec
systemctl restart kubelet
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
yum install -y kubeadm-1.28.x-0 --disableexcludes=kubernetes
kubeadm upgrade node
yum install -y kubelet-1.28.x-0 kubectl-1.28.x-0 --disableexcludes=kubernetes
systemctl restart kubelet
kubectl uncordon <node-name>
kubectl get nodes
kubectl version
所有节点版本应一致。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
kubeadm upgrade plan 卡住✅ 检查:
systemctl status kubelet
journalctl -xeu kubelet
常见原因:
✅ 不要手动升级 etcd,由 kubeadm 控制
| 当前版本 | 建议目标 |
|---|---|
| 1.20–1.24 | 1.28 LTS |
| 1.25–1.27 | 1.29 / 1.30 |
| CentOS 7 | 迁移 OS |
你可以直接告诉我:
我可以给你 定制升级方案 + 回滚方案 ✅