跳到主要内容

创建租户

本文介绍通过 ob-operator 创建租户。

前提条件

创建租户前,您需要确保:

  • ob-operator v2.1.0 及以上。

  • OceanBase 集群部署完成且正常运行。

使用配置文件创建租户

通过应用租户配置文件创建租户。配置文件内容可参考 GitHub

创建租户的命令如下,该命令会在当前 Kubernetes 集群中创建一个 OBTenant 租户的资源。

kubectl apply -f tenant.yaml

创建租户示例

创建名为 t1 的一个 3 副本的 MySQL 租户,并指定允许任何客户端 IP 连接该租户。

创建租户时,ob-operator 会根据配置文件 tenant.yaml 中的 pools 按照 zone 来创建对应的 resource unit 和 resource pool。根据 resource 下的配置项来创建 resource unit 并以此作为资源规格来创建 resource pool。

apiVersion: oceanbase.oceanbase.com/v1alpha1  
kind: OBTenant
metadata:
name: t1
namespace: oceanbase
spec:
obcluster: obcluster
tenantName: t1
unitNum: 1
charset: utf8mb4
connectWhiteList: '%'
forceDelete: true
credentials: # 可选
root: t1-ro # 可选,如不传则 root 用户密码为空
standbyRo: t1-ro # 可选,如不传则自动创建
pools:
- zone: zone1
type:
name: Full
replica: 1
isActive: true
resource:
maxCPU: 1
minCPU: 1
memorySize: 5Gi
maxIops: 1024
minIops: 1024
iopsWeight: 2
logDiskSize: 12Gi
- zone: zone2
type:
name: Full
replica: 1
isActive: true
resource:
maxCPU: 1
minCPU: 1
memorySize: 5Gi
maxIops: 1024
minIops: 1024
iopsWeight: 2
logDiskSize: 12Gi
- zone: zone3
type:
name: Full
replica: 1
isActive: true
priority: 3
resource:
maxCPU: 1
minCPU: 1
memorySize: 5Gi
maxIops: 1024
minIops: 1024
iopsWeight: 2
logDiskSize: 12Gi

配置项说明如下:

配置项说明
metadata.name租户资源的名称,在 K8s 的同一个命名空间下唯一;必填。
metadata.namespace指定租户资源所在的命名空间;必填。
obcluster指定需要创建租户的 OceanBase 数据库集群名;必填。
tenantName租户名。租户名的合法性和变量名一致,最长 128 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。 OceanBase 数据库中所支持的关键字请参见 MySQL 模式的 预留关键字和 Oracle 模式的预留关键字;必填。
unitNum指定要创建的单个 ZONE 下的单元个数,取值要小于单个 ZONE 中的 OBServer 节点个数;必填。
charset指定租户的字符集,字符集相关的介绍信息请参见字符集;非必填,默认设置为 utf8mb4
collate指定租户的字符序,字符序相关的介绍信息请参见字符序;非必填。
connectWhiteList指定允许连接该租户的客户端 IP,% 表示任何客户端 IP 都可以连接该租户;非必填,默认设置为 %。如果用户需要修改改配置,则需要将 ob-operator 所处的网段包含在配置内,否则 ob-operator 会连接不上该租户。
forceDelete删除时是否强制删除,非必填,默认为 false。
credentials创建租户时创建用户和修改密码的 Secret 资源引用。目前支持配置 root 账号和 standbyRo 两个用户的密码,非必填,不填则不修改密码。
pools租户的拓扑结构,用于定义租户在每个 zone 上的副本、资源分布等情况。
type.name指定租户在该 zone 的副本类型,支持 full 和 readonly, 需要写出完整类型, 大小写不敏感;必填。
type.replica指定租户在该 zone 的副本数;非必填,默认为 1。
type.isActive是否启用 zone。
priority指定当前 zone 的优先级,数字越大优先级越高;非必填,默认为 0。
resource指定租户在该 zone 的资源情况。
maxCPU指定租户在该 zone 上 使用的资源单元提供的 CPU 的上限;必填,最小值为 1。
minCPU指定租户在该 zone 上 使用的资源单元提供的 CPU 的下限;非必填,默认等于 maxCPU。
memorySize指定租户在该 zone 上 使用的资源单元提供的 Memory 的大小;必填,最小值为 1Gi;注意集群的 __min_full_resource_pool_memory 配置项的值
maxIops指定租户在该 zone 上 使用的资源单元提供的 Iops 的上限;非必填。
minIops指定租户在该 zone 上 使用的资源单元提供的 Iops 的下限;非必填。
iopsWeight指定租户在该 zone 上 使用的资源单元提供的 Iops 权重。非必填,默认等于 1。
logDiskSize指定租户在该 zone 上 使用的资源单元提供的日志盘规格。非必填,默认等于 3 倍的内存规格,最小值为 2Gi。

