You are looking at the documentation of a prior release. To read the documentation of the latest release, please
visit here.
New to KubeDB? Please start here.
Initialize SingleStore using Script
This tutorial will show you how to use KubeDB to initialize a SingleStore database with *.sql, *.sh and/or *.sql.gz script. In this tutorial we will use .sql script stored in GitHub repository kubedb/singlestore-init-scripts.
Note: The yaml files that are used in this tutorial are stored here folder in GitHub repository kubedb/docs
Before You Begin
At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using kind.
To keep things isolated, this tutorial uses a separate namespace called
demo
throughout this tutorial.
$ kubectl create ns demo
namespace/demo created
Prepare Initialization Scripts
SingleStore supports initialization with .sh
, .sql
and .sql.gz
files. In this tutorial, we will use init.sql
script from singlestore-init-scripts git repository to create a TABLE kubedb_write_check
in kubedb_test
database.
We will use a ConfigMap as script source. You can use any Kubernetes supported volume as script source.
At first, we will create a ConfigMap from init.sql
file. Then, we will provide this ConfigMap as script source in init.script
of SingleStore crd spec.
Let’s create a ConfigMap with initialization script,
$ kubectl create configmap -n demo sdb-init-script \
--from-literal=init.sql="$(curl -fsSL https://github.com/kubedb/singlestore-init-scripts/raw/master/init.sql)"
configmap/sdb-init-script created
Create SingleStore License Secret
We need SingleStore License to create SingleStore Database. So, Ensure that you have acquired a license and then simply pass the license by secret.
$ kubectl create secret generic -n demo license-secret \
--from-literal=username=license \
--from-literal=password='your-license-set-here'
secret/license-secret created
Create a SingleStore database with Init-Script
Below is the SingleStore
object created in this tutorial.
apiVersion: kubedb.com/v1alpha2
kind: Singlestore
metadata:
name: sdb-sample
namespace: demo
spec:
version: "8.7.10"
init:
script:
configMap:
name: sdb-init-script
topology:
aggregator:
replicas: 2
podTemplate:
spec:
containers:
- name: singlestore
resources:
limits:
memory: "2Gi"
cpu: "600m"
requests:
memory: "2Gi"
cpu: "600m"
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
leaf:
replicas: 2
podTemplate:
spec:
containers:
- name: singlestore
resources:
limits:
memory: "2Gi"
cpu: "600m"
requests:
memory: "2Gi"
cpu: "600m"
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
licenseSecret:
name: license-secret
storageType: Durable
deletionPolicy: WipeOut
$ kubectl create -f https://github.com/kubedb/docs/raw/v2024.9.30/docs/examples/singlestore/Initialization/demo-1.yaml
singlestore.kubedb.com/singlestore-init-script created
Here,
spec.init.script
specifies a script source used to initialize the database before database server starts. The scripts will be executed alphabatically. In this tutorial, a sample .sql script from the git repositoryhttps://github.com/kubedb/singlestore-init-scripts.git
is used to create a test database. You can use other volume sources instead ofConfigMap
. The *.sql, *sql.gz and/or *.sh sripts that are stored inside the root folder will be executed alphabatically. The scripts inside child folders will be skipped.
KubeDB operator watches for SingleStore
objects using Kubernetes api. When a SingleStore
object is created, KubeDB operator will create a new PetSet and a Service with the matching SingleStore
object name. KubeDB operator will also create a governing service for PetSets with the name kubedb
, if one is not already present. No SingleStore specific RBAC roles are required for RBAC enabled clusters.
$ kubectl get sdb -n demo sdb-sample -oyaml
apiVersion: kubedb.com/v1alpha2
kind: Singlestore
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"kubedb.com/v1alpha2","kind":"Singlestore","metadata":{"annotations":{},"name":"sdb-sample","namespace":"demo"},"spec":{"deletionPolicy":"WipeOut","init":{"script":{"configMap":{"name":"sdb-init-script"}}},"licenseSecret":{"name":"license-secret"},"storageType":"Durable","topology":{"aggregator":{"podTemplate":{"spec":{"containers":[{"name":"singlestore","resources":{"limits":{"cpu":"600m","memory":"2Gi"},"requests":{"cpu":"600m","memory":"2Gi"}}}]}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"standard"}},"leaf":{"podTemplate":{"spec":{"containers":[{"name":"singlestore","resources":{"limits":{"cpu":"600m","memory":"2Gi"},"requests":{"cpu":"600m","memory":"2Gi"}}}]}},"replicas":2,"storage":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"10Gi"}},"storageClassName":"standard"}}},"version":"8.7.10"}}
creationTimestamp: "2024-10-03T07:00:56Z"
finalizers:
- kubedb.com
generation: 3
name: sdb-sample
namespace: demo
resourceVersion: "124012"
uid: ccfe9d0e-6f13-4187-b652-4e157a21568e
spec:
authSecret:
name: sdb-sample-root-cred
deletionPolicy: WipeOut
healthChecker:
failureThreshold: 1
periodSeconds: 10
timeoutSeconds: 10
init:
script:
configMap:
name: sdb-init-script
licenseSecret:
name: license-secret
storageType: Durable
topology:
aggregator:
podTemplate:
spec:
containers:
- name: singlestore
resources:
limits:
cpu: 600m
memory: 2Gi
requests:
cpu: 600m
memory: 2Gi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsGroup: 998
runAsNonRoot: true
runAsUser: 999
seccompProfile:
type: RuntimeDefault
- name: singlestore-coordinator
resources:
limits:
memory: 256Mi
requests:
cpu: 200m
memory: 256Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsGroup: 998
runAsNonRoot: true
runAsUser: 999
seccompProfile:
type: RuntimeDefault
initContainers:
- name: singlestore-init
resources:
limits:
memory: 512Mi
requests:
cpu: 200m
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsGroup: 998
runAsNonRoot: true
runAsUser: 999
seccompProfile:
type: RuntimeDefault
podPlacementPolicy:
name: default
securityContext:
fsGroup: 999
replicas: 2
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard
leaf:
podTemplate:
spec:
containers:
- name: singlestore
resources:
limits:
cpu: 600m
memory: 2Gi
requests:
cpu: 600m
memory: 2Gi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsGroup: 998
runAsNonRoot: true
runAsUser: 999
seccompProfile:
type: RuntimeDefault
- name: singlestore-coordinator
resources:
limits:
memory: 256Mi
requests:
cpu: 200m
memory: 256Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsGroup: 998
runAsNonRoot: true
runAsUser: 999
seccompProfile:
type: RuntimeDefault
initContainers:
- name: singlestore-init
resources:
limits:
memory: 512Mi
requests:
cpu: 200m
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsGroup: 998
runAsNonRoot: true
runAsUser: 999
seccompProfile:
type: RuntimeDefault
podPlacementPolicy:
name: default
securityContext:
fsGroup: 999
replicas: 2
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
version: 8.7.10
status:
conditions:
- lastTransitionTime: "2024-10-03T07:01:02Z"
message: 'The KubeDB operator has started the provisioning of Singlestore: demo/sdb-sample'
observedGeneration: 3
reason: DatabaseProvisioningStartedSuccessfully
status: "True"
type: ProvisioningStarted
- lastTransitionTime: "2024-10-03T07:11:23Z"
message: All leaf replicas are ready for Singlestore demo/sdb-sample
observedGeneration: 3
reason: AllReplicasReady
status: "True"
type: ReplicaReady
- lastTransitionTime: "2024-10-03T07:02:13Z"
message: database demo/sdb-sample is accepting connection
observedGeneration: 3
reason: AcceptingConnection
status: "True"
type: AcceptingConnection
- lastTransitionTime: "2024-10-03T07:02:13Z"
message: database demo/sdb-sample is ready
observedGeneration: 3
reason: AllReplicasReady
status: "True"
type: Ready
- lastTransitionTime: "2024-10-03T07:02:14Z"
message: 'The Singlestore: demo/sdb-sample is successfully provisioned.'
observedGeneration: 3
reason: DatabaseSuccessfullyProvisioned
status: "True"
type: Provisioned
phase: Ready
KubeDB operator sets the status.phase
to Ready
once the database is successfully created.
Now, we will connect to this database and check the data inserted by the initlization script.
# Connecting to the database
$ kubectl exec -it -n demo sdb-sample-aggregator-0 -- bash
Defaulted container "singlestore" out of: singlestore, singlestore-coordinator, singlestore-init (init)
[memsql@sdb-sample-aggregator-0 /]$ memsql -uroot -p$ROOT_PASSWORD
singlestore-client: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 144
Server version: 5.7.32 SingleStoreDB source distribution (compatible; MySQL Enterprise & MySQL Commercial)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
singlestore> show databases;
+--------------------+
| Database |
+--------------------+
| cluster |
| information_schema |
| kubedb_test |
| memsql |
| singlestore_health |
+--------------------+
5 rows in set (0.00 sec)
singlestore> use kubedb_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# Showing the inserted `kubedb_write_check`
singlestore> select * from kubedb_write_check;
+----+-------+
| id | name |
+----+-------+
| 3 | name3 |
| 1 | name1 |
| 2 | name2 |
+----+-------+
3 rows in set (0.02 sec)
singlestore> exit
Bye
Cleaning up
To cleanup the Kubernetes resources created by this tutorial, run:
$ kubectl delete sdb -n demo sdb-sample
singlestore.kubedb.com "sdb-sample" deleted
$ kubectl delete ns demo
namespace "demo" deleted