Operator 与 Server 的职责边界
Testudo 项目由两个主要仓库组成:disaster-operator 和 disaster-server。理解它们的边界有助于部署、排障和贡献代码。
disaster-operator
Operator 是 Kubernetes 控制面扩展,负责让实际状态收敛到 CRD 表达的期望状态。
主要职责:
- 定义
testudo.softcdata.com/v1CRD。 - 监听和调谐
DisasterInstance、DataSync、ResourceSync、DisasterOperation等资源。 - 访问源集群和目标集群。
- 创建 Velero
Backup、Restore、Schedule、BackupStorageLocation。 - 维护状态机、conditions、history、reason/message。
- 执行 failover、reprotect、undo、cancel、drill-cleanup 等步骤。
- 产生 Kubernetes Event,支撑历史与实时事件流。
Operator 应该承担所有会改变容灾系统实际运行状态的动作。
disaster-server
Server 是用户入口和聚合层,负责把控制台/自动化请求转换成 CRD 操作,并把底层状态转换成稳定的 API 响应。
主要职责:
- 认证、JWT、trace、recover 中间件。
- 暴露 REST API 和 Watch API。
- 对请求做结构化校验和用户友好的错误返回。
- 把 CRD、Event、统计资源转换为 DTO。
- 提供 OpenAPI/Swagger。
- 暴露统计接口与前端查询接口。
Server 不应该绕过 CRD 状态机直接执行故障切换、恢复或远端集群写操作。
如何判断改动落在哪里
- 新增一个容灾执行步骤:通常改
disaster-operator。 - 新增一个控制台按钮对应的动作入口:通常改
disaster-server路由和 DTO,同时由它创建或更新 CRD。 - 新增 CRD 字段:先改
disaster-operatorAPI 类型和控制器,再同步disaster-serverDTO/OpenAPI。 - 新增统计页面:通常先看已有 CRD status/Event 是否足够,再改
disaster-server聚合接口。 - 修复状态机收敛问题:优先看
disaster-operator。
协作契约
两个仓库的共同契约是 CRD 和 OpenAPI。CRD 是 operator 的执行契约,OpenAPI 是 server 的外部接口契约。任何跨仓库改动都应同时更新 CRD 字段说明、API 文档和相关测试。