在 CentOS 上部署 Kubernetes(k8s) 的备份,一般要分 三层 来考虑:etcd 数据、Kubernetes 资源、持久化存储(PV)。下面给你一套生产环境常见做法。
Kubernetes 的所有集群状态都存储在 etcd 中,这是最核心的备份。
ps -ef | grep etcd
或
kubectl -n kube-system get pod -l component=etcd
常见路径:
/etc/kubernetes/pki/etcd//var/lib/etcd/ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot-$(date +%F-%H-%M).db \
--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 saved at /backup/etcd-snapshot-xxx.db
crontab -e
0 2 * * * ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-$(date +\%F).db \
--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
用于恢复 Deployment / Service / ConfigMap 等。
kubectl get all --all-namespaces -o yaml > k8s-all-backup.yaml
kubectl get -o yaml --all-namespaces \
configmap,secret,deployment,service,ingress,pvc > k8s-resources.yaml
✅ 可配合 Git 管理版本
⚠️ etcd 不包含真实数据
rsync -avz /data/pv-data /backup/pv-data-$(date +%F)
kubectl exec -n <ns> <pod> -- tar czf - /data > data.tar.gz
cp -r /etc/kubernetes /backup/k8s-config-$(date +%F)
包含:
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \
--data-dir=/var/lib/etcd-new
然后修改 etcd 的 --data-dir 指向新目录并重启 kubelet。
| 场景 | 推荐 |
|---|---|
| 集群级备份 | etcd 快照 |
| 应用级备份 | YAML + Git |
| 数据级备份 | 存储快照 |
| 自动化 | cron + rsync + 对象存储 |
❌ 只备份 YAML,不备份 etcd
❌ 忘记备份 etcd 证书
❌ 本地盘不备份 PV 数据
如果你愿意,我可以根据你的 部署方式(kubeadm / rancher / k3s / 二进制)和存储类型,给你一套 完整可用的备份脚本。