Kubernetes在CentOS上的备份与恢复策略
一 备份范围与总体策略
- 备份对象应覆盖四类关键资产:
- etcd 数据(集群状态与控制面配置);2) Kubernetes 资源对象(如 Deployment、Service、ConfigMap、Secret、PVC/PV 等);3) 持久卷数据(数据库、日志、业务文件等);4) 节点与平台配置(如 kubelet 配置、容器运行时、系统/应用配置)。
- 策略要点:
- 明确备份频率与保留周期(如每日增量、每周全量、保留 7–30 天),并落地为自动化任务与异地/多区域存储。
- 对关键业务实施定期恢复演练与备份完整性校验,并建立监控告警与操作记录。
- 在 CentOS 环境中,结合系统工具(如 rsync、tar)与 Kubernetes 原生/开源方案(如 Velero、CSI 快照)形成分层备份体系。
二 etcd 备份与恢复
- 备份步骤(推荐 API v3 + 证书直连):
- 在 etcd 节点或具备访问权限的主机上设置环境变量:
export ETCDCTL_API=3
ETCD_ENDPOINTS=“https://127.0.0.1:2379”
CERT_DIR=“/etc/kubernetes/pki/etcd”
- 执行快照并校验:
etcdctl --endpoints=$ETCD_ENDPOINTS \
–cacert=$CERT_DIR/ca.crt \
–cert=$CERT_DIR/healthcheck-client.crt \
–key=$CERT_DIR/healthcheck-client.key \
snapshot save snapshot.db
etcdctl --write-out=table snapshot status snapshot.db
- 建议通过 CronJob 定时执行并上传快照至安全存储。
- 恢复步骤(控制面停机窗口):
- 停止控制面组件(单节点或先停 kube-apiserver 再停 etcd):
systemctl stop kube-apiserver etcd
- 备份并清理旧数据目录:
mv /var/lib/etcd /var/lib/etcd.bak-$(date +%F)
- 从快照恢复(注意替换节点名与地址为实际拓扑):
etcdctl snapshot restore snapshot.db \
–name=etcd-node1 \
–initial-cluster=“etcd-node1=https://10.0.0.1:2380” \
–initial-cluster-token=etcd-cluster \
–initial-advertise-peer-urls=https://10.0.0.1:2380 \
–data-dir=/var/lib/etcd
chown -R etcd:etcd /var/lib/etcd
- 启动服务并校验:
systemctl start etcd kube-apiserver
etcdctl --endpoints=$ETCD_ENDPOINTS endpoint health
kubectl get pods -A
- 多节点 etcd:各节点按相同拓扑参数恢复,确保 –initial-cluster 一致性与节点名称匹配。
三 应用与持久卷的备份与恢复
- 卷快照(CSI 标准方式):
- 部署 CSI Snapshotter 与 VolumeSnapshotClass,按需创建 VolumeSnapshot,用于时间点恢复或克隆;在云上可配合云盘 CSI(如 EBS)实现快照生命周期管理。
- 应用级备份(数据库一致性优先):
- 对 MySQL 使用 mysqldump,对 PostgreSQL 使用 pg_dump 等工具在应用内获取一致性备份,再与对象存储或备份系统归档。
- 集群资源与迁移(Velero):
- 安装 Velero(如对接 MinIO/S3),创建 Backup 与 Restore,支持按 命名空间/标签/资源类型 选择,可做跨集群迁移与灾难恢复:
- 备份:velero backup create nginx-backup --include-namespaces nginx-example --wait
- 恢复:velero restore create --from-backup nginx-backup
- 节点/外部数据:对节点上落盘的 PV 数据或关键目录,使用 rsync/tar 脚本配合 crontab 做定期归档与异地拷贝。
四 实战备份方案示例
- 方案A(控制面优先,适用于小规模或测试):
- 每日对 etcd 做快照并上传对象存储;每周对关键 命名空间 做 Velero 全量备份;数据库使用应用内备份;关键节点目录用 rsync 归档。
- 方案B(生产级分层,控制面+应用层+卷快照):
- 控制面:每日 etcd 快照 + 每周全量;
- 应用层:Velero 按日/周备份(含 Secret/ConfigMap 等);
- 数据层:启用 CSI 快照(如 EBS 或兼容 CSI),对数据库执行应用级一致性备份;
- 异地:对象存储开启跨区域复制;定期恢复演练与备份校验。
五 恢复流程与注意事项
- 恢复流程建议:
- 明确恢复目标(仅资源、含卷、时间点);
- 恢复 etcd(如需回滚控制面);
- 恢复 Kubernetes 资源(Velero Restore);
- 恢复 持久卷(卷快照克隆或应用级导入);
- 校验业务可用性与数据一致性。
- 关键注意事项:
- 版本兼容:确保 etcdctl/etcd 与集群版本匹配,备份与恢复工具版本兼容;
- 最小化停机:控制面恢复窗口内串行操作,先停 kube-apiserver 再停 etcd;
- 权限与密钥:证书、密钥、凭据文件妥善备份与访问控制;
- 安全与合规:备份加密与异地/多区域存放,满足审计与合规;
- 演练与监控:定期恢复演练、失败告警与记录归档。