K8s 集群升级与备份恢复(kubeadm upgrade + etcd 快照 + Velero)
一、背景
集群需要安全升级以修复 CVE、获取新特性;同时集群数据与业务数据必须可恢复。本文给出 kubeadm 升级 + etcd 快照 + Velero 备份方案。
二、环境信息
- kubeadm 集群 v1.28 → v1.29
- etcd 3.5(堆叠式)
- Velero 1.12(对象存储后端)
三、操作要点
1. 升级前备份
1 2
| 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 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 版本