ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Velero 在 Rook-Ceph 上跑通一次数据迁移

Velero 在 Rook-Ceph 上跑通一次数据迁移 Velero 在 Rook-Ceph 上跑通一次数据迁移【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero生产集群要做容灾演练核心数据库的数据全部落在 Rook-Ceph 的 Ceph RBD 上对象存储由同一集群的 RGW 提供。Velero 是 Kubernetes 生态的备份与迁移工具既能备份集群内对象也能对 PVC 卷做快照并把卷数据搬出去。本文按一次真实跨集群迁移的时序推进环境与凭据就绪、备份策略设计、跨集群恢复落地最后给一份故障自查清单。阶段一 · 环境与凭据就绪先弄清 RGW 签名兼容性问题Rook-Ceph 的 RGW 暴露的是 S3 兼容接口但签名实现与官方 S3 有差异。如果执行velero backup logs时看到SignatureDoesNotMatch先不要怀疑凭据本身。官方故障排除文档给出的排查方向是确认 S3 兼容层使用签名版本 4SigV4Ceph RADOS v12.2.7 及以上版本才完整支持凭据建议用 Ceph 原生账户而不是 OpenStack Keystone 这类外部身份提供者出处见 troubleshooting.md。签名问题发生在读取对象阶段元数据写入可能一直正常所以它经常在备份完成后的拉日志环节才暴露。配置 Rook-Ceph 对象存储 BSL凭据写入 secret 后安装 Velero 并指向 RGW 的 Service 地址。注意s3Url用的是集群内 Service 域名Velero 客户端在集群外解析不了它如果velero backup describe报no such host需要给 BSL 补一个客户端可达的publicUrlapiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: ceph-bsl namespace: velero spec: provider: aws objectStorage: bucket: velero-backups config: region: us-east-1 s3ForcePathStyle: true s3Url: http://rook-ceph-rgw-my-store.rook-ceph.svc.cluster.local:80启用 CSI 快照要打开EnableCSI特性开关1.14 起 CSI 插件已并入主仓库并声明默认快照位置velero install \ --featuresEnableCSI \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.11.0 \ --bucket velero-backups \ --secret-file ./credentials-velero \ --use-volume-snapshots \ --default-volume-snapshot-location nameceph-snapshots \ --use-node-agent--use-node-agent不能省数据移动依赖 Node Agent 拉起 data mover Pod。应用 BSL 后确认它进入 Availablekubectl apply -f ceph-bsl.yaml velero backup-location get ceph-bsl阶段二 · 备份策略设计用 VGS 标签组织多卷原子快照分布式数据库如 Cassandra、ZooKeeper会把数据分散到多个 PVC。逐个卷打快照各卷时点不同恢复出来可能不一致。Volume Group Snapshot 把这个问题交给存储层同一命名空间、同一 CSI 驱动下共享标签velero.io/volume-group的 PVC 会被 Velero 的 PVCAction 收集进同一个 ItemBlock由 CSI 插件统一创建 VolumeGroupSnapshot存储侧对整组卷做原子快照Velero 再从中提取每个卷的 VolumeSnapshot并清理临时的 VGS 与 VGSC 对象。版本上有硬性门槛Kubernetes 1.20 以上Velero 1.18.1 起使用 VGS 的 v1beta2 API要求 external-snapshotter v8.2.0 以上。VolumeGroupSnapshotClass 需要打标签才能被 Velero 自动发现apiVersion: groupsnapshot.storage.k8s.io/v1beta2 kind: VolumeGroupSnapshotClass metadata: name: ceph-vgs-class labels: velero.io/csi-volumegroupsnapshot-class: true driver: rbd.csi.ceph.com deletionPolicy: Delete给组内 PVC 打统一标签即可metadata: name: db-data-pvc namespace: my-database labels: velero.io/volume-group: db-cluster-1 spec: storageClassName: rook-ceph-block执行带数据移动的备份只做 VGS 的话卷数据留在 RBD 快照里跨集群没有意义。加上--snapshot-move-data后Velero 为每个卷创建 DataUpload CRNode Agent 里的 Exposer 把快照卷暴露出来Kopia Uploader 经 Unified Repo 接口把数据写入对象存储完成后删除原快照释放 RBD 空间。Kopia 提供去重和增量能力第二次备份只传变化块DataUpload 的INCREMENTAL BYTES字段能看到增量大小。图Velero Volume Group Snapshot 备份工作流Data Mover Plugin 创建 DataUpload CR经 Node Agent 与 Uploader 把快照数据写入统一仓库图Velero 统一仓库与 Kopia 集成工作流Kopia Uploader 经 Kopia Repository 接口完成备份数据写入velero backup create db-backup --include-namespaces my-database --snapshot-move-data velero backup describe db-backup velero backup logs db-backup上传进度用下面的命令跟踪DataUpload 最终进入 CompletedBytes Done与Total Bytes相等说明数据搬完了kubectl -n velero get datauploads -l velero.io/backup-namedb-backup -w阶段三 · 跨集群恢复落地目标集群准备同名 StorageClass内置数据移动会在目标集群按源集群的 PVC 规格创建卷所以目标集群的 Rook-Ceph 需要先建好同名rook-ceph-blockStorageClass。这样即使带--include-cluster-resources恢复Velero 发现同名 StorageClass 已存在也会跳过不会冲突。执行恢复并跟踪 PVC 绑定velero restore create db-restore \ --from-backup db-backup \ --namespace-mappings my-database:my-database-restore数据移动恢复不需要额外参数Velero 从备份元数据中自动读取是否搬移以及使用哪个 data mover。恢复时 PVC 与新 PV 的绑定由 Data Mover Plugin 接管它给恢复出的 PVC 设置 volumeName创建 DataDownload CRNode Agent 的 DataDownload Controller 在目标集群创建 Target VolumeKopia 从统一仓库把数据写进去PVC 随即与目标卷完成绑定。图Velero 跨集群恢复工作流Data Mover Plugin 设置 PVC 的 VolumeName 并完成与 Target Volume 的绑定velero restore describe db-restore velero restore logs db-restore kubectl -n velero get datadownloads -l velero.io/restore-namedb-restore阶段四 · 故障自查与配置校验迁移失败大多集中在三处对象存储链路、快照链路、数据搬移链路。按下面顺序排查BSL 状态velero backup-location get ceph-bsl必须是 Available。出现SignatureDoesNotMatch时回到阶段一确认 RGW 支持签名版本 4、凭据用 Ceph 原生账户。VolumeSnapshotClass 默认值集群里存在多个 VolumeSnapshotClass 时给 Ceph RBD 那个显式标记默认否则快照可能落到错误驱动上kubectl annotate volumesnapshotclass ocs-storagecluster-rbdplugin-snapclass \ snapshot.storage.kubernetes.io/is-default-classtrue --overwriteCSI 驱动一致性组内 PVC 必须同驱动VolumeGroupSnapshotClass 的driver字段要与 Ceph RBD 驱动一致且带发现标签kubectl get volumegroupsnapshotclass --show-labels备份与恢复状态velero backup describe看 Phase 与 WarningsInProgress 长时间不动看velero backup logs。中断的备份无法续跑删除后重建。收集现场velero debug可导出包含服务端日志与 CR 状态的诊断包提交问题前先生成。迁移前检查清单✅ RGW 支持签名版本 4Ceph RADOS ≥ v12.2.7凭据为 Ceph 原生账户✅ BSL 状态 Availables3Url对客户端可达否则配置publicUrl✅ 组内 PVC 带同一velero.io/volume-group标签且同 CSI 驱动✅ VolumeGroupSnapshotClass 带velero.io/csi-volumegroupsnapshot-class标签驱动匹配✅ 备份使用--snapshot-move-dataDataUpload 全部 Completed✅ 目标集群存在同名 StorageClassrook-ceph-block✅ 恢复时确认命名空间映射DataDownload 无 Failed遇到更复杂的场景建议直接查阅官方故障排除文档 troubleshooting.md其中覆盖签名错误、日志下载失败、备份卡 InProgress 等已知问题的处理办法。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表