TFRTenant 部署
部署 TFRTenant 租户环境。
概述
TFRTenant 是命名空间级资源,负责创建租户隔离环境和中间件实例:
- Namespace - 租户专属命名空间
- PostgreSQL - 通过 CloudNativePG 创建数据库集群
- MinIO - 对象存储实例
- Redis - 缓存服务
- RabbitMQ - 消息队列
- Grafana - 监控仪表盘(可选)
- Jaeger - 链路追踪(可选)
前置条件
TFRTenant 依赖 TFRCluster 安装的 Operators。部署前确保 TFRCluster 状态为 Available。
配置说明
核心字段
| 字段 | 说明 | 示例 |
|---|---|---|
name | TFRTenant 资源名称 | 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" # 生产环境请使用强密码
字段说明
tenantType和namespace是必填字段- 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 会删除租户命名空间及其所有资源(数据库、存储等)。确保已备份重要数据。