K8s 集群升级与备份恢复(kubeadm upgrade + etcd 快照 + Velero)
2026-08-11 09:57:40 # Kubernetes

一、背景

集群需要安全升级以修复 CVE、获取新特性;同时集群数据与业务数据必须可恢复。本文给出 kubeadm 升级 + etcd 快照 + Velero 备份方案。

二、环境信息

  • kubeadm 集群 v1.28 → v1.29
  • etcd 3.5(堆叠式)
  • Velero 1.12(对象存储后端)

三、操作要点

1. 升级前备份

1
2
# etcd 快照
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 /backup/etcd-$(date +%F).db

2. 升级控制面(逐节点)

1
2
3
4
5
apt-get update && apt-get install -y kubeadm=1.29.x-00
kubeadm upgrade plan
kubeadm upgrade apply v1.29.x
apt-get install -y kubelet=1.29.x-00 kubectl=1.29.x-00
systemctl restart kubelet

3. 升级工作节点

1
2
3
4
kubectl drain gpu-node-1 --ignore-daemonsets
apt-get install -y kubelet=1.29.x-00
systemctl restart kubelet
kubectl uncordon gpu-node-1

4. Velero 备份业务

1
velero backup create daily --include-namespaces team-a --ttl 168h

四、验证方式

1
2
3
4
kubectl version --short
kubectl get nodes # 全部 Ready,版本为新
kubectl get pods -A # 业务正常
ETCDCTL_API=3 etcdctl snapshot status /backup/etcd-*.db # 校验快照

五、常见问题

  • 跨 minor 版本跳跃:必须逐版本升级(1.28→1.29→1.30),不可跳
  • etcd 快照恢复etcdctl snapshot restore 后替换manifest
  • 升级卡住:apiserver 与 CNI 版本不兼容,先升级 CNI
  • 插件未同步升级:Calico/Cilium、device-plugin 需匹配 K8s 版本