Velero 实现 Kubernetes 全量备份方案

Velero 是专为 Kubernetes 设计的开源备份工具,支持集群资源、持久卷的全量备份与灾难恢复。以下是完整实现方案:

一、核心备份原理
  1. 资源备份
    通过 Kubernetes API 捕获 YAML 声明文件,存储为 JSON 格式。备份对象包括:

    • 工作负载(Deployment/StatefulSet)
    • 配置(ConfigMap/Secret)
    • 服务(Service/Ingress)
    • 自定义资源(CRD)
  2. 持久卷备份
    利用云厂商快照能力(如 AWS EBS Snapshot),通过集成插件实现数据一致性备份,满足 RPO 要求。

二、部署流程
# 1. 安装 Velero CLI
brew install velero  # macOS
或
curl -LO https://github.com/vmware-tanzu/velero/releases/download/v1.10.0/velero-v1.10.0-linux-amd64.tar.gz

# 2. 配置云存储(以 AWS S3 为例)
velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.6.0 \
  --bucket velero-backups \
  --backup-location-config region=us-west-1 \
  --snapshot-location-config region=us-west-1

三、全量备份操作
# 备份整个命名空间(含持久卷)
velero backup create full-backup-2023 --include-namespaces=prod

# 备份整个集群(排除 kube-system)
velero backup create cluster-backup --exclude-namespaces=kube-system

四、备份验证
# 查看备份状态
velero backup describe full-backup-2023 --details

# 检查持久卷快照
velero snapshot get

五、恢复流程
# 恢复命名空间资源
velero restore create --from-backup full-backup-2023

# 恢复持久卷数据(自动关联 PV/PVC)
velero restore create --from-backup full-backup-2023 --restore-volumes

六、关键配置项
  1. 备份策略

    apiVersion: velero.io/v1
    kind: Schedule
    spec:
      schedule: "0 3 * * *"  # 每日凌晨3点全量备份
      template:
        includeNamespaces: ["prod"]
        snapshotVolumes: true
    

  2. 存储位置优化

    • 启用 --use-restic 实现非云环境卷备份
    • 配置 volume-snapshot-locations 指定快照区域
七、灾难恢复场景验证
# 模拟集群故障后恢复
velero restore create --from-backup cluster-backup --wait

八、注意事项
  1. 数据一致性
    对有状态应用(如数据库)需预先执行 kubectl annotate pod/db app.velero.io/backup-volumes=datadir 确保静默写入

  2. 备份加密
    启用 --cacert--encrypted 参数保护备份数据

  3. 监控指标
    集成 Prometheus 监控 velero_backup_success_total 等关键指标

最佳实践:建议结合 Velero 的定期全量备份(每日)+ Restic 增量备份(每小时),实现 $RPO<1h$ 且 $RTO<30min$ 的业务连续性保障。测试环境应每月执行恢复演练验证备份有效性。

更多推荐