跳到主要内容

系统架构

系统架构图

可编辑图源: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:容灾演练。
  • ClusterStorageRepository:远端集群和备份存储配置。

运行时依赖层

Operator 通过 kubeconfig 或 token+endpoint 访问远端源集群和目标集群,通过 Velero 资源完成备份恢复,通过 S3/MinIO 兼容对象存储保存备份数据。

数据流

  1. 用户在控制台创建 DisasterInstance
  2. disaster-server 校验参数并写入 Kubernetes API。
  3. disaster-operator 观测到实例,创建或对齐 DataSyncResourceSync
  4. 同步控制器创建 AppBackupAppRestore,再由它们生成 Velero BackupRestore
  5. 状态、事件、历史和统计被写回 CRD status 或 Kubernetes Event。
  6. Server 通过 REST/Watch 将结果返回给控制台。

设计原则

  • 以 CRD 作为唯一事实源,避免 API 层和控制器层各维护一套状态。
  • 长流程操作显式建模为 DisasterOperation,方便观察、重试和补偿。
  • Server 保持薄执行层,不越过 operator 直接修改远端集群。
  • 对外接口优先返回聚合状态,对内保留 CRD 的可观测细节。