温馨提示×

centos k8s部署如何备份

小樊
46
2026-07-09 14:34:46
栏目: 智能运维

CentOS 上部署 Kubernetes(k8s) 的备份,一般要分 三层 来考虑:etcd 数据、Kubernetes 资源、持久化存储(PV)。下面给你一套生产环境常见做法


一、etcd 备份(最重要 ✅)

Kubernetes 的所有集群状态都存储在 etcd 中,这是最核心的备份

1️⃣ 查看 etcd 信息

ps -ef | grep etcd

kubectl -n kube-system get pod -l component=etcd

常见路径:

  • etcd 证书:/etc/kubernetes/pki/etcd/
  • etcd 数据目录:/var/lib/etcd/

2️⃣ 使用 etcdctl 备份

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

3️⃣ 定时备份(cron)

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

二、Kubernetes 资源备份(YAML)

用于恢复 Deployment / Service / ConfigMap 等。

1️⃣ 备份所有资源

kubectl get all --all-namespaces -o yaml > k8s-all-backup.yaml

2️⃣ 分类备份(推荐)

kubectl get -o yaml --all-namespaces \
  configmap,secret,deployment,service,ingress,pvc > k8s-resources.yaml

✅ 可配合 Git 管理版本


三、持久化存储(PV / PVC)备份

⚠️ etcd 不包含真实数据

方式 1:存储级备份(推荐)

  • Ceph / NAS / 云盘:使用快照
  • 本地存储:rsync / tar
rsync -avz /data/pv-data /backup/pv-data-$(date +%F)

方式 2:Pod 内数据备份

kubectl exec -n <ns> <pod> -- tar czf - /data > data.tar.gz

四、如果是 kubeadm 部署(常见)

备份 kubeadm 配置

cp -r /etc/kubernetes /backup/k8s-config-$(date +%F)

包含:

  • admin.conf
  • kubelet.conf
  • manifests
  • pki 证书

五、恢复示例(etcd)

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 / 二进制)和存储类型,给你一套 完整可用的备份脚本

0