跳到主要内容
版本:Next 🚧

TFRTenant 部署

部署 TFRTenant 租户环境。

概述

TFRTenant 是命名空间级资源,负责创建租户隔离环境和中间件实例:

  • Namespace - 租户专属命名空间
  • PostgreSQL - 通过 CloudNativePG 创建数据库集群
  • MinIO - 对象存储实例
  • Redis - 缓存服务
  • RabbitMQ - 消息队列
  • Grafana - 监控仪表盘(可选)
  • Jaeger - 链路追踪(可选)
前置条件

TFRTenant 依赖 TFRCluster 安装的 Operators。部署前确保 TFRCluster 状态为 Available


配置说明

核心字段

字段说明示例
nameTFRTenant 资源名称enaic
namespace租户命名空间(自动创建)staging-tenant
tenantType租户类型enterprise, personal
storage存储配置见下文
imagePullSecrets私有镜像凭证引用见下文

存储配置

storage:
enabled: true
storageClass: "cbs" # TKE 使用 cbs,Kind 使用 standard
defaultSize: "10Gi" # 各组件默认存储大小
存储类说明
  • 腾讯云 TKE: cbs(云硬盘)
  • Kind / Docker Desktop: standard
  • 共享缓存: 需要支持 RWX 的存储类(如 cfs

私有镜像凭证

引用 TFRCluster 创建的 Secret:

imagePullSecrets:
- secretName: "tfrs-private-registry"
sourceNamespace: "tfr-image-credentials"

组件配置

各组件支持独立的存储和凭证配置,未指定时继承租户级配置:

postgresql:
enabled: false # 启用组件级配置
username: "" # 默认使用 TFRobotID
password: "" # 默认自动生成
storage:
storageClass: "" # 继承租户级
defaultSize: "10Gi"

grafana:
enabled: true
adminUser: "admin"
adminPassword: "admin" # 生产环境请使用强密码

示例配置

项目提供示例配置:

  • chart/tfrtenant/values-staging.yaml - Staging 环境
  • chart/tfrtenant/values-prod.yaml - Production 环境
  • chart/tfrtenant/values-kind.yaml - 本地开发环境

Kustomize 部署

创建 CR 清单

# tfrtenant-staging.yaml
apiVersion: infra.tfrobotserver.cn/v1
kind: TFRTenant
metadata:
name: enaic
spec:
# 租户类型(必填)
tenantType: enterprise

# 租户命名空间(必填)
namespace: staging-tenant

# 存储配置
storage:
storageClass: "cbs" # TKE 使用 cbs,Kind 使用 standard
defaultSize: "10Gi"

# 私有镜像凭证(引用 TFRCluster 创建的 Secret)
imagePullSecrets:
- secretName: "tfrs-private-registry"
sourceNamespace: "tfr-image-credentials"

# Grafana 配置
grafana:
adminUser: "admin"
adminPassword: "your-secure-password" # 生产环境请使用强密码
字段说明
  • tenantTypenamespace 是必填字段
  • Helm values 文件中的 enabled 字段是 Chart 渲染逻辑,CR 中不需要
  • 完整字段参考:config/samples/infra_v1_tfrtenant.yaml

部署

kubectl apply -f tfrtenant-staging.yaml
# tfrtenant.infra.tfrobotserver.cn/enaic created

验证

kubectl get tfrtenant
kubectl get tfrtenant enaic -o json | jq '.status.components | to_entries[] | "\(.key): \(.value.state)"'

实时监控部署进度

while true; do clear; echo "--- $(date +%H:%M:%S) ---"; \
echo "=== Conditions ==="; \
kubectl get tfrtenant enaic -o json 2>/dev/null \
| jq -r '.status.conditions[]? | "\(.type): \(.status) - \(.message)"'; \
echo; echo "=== Components ==="; \
kubectl get tfrtenant enaic -o json 2>/dev/null \
| jq -r '.status.components // {} | to_entries[] | "\(.key): \(.value.state)"'; \
echo; echo "=== Pods ==="; \
kubectl get pods -n staging-tenant 2>/dev/null; \
sleep 10; done

Ctrl+C 退出。

判断部署完成

TFRTenant 通过 status.conditions 中的 Ready 条件标识部署状态:

# 查看 Ready 条件
kubectl get tfrtenant enaic -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
# True = 部署完成,False = 部署中或失败

# 自动化脚本:等待部署完成(超时 10 分钟)
kubectl wait tfrtenant enaic --for=condition=Ready --timeout=600s

卸载

kubectl delete tfrtenant enaic

Helm 部署

部署

从 OCI 仓库安装

helm install tfrtenant oci://helm.cnb.cool/turingfocus/tfrs-operator/tfrtenant \
--version 0.1.0 \
--set name=enaic \
--set namespace=staging-tenant \
--set storage.enabled=true \
--set storage.storageClass=cbs \
--set grafana.enabled=true

使用 values 文件安装

helm install tfrtenant oci://helm.cnb.cool/turingfocus/tfrs-operator/tfrtenant \
--version 0.1.0 \
-f values-staging.yaml

从本地源码安装

helm install tfrtenant ./chart/tfrtenant \
-f chart/tfrtenant/values-staging.yaml
说明

TFRTenant 是集群级资源,不需要指定 --namespace。租户的命名空间由 namespace 字段指定,Controller 会自动创建。

验证

# 查看 TFRTenant 状态
kubectl get tfrtenant

# 等待部署完成(超时 10 分钟)
kubectl wait tfrtenant enaic --for=condition=Available --timeout=600s

# 查看租户命名空间中的组件
kubectl get pods -n staging-tenant

实时监控部署进度

while true; do clear; echo "--- $(date +%H:%M:%S) ---"; \
echo "=== Conditions ==="; \
kubectl get tfrtenant enaic -o json 2>/dev/null \
| jq -r '.status.conditions[]? | "\(.type): \(.status) - \(.message)"'; \
echo; echo "=== Components ==="; \
kubectl get tfrtenant enaic -o json 2>/dev/null \
| jq -r '.status.components // {} | to_entries[] | "\(.key): \(.value.state)"'; \
echo; echo "=== Pods ==="; \
kubectl get pods -n staging-tenant 2>/dev/null; \
sleep 10; done

Ctrl+C 退出。

判断部署完成

TFRTenant 通过 status.conditions 中的 Ready 条件标识部署状态:

# 查看 Ready 条件
kubectl get tfrtenant enaic -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
# True = 部署完成,False = 部署中或失败

# 自动化脚本:等待部署完成(超时 10 分钟)
kubectl wait tfrtenant enaic --for=condition=Ready --timeout=600s

卸载

helm uninstall tfrtenant
注意

卸载 TFRTenant 会删除租户命名空间及其所有资源(数据库、存储等)。确保已备份重要数据。