回滚
回滚用于升级后控制面异常时恢复到上一个可用版本。回滚前应判断问题是否来自 Chart、镜像、CRD、values、webhook 证书或外部依赖。
回滚前判断
先确认 Helm revision:
helm history testudo -n disaster-system
检查当前状态:
kubectl -n disaster-system get pods
kubectl -n disaster-system describe pod <pod-name>
kubectl -n disaster-system get events --sort-by=.lastTimestamp
如果问题来自对象存储、远端集群不可达、镜像仓库或 License,不应优先回滚 Chart。
执行 Helm 回滚
helm rollback testudo <REVISION> -n disaster-system
观察 rollout:
kubectl -n disaster-system rollout status deploy/disaster-server
kubectl -n disaster-system rollout status deploy/disaster-web
kubectl -n disaster-system rollout status deploy/disaster-operator-controller-manager
CRD 回滚注意事项
Helm 回滚不一定会安全回滚 CRD。若新版本已经写入旧版本不认识的字段,直接回滚 controller 可能导致:
- 旧 controller 忽略新字段。
- status 解析失败。
- webhook 校验逻辑不匹配。
因此 CRD 变更版本必须在发布说明中给出迁移和回滚策略。没有明确策略时,不建议自动回滚 CRD。
回滚后验证
kubectl -n disaster-system get disasterinstances.testudo.softcdata.com
kubectl -n disaster-system get disasteroperation
kubectl -n disaster-system get appbackups,apprestores
在控制台确认:
- 登录正常。
- 实例列表和详情页正常。
- Watch 事件流正常。
- 备份/恢复/容灾操作历史可读。
何时不要回滚
- 正在执行 failover、reprotect、undo、cancel 或 drill cleanup。
- 新版本已经完成 CRD 数据迁移,旧版本不兼容。
- 问题是远端集群或对象存储故障。
- 问题是业务工作负载自身不可用。
这类情况应先暂停新操作,保留现场,再根据发布说明执行人工恢复。