备份恢复排障
备份恢复问题通常来自四类位置:集群凭据、对象存储、Velero、恢复目标环境。按层排查比反复重试更有效。
快速定位
| 现象 | 优先检查 |
|---|---|
| 集群列表正常但备份创建失败 | 集群 RBAC、Velero 命名空间、operator 日志 |
| BackupStorageLocation unavailable | 仓库 endpoint、bucket、凭据、CA、网络 |
| 备份耗时过长 | PVC 数据量、对象存储吞吐、节点网络、Velero 并发 |
| 恢复后 Pod Pending | PVC 绑定、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。
- 对生产恢复,先在隔离命名空间恢复验证,再恢复到正式命名空间。