确认租户是否创建成功

创建租户后,执行以下语句,查看当前 Kubernetes 集群中是否有新创建的租户的 OBTenant 资源,并且该 OBTenant 资源的 Status.statusrunning,相关配置都会在 Status 中展示。

kubectl describe obtenants.oceanbase.oceanbase.com -n oceanbase t1

返回的示例结果如下:

Name:         t1
Namespace: oceanbase
Labels: <none>
Annotations: <none>
API Version: oceanbase.oceanbase.com/v1alpha1
Kind: OBTenant
Metadata:
Creation Timestamp: 2023-11-13T07:28:31Z
Finalizers:
finalizers.oceanbase.com.deleteobtenant
Generation: 2
Resource Version: 940236
UID: 34036a49-26bf-47cf-8201-444b3850aaa2
Spec:
Charset: utf8mb4
Connect White List: %
Credentials:
Root: t1-ro
Standby Ro: t1-ro
Force Delete: true
Obcluster: obcluster
Pools:
Priority: 1
Resource:
Iops Weight: 2
Log Disk Size: 12Gi
Max CPU: 1
Max Iops: 1024
Memory Size: 5Gi
Min CPU: 1
Min Iops: 1024
Type:
Is Active: true
Name: Full
Replica: 1
Zone: zone1
Priority: 1
Resource:
Iops Weight: 2
Log Disk Size: 12Gi
Max CPU: 1
Max Iops: 1024
Memory Size: 5Gi
Min CPU: 1
Min Iops: 1024
Type:
Is Active: true
Name: Full
Replica: 1
Zone: zone2
Priority: 3
Resource:
Iops Weight: 2
Log Disk Size: 12Gi
Max CPU: 1
Max Iops: 1024
Memory Size: 5Gi
Min CPU: 1
Min Iops: 1024
Type:
Is Active: true
Name: Full
Replica: 1
Zone: zone3
Tenant Name: t1
Tenant Role: PRIMARY
Unit Num: 1
Status:
Credentials:
Root: t1-ro
Standby Ro: t1-ro
Resource Pool:
Priority: 1
Type:
Is Active: true
Name: FULL
Replica: 1
Unit Config:
Iops Weight: 2
Log Disk Size: 12884901888
Max CPU: 1
Max Iops: 1024
Memory Size: 5368709120
Min CPU: 1
Min Iops: 1024
Unit Num: 1
Units:
Migrate:
Server IP:
Server Port: 0
Server IP: 10.42.0.189
Server Port: 2882
Status: ACTIVE
Unit Id: 1006
Zone List: zone1
Priority: 1
Type:
Is Active: true
Name: FULL
Replica: 1
Unit Config:
Iops Weight: 2
Log Disk Size: 12884901888
Max CPU: 1
Max Iops: 1024
Memory Size: 5368709120
Min CPU: 1
Min Iops: 1024
Unit Num: 1
Units:
Migrate:
Server IP:
Server Port: 0
Server IP: 10.42.1.118
Server Port: 2882
Status: ACTIVE
Unit Id: 1007
Zone List: zone2
Priority: 2
Type:
Is Active: true
Name: FULL
Replica: 1
Unit Config:
Iops Weight: 2
Log Disk Size: 12884901888
Max CPU: 1
Max Iops: 1024
Memory Size: 5368709120
Min CPU: 1
Min Iops: 1024
Unit Num: 1
Units:
Migrate:
Server IP:
Server Port: 0
Server IP: 10.42.0.190
Server Port: 2882
Status: ACTIVE
Unit Id: 1008
Zone List: zone3
Status: running
Tenant Record Info:
Charset: utf8mb4
Connect White List: %
Locality: FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3
Pool List: pool_t1_zone1,pool_t1_zone2,pool_t1_zone3
Primary Zone: zone3;zone1,zone2
Tenant ID: 1006
Unit Num: 1
Zone List: zone1,zone2,zone3
Tenant Role: PRIMARY
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal 2m58s obtenant-controller start creating
Normal 115s obtenant-controller create OBTenant successfully

后续操作

租户创建成功后,其管理员账号密码为 spec.credentials.root 字段指定的 secret 中包含的内容,若创建时没有指定,则密码为空。您可以使用 obclient -h${podIP} -P2881 -uroot@tenantname -p -A 或者 mysql -h${podIP} -P2881 -uroot@tenantname -p -A 语句登录数据库。