跳到主要内容
版本: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 支持通过 secretData 和 configData 注入环境变量:

密钥类(Secret): OPENAI_API_KEY、ANTHROPIC_API_KEY、GOOGLE_GEMINI_API_KEY 等

配置类(ConfigMap): OPENAI_BASE_URL、TFS_PROFILE、TFS_ROBOT__DB_SCHEMA 等

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