在 CentOS 上运行的 Kubernetes(k8s),备份通常分为 3 类:
1️⃣ etcd 备份(集群核心)
2️⃣ 应用数据备份(PVC / 数据库)
3️⃣ 集群资源配置备份(YAML / 对象)
下面按「最常用 + 生产推荐」给你说明。
etcd 保存了 整个 k8s 集群状态,必须定期备份。
docker ps | grep 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-snapshot-$(date +%F).db
ETCDCTL_API=3 etcdctl snapshot restore \
/backup/etcd-snapshot-2026-01-21.db \
--data-dir /var/lib/etcd-restore
然后修改 /etc/kubernetes/manifests/etcd.yaml 中的 data-dir。
Velero 是 CNCF 官方备份工具,支持:
wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.0/velero-v1.13.0-linux-amd64.tar.gz
tar zxvf velero-*.tar.gz
mv velero-*/velero /usr/local/bin/
velero backup create my-backup \
--include-namespaces my-app
velero restore create --from-backup my-backup
适用于本地存储(hostPath / NFS):
kubectl exec -it pod-name -- tar czf /tmp/data.tar.gz /data
kubectl cp pod-name:/tmp/data.tar.gz ./data.tar.gz
kubectl get all --all-namespaces -o yaml > k8s-all.yaml
kubectl exec mysql-pod -- \
mysqldump -uroot -p密码 dbname > db.sql
kubectl exec pg-pod -- \
pg_dump -U user dbname > db.sql
✅ etcd 每天备份
✅ Velero 每周全量 + 每日增量
✅ 备份文件异地存储(S3 / 对象存储)
✅ 定期做 恢复演练
如果你告诉我:
我可以给你 定制备份方案 + 脚本 + crontab。