系统架构

可编辑图源:architecture.excalidraw
Testudo 的整体架构分为五层:用户入口层、API 聚合层、Kubernetes API 与 CRD 事实源、Operator 执行层和运行时依赖层。
用户入口层
用户可以通过 Web 控制台、CLI、自动化平台或直接调用 API 管理容灾对象。所有面向用户的写操作最终都会转化为 Kubernetes CRD 的创建、更新或删除。
API 聚合层
disaster-server 基于 Hertz 提供 HTTP 服务,主要职责包括:
/login、/refresh_token和 JWT 中间件。/apis/...下的业务 REST API。/api/...下的部分兼容别名。- Watch 路由,例如
/apis/disasterinstances.testudo.softcdata.com/v1/watch/instances。 - 统计接口,例如
/apis/backuprestorestatistics.testudo.softcdata.com/v1/backups。 - 事件接口,例如
/apis/v1/events和/apis/v1/watch/events。
Server 不直接执行容灾动作。它把用户请求转化为 CRD 写入,并把 CRD、Event、统计资源聚合成前端友好的 DTO。
Kubernetes API 与 CRD 事实源
Kubernetes API 是系统事实源。Server 的写操作落到 CRD,Operator 的调谐结果写回 status、conditions、history 和 Kubernetes Event。
Operator 执行层
disaster-operator 监听 testudo.softcdata.com/v1 下的 CRD,并调谐状态:
DisasterInstance:保护对象和主状态机。DataSync:PVC 数据同步。ResourceSync:Kubernetes 资源同步。AppBackup/AppRestore:对 Velero Backup/Restore 的封装。DisasterOperation:failover、reprotect、undo、cancel、sync、drill 等操作。DisasterGroup:多实例分层编排。DisasterDrill:容灾演练。Cluster与StorageRepository:远端集群和备份存储配置。
运行时依赖层
Operator 通过 kubeconfig 或 token+endpoint 访问远端源集群和目标集群,通过 Velero 资源完成备份恢复,通过 S3/MinIO 兼容对象存储保存备份数据。
数据流
- 用户在控制台创建
DisasterInstance。 disaster-server校验参数并写入 Kubernetes API。disaster-operator观测到实例,创建或对齐DataSync和ResourceSync。- 同步控制器创建
AppBackup、AppRestore,再由它们生成 VeleroBackup、Restore。 - 状态、事件、历史和统计被写回 CRD status 或 Kubernetes Event。
- Server 通过 REST/Watch 将结果返回给控制台。
设计原则
- 以 CRD 作为唯一事实源,避免 API 层和控制器层各维护一套状态。
- 长流程操作显式建模为
DisasterOperation,方便观察、重试和补偿。 - Server 保持薄执行层,不越过 operator 直接修改远端集群。
- 对外接口优先返回聚合状态,对内保留 CRD 的可观测细节。