跳到主要内容

集群创建

本文介绍通过 ob-operator 创建 OceanBase 集群。

部署前准备

部署之前,您需要在 K8s 集群中部署好 ob-operator,请参考 部署 ob-operator, 并确保 K8s 集群有可用的 storage-class,推荐使用 local-path-provisioner

部署 OceanBase 数据库

创建 Namespace

创建部署 OceanBase 集群使用的 namespace。

kubectl create namespace oceanbase

创建默认用户的 Secret

创建 OceanBase 集群之前,您需要先创建好若干 secret 来存储 OceanBase 中的特定用户

kubectl create secret -n oceanbase generic root-password --from-literal=password='root_password'

定义 OceanBase 集群

OceanBase 集群可以通过 yaml 配置文件进行定义,您可参考如下配置文件作为基础按照实际进行需求进行修改。

apiVersion: oceanbase.oceanbase.com/v1alpha1
kind: OBCluster
metadata:
name: test
namespace: oceanbase
annotations:
"oceanbase.oceanbase.com/independent-pvc-lifecycle": "true"
# "oceanbase.oceanbase.com/mode": "standalone" 或 "service"
# "oceanbase.oceanbase.com/single-pvc": "true"
spec:
clusterName: obcluster
clusterId: 1
userSecrets:
root: root-password
topology:
- zone: zone1
replica: 1
# nodeSelector:
# k1: v1
# affinity:
# nodeAffinity:
# podAffinity:
# podAntiAffinity:
# tolerations:
# - key: "obtopo"
# value: "zone"
# effect: "NoSchedule"
- zone: zone2
replica: 1
- zone: zone3
replica: 1
observer:
image: oceanbase/oceanbase-cloud-native:4.2.0.0-101000032023091319
resource:
cpu: 2
memory: 10Gi
storage:
dataStorage:
storageClass: local-path
size: 50Gi
redoLogStorage:
storageClass: local-path
size: 50Gi
logStorage:
storageClass: local-path
size: 20Gi
monitor:
image: oceanbase/obagent:4.2.0-100000062023080210
resource:
cpu: 1
memory: 1Gi

# parameters:
# - name: system_memory
# value: 2G
# backupVolume:
# volume:
# name: backup
# nfs:
# server: 1.1.1.1
# path: /opt/nfs
# readOnly: false

配置项

配置项说明如下:

配置项说明
metadata.name集群名。K8s 中资源的名字;必填。
metadata.namespace集群所在的命名空间;必填。
spec.clusterNameOceanBase 集群名;必填。
spec.clusterIdOceanBase 集群 ID;必填。
spec.serviceAccount绑定到 OBServer Pod 上的 ServiceAccount;可选,默认为 default
spec.userSecretsOceanBase 集群默认用户的 Secret;必填。
spec.userSecrets.rootOceanBase 集群 root@sys 用户的 Secret 名称, Secret 中需要包含 password 字段;必填。
spec.userSecrets.proxyroOceanBase 集群 proxyro@sys 用户的 Secret 名称, Secret 中需要包含 password 字段;可选。
spec.userSecrets.monitorOceanBase 集群 monitor@sys 用户的 Secret 名称, Secret 中需要包含 password 字段;可选。
spec.userSecrets.operatorOceanBase 集群 operator@sys 用户的 Secret 名称, Secret 中需要包含 password 字段;可选。
spec.topologyOceanBase 集群部署 topo 的定义,包含对各个 zone 的定义;必填。
spec.topology[i].zoneOceanBase Zone 的名字;必填。
spec.topology[i].replicaOceanBase Zone 的 observer 数;必填。
spec.topology[i].nodeSelector用于指定 OceanBase Zone 中的 observer 分布节点的选择,map 形式,需要配合节点的 label 使用;选填。
spec.topology[i].affinity用于指定 OceanBase Zone 中的 observer 的节点亲和性, 节点亲和性可以参考 K8s 文档;选填。
spec.topology[i].tolerations用于指定 OceanBase Zone 中的 observer 的容忍度,节点容忍度可以参考 K8s 文档; 选填。
spec.observer.imageOceanBase 中的 observer 的镜像; 必填。
spec.observer.resourceOceanBase 中的 observer 的资源配置; 必填。
spec.observer.resource.cpuOceanBase 中的 observer 的 cpu 资源配置; 必填。
spec.observer.resource.memoryOceanBase 中的 observer 的 memory 资源配置; 必填。
spec.observer.storageOceanBase 中的 observer 的存储配置; 必填。
spec.observer.storage.dataStorageOceanBase 中的 observer 的数据存储配置; 必填。
spec.observer.storage.redoLogStorageOceanBase 中的 observer 的 clog 存储配置; 必填。
spec.observer.storage.logStorageOceanBase 中的 observer 的运行日志存储配置; 必填。
spec.observer.storage.*.storageClass对于存储配置生效,用于定义创建 pvc 使用的 storageClass; 选填,如果留空会被设置为 k8s 集群中的默认存储类。
spec.observer.storage.*.size对于存储配置生效,用于定义创建 pvc 的容量; 必填。
spec.monitor监控配置, 建议开启,ob-operator 会使用 obagent 来做监控数据采集,通过对接 prometheus 可以实现对 OceanBase 的状态监控; 选填。
spec.monitor.image监控所使用的镜像; 必填。
spec.monitor.resource监控容器使用的资源; 必填。
spec.monitor.resource.cpu监控容器使用的 cpu 资源; 必填。
spec.monitor.resource.memory监控容器使用的 memory 资源; 必填。
spec.parametersOceanBase 的自定义参数配置,对于集群全局生效; 选填。
spec.parameters[i].name参数名; 必填。
spec.parameters[i].value参数值; 必填。
spec.backupVolumeOceanBase 备份使用的存储,如需开启备份功能,并且不是使用 OSS 进行备份的话,需要配置,一般配置 NFS Volume; 选填。

注解

下面的表格展示了可选的注解,为书写简单,注解 annotations 表示其前面有个 oceanbase.oceanbase.com/ 的前缀。

注解说明
independent-pvc-lifecycletrue: 要求 ob-operator >= 2.1.1。可在删除集群后保留 PVC
modestandalone: 要求 ob-operator >= 2.1.1,observer 版本 >= 4.2.0。使用 127.0.0.1 初始化单节点集群,无法与其他节点通信
service: 要求 ob-operator >= 2.2.0,observer 版本 >= 4.2.1.4 但不等于 4.2.2.x。为每个 OBServer 创建单独的 K8s Service,用 Service 的 ClusterIP 作为 OBServer 的通讯 IP
single-pvctrue: 要求 ob-operator >= 2.1.2。为每个 OBServer 的 Pod 创建并绑定一个整体的 PVC(默认创建三个)

创建集群

配置文件保存好之后,使用如下命令在 K8s 中创建集群:

kubectl apply -f obcluster.yaml

一般创建集群需要 2 分钟左右,执行以下命令,查询集群状态,当集群状态变成 running 之后表示集群创建成功。

kubectl get obclusters.oceanbase.oceanbase.com test -n oceanbase

# desired output
NAME STATUS AGE
test running 6m2s

连接集群

通过以下命令查找 observer 的 POD IP, POD 名的规则为 {cluster_name}-{cluster_id}-{zone}-uuid

kubectl get pods -n oceanbase -o wide

通过以下命令连接:

mysql -h{POD_IP} -P2881 -uroot -proot_password oceanbase -A -c

后续操作

集群创建成功后,还需要创建租户才可以给业务使用,请参考租户管理