跳到主要内容

备份恢复排障

备份恢复问题通常来自四类位置:集群凭据、对象存储、Velero、恢复目标环境。按层排查比反复重试更有效。

快速定位

现象优先检查
集群列表正常但备份创建失败集群 RBAC、Velero 命名空间、operator 日志
BackupStorageLocation unavailable仓库 endpoint、bucket、凭据、CA、网络
备份耗时过长PVC 数据量、对象存储吞吐、节点网络、Velero 并发
恢复后 Pod PendingPVC 绑定、StorageClass、节点资源
恢复后 Pod ImagePullBackOff镜像仓库、imagePullSecret、镜像重写
Ingress 无地址IngressClass、目标集群 Ingress 控制器
恢复任务无法取消Velero Restore 状态、operator 操作状态

必查命令

kubectl get appbackup,apprestore -A
kubectl get events -A --sort-by=.lastTimestamp | tail -100
kubectl -n disaster-system logs deploy/disaster-operator --tail=300
kubectl -n disaster-system logs deploy/disaster-server --tail=300

在业务集群检查 Velero:

kubectl --context prod-a -n velero get backup,restore,backupstoragelocation
kubectl --context prod-a -n velero logs deploy/velero --tail=300

对象存储问题

检查:

  • endpoint 是否能从源和目标集群访问。
  • bucket 是否存在。
  • access key 是否有读写权限。
  • region 和 addressingStyle 是否正确。
  • 自签 CA 是否被信任。
  • 备份 TTL 是否已经清理对象。

恢复目标问题

恢复前确认:

  • 目标命名空间是否已存在。
  • 目标集群是否有匹配 StorageClass。
  • 目标集群是否安装应用 CRD。
  • 目标集群是否有镜像拉取 Secret。
  • 目标集群是否允许恢复 NodePort 或 LoadBalancer。

处理建议

  • 失败后先保留对象和事件,不要立刻删除任务。
  • 修复根因后使用 retry,而不是创建多个相同任务。
  • 对跨集群恢复,先执行 preflight validate。
  • 对生产恢复,先在隔离命名空间恢复验证,再恢复到正式命名空间。