跳到主要内容

Operator 与 Server 的职责边界

Testudo 项目由两个主要仓库组成:disaster-operatordisaster-server。理解它们的边界有助于部署、排障和贡献代码。

disaster-operator

Operator 是 Kubernetes 控制面扩展,负责让实际状态收敛到 CRD 表达的期望状态。

主要职责:

  • 定义 testudo.softcdata.com/v1 CRD。
  • 监听和调谐 DisasterInstanceDataSyncResourceSyncDisasterOperation 等资源。
  • 访问源集群和目标集群。
  • 创建 Velero BackupRestoreScheduleBackupStorageLocation
  • 维护状态机、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-operator API 类型和控制器,再同步 disaster-server DTO/OpenAPI。
  • 新增统计页面:通常先看已有 CRD status/Event 是否足够,再改 disaster-server 聚合接口。
  • 修复状态机收敛问题:优先看 disaster-operator

协作契约

两个仓库的共同契约是 CRD 和 OpenAPI。CRD 是 operator 的执行契约,OpenAPI 是 server 的外部接口契约。任何跨仓库改动都应同时更新 CRD 字段说明、API 文档和相关测试。