Skip to content

OpenTenBase Add-on for KubeBlocks

This folder contains two Helm charts for deploying the OpenTenBase KubeBlocks add-on on a Kubernetes cluster. Use this add-on, you can deploy and manage OpenTenBase clusters on Kubernetes.

Now, already support OS architecture amd64 and arm64. You can follow the steps below to deploy the OpenTenBase Cluster on you laptop(including Mac M1). This significantly lowers the barrier and difficulty for users to experience OpenTenBase.

What is KubeBlocks?

KubeBlocks is an open-source control plane software that runs and manages databases, message queues and other data infrastructure on K8s. The name KubeBlocks is inspired by Kubernetes and LEGO blocks, signifying that running and managing data infrastructure on K8s can be standard and productive, like playing with LEGO blocks.

More information about KubeBlocks can be found in the KubeBlocks GitHub repository and the KubeBlocks website. You can find all supported add-ons in the KubeBlocks Add-ons GitHub repository.

Prerequisites

Before you deploy the OpenTenBase KubeBlocks add-on, you need to have the following prerequisites:

  • A Kubernetes cluster, you can use minikube to create a local cluster for testing
  • The kubectl command-line tool installed on your local machine
  • The helm command-line tool installed on your local machine
  • The kbcli command-line tool to install the KubeBlocks control plane

Install KubeBlocks

Refer to the KubeBlocks installation guide to install the kbcli and KubeBlocks control plane on your Kubernetes cluster.

Deploy OpenTenBase Add-on

To deploy the OpenTenBase add-on on your Kubernetes cluster, follow these steps:

$ helm install opentenbase ./opentenbase

Check the ClusterDefinition and 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

Create an OpenTenBase Cluster

Run the following command to create an OpenTenBase cluster:

$ helm install otb ./opentenbase-cluster

This command will create an OpenTenBase cluster with one GTM, one Coordinator, and two Datanodes. Run the following command to check the status of the OpenTenBase cluster:

$ kubectl get cluster otb
NAME   CLUSTER-DEFINITION   VERSION              TERMINATION-POLICY   STATUS     AGE
otb    opentenbase          opentenbase-2.5.0   Delete               Creating   12s

Check the pods of the OpenTenBase cluster:

$ 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

Check all components status:

$ 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

Connect to the OpenTenBase Cluster

Run the following command to connect to the OpenTenBase cluster:

$ 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

Or, you can use kubectl port-forward and connect to the OpenTenBase cluster from your local machine:

$ kubectl port-forward svc/otb-cn-0 5432:5432

Then, you can connect to the OpenTenBase cluster using the psql command:

$ psql -h 127.0.0.1 -p 5432 -U opentenbase postgres

Delete the OpenTenBase Cluster

Run the following command to delete the OpenTenBase cluster:

$ helm uninstall otb