OpenTenBase KubeBlocks 插件
此文件夹包含两个 Helm 图表,用于在 Kubernetes 集群上部署 OpenTenBase KubeBlocks 插件。使用此插件,您可以在 Kubernetes 上部署和管理 OpenTenBase 集群。
目前,已经支持操作系统架构 amd64
和 arm64
。您可以按照以下步骤在您的笔记本电脑(包括 Mac M1)上部署 OpenTenBase 集群。这显著降低了用户体验 OpenTenBase 的门槛和难度。
什么是 KubeBlocks?
KubeBlocks 是一个开源的控制平面软件,运行并管理数据库、消息队列和其他数据基础设施在 K8s 上。KubeBlocks 的名字灵感来自 Kubernetes 和 LEGO 积木,意味着在 K8s 上运行和管理数据基础设施可以像玩 LEGO 积木一样标准化和高效。
关于 KubeBlocks 的更多信息可以在 KubeBlocks GitHub repository 和 KubeBlocks website 中找到。您可以在 KubeBlocks Add-ons GitHub repository 中找到所有支持的插件。
前提条件
在您部署 OpenTenBase KubeBlocks 插件之前,您需要具备以下前提条件:
- 一个 Kubernetes 集群,您可以使用 minikube 创建一个本地集群进行测试
- 在本地机器上安装
kubectl
命令行工具 - 在本地机器上安装
helm
命令行工具 - 安装
kbcli
命令行工具以安装 KubeBlocks 控制平面
安装 KubeBlocks
请参考 KubeBlocks installation guide 在您的 Kubernetes 集群上安装 kbcli
和 KubeBlocks 控制平面。
部署 OpenTenBase 插件
要在您的 Kubernetes 集群上部署 OpenTenBase 插件,请按照以下步骤操作:
$ helm install opentenbase ./opentenbase
检查 ClusterDefinition 和 ClusterVersion:
$ kubectl get cd opentenbase
NAME MAIN-COMPONENT-NAME STATUS AGE
opentenbase gtm Available 11m
$ kubectl get cv |grep opentenbase
opentenbase-2.5.0 opentenbase Available 12m
创建一个 OpenTenBase 集群
运行下列指令创建一个 OpenTenBase 集群:
$ helm install otb ./opentenbase-cluster
此命令将创建一个包含一个 GTM、一个 Coordinator 和两个 Datanode 的 OpenTenBase 集群。运行以下命令检查 OpenTenBase 集群的状态:
$ kubectl get cluster otb
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
otb opentenbase opentenbase-2.5.0 Delete Creating 12s
检查 OpenTenBase 集群的 pods:
$ kubectl get pods -l app.kubernetes.io/instance=otb
NAME READY STATUS RESTARTS AGE
otb-cn-0-0 1/1 Running 0 2m39s
otb-dn-0-0 2/2 Running 0 2m39s
otb-dn-1-0 2/2 Running 0 2m39s
otb-gtm-0 1/1 Running 0 2m39s
检查所有组件的状态:
$ kbcli cluster describe otb
Name: otb Created Time: Apr 07,2024 15:28 UTC+0800
NAMESPACE CLUSTER-DEFINITION VERSION STATUS TERMINATION-POLICY
default opentenbase opentenbase-2.5.0 Updating Delete
Endpoints:
COMPONENT MODE INTERNAL EXTERNAL
gtm ReadWrite otb-gtm.default.svc.cluster.local:50001 <none>
dn-0 ReadWrite otb-dn-0.default.svc.cluster.local:5432 <none>
dn-1 ReadWrite otb-dn-1.default.svc.cluster.local:5432 <none>
cn-0 ReadWrite otb-cn-0.default.svc.cluster.local:5432 <none>
Topology:
COMPONENT INSTANCE ROLE STATUS AZ NODE CREATED-TIME
cn-0 otb-cn-0-0 <none> Running <none> kind-control-plane/172.18.0.2 Apr 07,2024 15:28 UTC+0800
dn-0 otb-dn-0-0 <none> Running <none> kind-control-plane/172.18.0.2 Apr 07,2024 15:28 UTC+0800
dn-1 otb-dn-1-0 <none> Running <none> kind-control-plane/172.18.0.2 Apr 07,2024 15:28 UTC+0800
gtm otb-gtm-0 <none> Running <none> kind-control-plane/172.18.0.2 Apr 07,2024 15:28 UTC+0800
Resources Allocation:
COMPONENT DEDICATED CPU(REQUEST/LIMIT) MEMORY(REQUEST/LIMIT) STORAGE-SIZE STORAGE-CLASS
gtm false 1 / 1 1Gi / 1Gi data:20Gi standard
dn-0 false 1 / 1 1Gi / 1Gi data:20Gi standard
dn-1 false 1 / 1 1Gi / 1Gi data:20Gi standard
cn-0 false 1 / 1 1Gi / 1Gi data:20Gi standard
Images:
COMPONENT TYPE IMAGE
gtm gtm docker.io/domainlau/opentenbase:v2.5.0
dn-0 dn docker.io/domainlau/opentenbase:v2.5.0
dn-1 dn docker.io/domainlau/opentenbase:v2.5.0
cn-0 cn docker.io/domainlau/opentenbase:v2.5.0
Show cluster events: kbcli cluster list-events -n default otb
连接到 OpenTenBase 集群
运行以下命令连接到 OpenTenBase 集群:
$ kubectl exec -it otb-cn-0-0 -- bash
opentenbase@otb-cn-0-0:~$ psql postgres
psql (PostgreSQL 10.0 OpenTenBase V2)
Type "help" for help.
postgres=# select * from pgxc_node;
node_name | node_type | node_port | node_host | nodeis_primary | nodeis_preferred | node_id | node_cluster_name
-----------+-----------+-----------+-------------------+----------------+------------------+-------------+---------------------
a_one | G | 50001 | otb-gtm | t | f | -1343982441 | opentenbase_cluster
dn_0 | D | 5432 | otb-dn-0 | f | f | 1485981022 | opentenbase_cluster
dn_1 | D | 5432 | otb-dn-1 | f | f | -1300059100 | opentenbase_cluster
cn_0 | C | 5432 | otb-cn-0 | f | f | -1541982360 | opentenbase_cluster
(4 rows)
postgres=# create default node group default_group with(dn_0, dn_1);
CREATE NODE GROUP
postgres=# create sharding group to group default_group;
CREATE SHARDING GROUP
postgres=# clean sharding;
CLEAN SHARDING
postgres=# select * from pgxc_group;
group_name | default_group | group_members
---------------+---------------+---------------
default_group | 1 | 16384 16385
(1 row)
postgres=# create table public.t1_pt(
f1 int not null,
f2 timestamp not null,
f3 varchar(20),
primary key(f1))
partition by range (f2)
begin (timestamp without time zone '2019-01-01 0:0:0')
step (interval '1 month') partitions (3)
distribute by shard(f1)
to group default_group;
CREATE TABLE
postgres=# \d+ public.t1_pt
Table "public.t1_pt"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+-----------------------------+-----------+----------+---------+----------+--------------+-------------
f1 | integer | | not null | | plain | |
f2 | timestamp without time zone | | not null | | plain | |
f3 | character varying(20) | | | | extended | |
Indexes:
"t1_pt_pkey" PRIMARY KEY, btree (f1)
Distribute By: SHARD(f1)
Location Nodes: ALL DATANODES
Partition By: RANGE(f2)
Partitions number: 3
Start With: 2019-01-01
Interval Of Partition: 1 MONTH
或者,您可以使用 kubectl port-forward
从本地机器连接到 OpenTenBase 集群:
$ kubectl port-forward svc/otb-cn-0 5432:5432
然后,您可以说使用 psql
连接到OpenTenBase 集群:
$ psql -h 127.0.0.1 -p 5432 -U opentenbase postgres
删除 OpenTenBase 集群
运行以下命令删除 OpenTenBase 集群:
$ helm uninstall otb