跳到主要内容
版本:Next 🚧

架构概览

TFRS Operator 基于 Kubebuilder 构建,通过三个层级的自定义资源(CRD)管理 TFRobot 多租户 AI/机器人服务的完整生命周期。

资源模型

Operator 定义了三层 CRD,形成自顶向下的管理结构:

TFRCluster (集群范围)
└── TFRTenant (命名空间范围)
└── TFRServer (命名空间范围)
CRD作用域职责
TFRClusterCluster管理集群级基础设施:Istio 入口、TLS 证书、Operator 安装、镜像仓库凭据
TFRTenantNamespace配置租户环境:数据库、缓存、对象存储、消息队列、监控栈
TFRServerNamespace管理单个 TFRobot 服务实例:API worker、机器人 worker、配置和密钥

多租户模型

TFRTenant 支持两种租户类型:

类型说明隔离级别
enterprise企业租户,独占命名空间完全隔离:独立的网络策略、存储和中间件实例
personal个人租户,按职能共享命名空间逻辑隔离:通过 RobotId 区分,共享中间件

两种类型均通过 Istio PeerAuthentication(STRICT mTLS)和 AuthorizationPolicy 实现网络隔离。

基础设施组件一览

集群级(TFRCluster 安装)

组件部署方式说明
cert-managerHelm ChartTLS 证书自动管理
IstioHelm Chart服务网格基础
Istio Ingress GatewayHelm Chart入口网关,支持 TKE CLB / NodePort / Docker Desktop
CNPG OperatorYAML ManifestCloudNativePG PostgreSQL Operator
MinIO OperatorHelm / YAMLMinIO 对象存储 Operator
RabbitMQ OperatorYAML ManifestRabbitMQ Cluster 和 Topology Operator
镜像仓库凭据Secret跨命名空间共享的 imagePullSecret

租户级(TFRTenant 创建实例)

组件部署方式说明
PostgreSQLCNPG Cluster CR主数据库,16-minimal-bookworm
RedisDeployment + PVC缓存服务(redis-stack-server)
MinIOMinIO Tenant CR对象存储
RabbitMQRabbitMQ Cluster CR消息队列
TimescaleDBCNPG + 扩展时序数据库
JaegerHelm Chart分布式追踪
GrafanaHelm Chart监控仪表盘
PrometheusDeployment指标采集
OTel CollectorDeploymentOpenTelemetry 追踪采集
VectorDeployment日志收集
SharedCache PVCPVC (RWX)图片缓存共享卷

服务级(TFRServer 配置)

组件说明
API WorkerTFRobot API 服务
Robot Worker机器人任务 Worker
DB Init Job数据库 Schema 初始化
MinIO Init Job存储桶初始化
Grafana SA JobGrafana 服务账号配置
TOML ConfigConfz 配置自动生成

部署依赖图

TFRCluster 组件部署顺序

graph TD
CM[cert-manager] --> Istio
Istio --> IG[Istio Ingress]
IG --> GW[Gateway]
Istio --> EFC[EnvoyFilter Cookie]
Istio --> EFL[EnvoyFilter Lua Routing]
GW --> VS[ClusterVirtualService]
EFC --> VS
Istio --> IT[Istio Telemetry]

MO[MinIO Operator]
CO[CNPG Operator]
RO[RabbitMQ Operator]
IR[ImageRegistry]

cert-manager → Istio → Istio Ingress → Gateway/EnvoyFilter → VirtualService 为串行链路。三个中间件 Operator 和 ImageRegistry 可并行安装。

TFRTenant 组件部署顺序

graph TD
NS[Namespace] --> PG[PostgreSQL]
NS --> RD[Redis]
NS --> MN[MinIO]
NS --> JG[Jaeger]
NS --> PR[Prometheus]
NS --> VT[Vector]
NS --> SC[SharedCache PVC]
NS --> TF[TFRobotFront]
NS --> TU[TFRSUtils]

PG --> TD[TimescaleDB]
JG --> OT[OTel Collector]
RO_DEP[RabbitMQ Operator Ready] --> RQ[RabbitMQ]
NS --> GF[Grafana]

大部分组件仅依赖 Namespace 创建完成即可并行部署。TimescaleDB 依赖 PostgreSQL,OTel Collector 依赖 Jaeger,RabbitMQ 依赖 Operator 就绪。

凭据管理

TFRS Operator 在三个层级管理凭据:

层级Secret 示例说明
TFRCluster{registry}-pull-secret镜像仓库拉取凭据,跨命名空间共享
TFRTenant{namespace}-pg-credentials、MinIO root 凭据中间件访问凭据,自动生成或用户指定
TFRServer{robot}-secret{robot}-config应用级密钥(API Key)和配置

密码字段如未指定,Operator 会自动生成随机密码并存入 Secret。

ConfzData 配置自动生成

TFRServer 使用 ConfzData(TOML 格式)管理应用配置。Operator 自动注入中间件连接信息:

# 自动生成示例(用户无需手动填写)
[postgresql]
host = "{namespace}-pg-rw"
port = 5432
user = "app_user"
dbname = "{namespace}"

[redis]
host = "redis.{namespace}.svc.cluster.local"
port = 6379

[celery]
broker_url = "amqp://user:pass@rabbitmq.{namespace}.svc.cluster.local:5672/"

[cos]
host = "minio.{namespace}.svc.cluster.local"
port = 9000

用户可通过 spec.confzData 覆盖任意字段,未指定的字段使用 Operator 生成的动态值。

环境变量注入

TFRServer 支持通过 secretDataconfigData 注入环境变量:

密钥类(Secret): OPENAI_API_KEYANTHROPIC_API_KEYGOOGLE_GEMINI_API_KEY

配置类(ConfigMap): OPENAI_BASE_URLTFS_PROFILETFS_ROBOT__DB_SCHEMA

自动注入(优先级最高): TFS_ROBOT__DOC_EXTRACTED_IMAGES_DIRsharedCache.cacheDir 自动注入,覆盖 ConfigMap 中的同名配置。