Helm Chart for IBM Cloud Pak for Data
Introduction
Use these steps to deploy SingleStoreDB in a Kubernetes environment via the Helm chart for IBM Cloud Pak for Data®.
Cluster Admin Prerequisites
Determine the project (namespace) in which to deploy SingleStoreDB. SingleStore suggests deploying in the same project where the IBM Cloud Pak for Data control plane is installed
Determine which
StorageClass
to use.Avoid using a
StorageClass
with an NFS-based provisioner. Ideally, you should choose aStorageClass
that uses a block storage-based provisioner that supports volume expansion and theWaitForFirstConsumer
binding mode.While cluster admin privileges are required to query or create a
StorageClass
, they are not required to use theStorageClass
in the deployment.Run the following command to determine the
fsGroup
to use for the deployment.oc get project <project-name> -o=jsonpath=\ '{.metadata.annotations.openshift\.io/sa\.scc\.supplemental-groups}{"\n"}'
This command’s output will be similar to
1096160000/10000
. Note that the actual numbers may differ. Copy the number before the slash (/
) as this is thefsGroup
ID that will be required in a later step.To deploy the required CRD, save the following content in a file named
memsql-cluster-crd.yaml
.apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: memsqlclusters.memsql.com spec: group: memsql.com names: kind: MemsqlCluster listKind: MemsqlClusterList plural: memsqlclusters singular: memsqlcluster shortNames: - memsql scope: Namespaced version: v1alpha1 subresources: status: {} additionalPrinterColumns: - name: Aggregators type: integer description: Number of MemSQL Aggregators JSONPath: .spec.aggregatorSpec.count - name: Leaves type: integer description: Number of MemSQL Leaves (per availability group) JSONPath: .spec.leafSpec.count - name: Redundancy Level type: integer description: Redundancy level of MemSQL Cluster JSONPath: .spec.redundancyLevel - name: Age type: date JSONPath: .metadata.creationTimestamp
Run the following command to apply the CRD file.
oc apply -f memsql-cluster-crd.yaml
Deployment Prerequisites
Obtain a SingleStore license from the SingleStore Customer Portal.
Select the SingleStoreDB images to use. Two Docker images are required for the deployment.
The node image is the SingleStoreDB database engine, and can be found on Docker Hub.
The Operator image is used to manage the SingleStoreDB engine deployment in Kubernetes environment, and can also be found on Docker Hub.
Note
If you opt to deploy in an air-gapped environment (an environment with no outside connectivity), you must first pull these two images down and then upload them to your private Docker registry.
To do so, run the following commands for both the node image and the Operator image. Note that these commands may differ depending on the images selected.
docker pull memsql/node:centos-7.1.12-4ee69e2d18
docker tag docker pull memsql/node:centos-7.1.12-4ee69e2d18 \ <private_registry>/memsql/node:centos-7.1.12-4ee69e2d18
docker push <private_registry>/memsql/node:centos-7.1.12-4ee69e2d18
Deploy SingleStoreDB
Run the following commands to add the SingleStore Helm chart for IBM Cloud Pak for Data.
helm repo add singlestoredb-ibmcloudpakfordata-charts https://helm.singlestore.com/ibmcloudpakfordata **** "singlestoredb-ibmcloudpakfordata-charts" has been added to your repositories
helm repo list **** NAME URL singlestoredb-ibmcloudpakfordata-charts https://helm.singlestore.com/ibmcloudpakfordata
helm search repo singlestoredb-ibmcloudpakfordata-charts -o yaml **** - app_version: "" description: SingleStoreDB for IBM Cloud Pak for Data name: singlestoredb-ibmcloudpakfordata-charts/singlestoredb-ibmcloudpakfordata version: 1.0.0
The last command will list the Helm chart versions that
singlestoredb-ibmcloudpakfordata-charts
offers. Select the desired chart version.Authenticate with the OpenShift API server.
oc login OpenShift_URL:port
Switch to the project that you selected in Cluster Admin Prerequisites.
oc project <project-name>
Create a
values-override.yaml
file to customize your deployment. Run the following command to see an example ofvalues-override.yaml
file.helm show readme \ singlestoredb-ibmcloudpakfordata-charts/singlestoredb-ibmcloudpakfordata
Use the
StorageClass
that you selected in Cluster Admin Prerequisites.Substitute the
fsGroup
value with the value you copied in Cluster Admin Prerequisites.In general, when creating the
values-override.yaml
file, you may want/need to customize the following configuration values:operatorImage nodeImageRepo nodeImageTag nodeImageVersion coresPerUnit memoryPerUnit memsqlCluster: # choose either license or licenseSecret, but not both license licenseSecret: name Key # choose either adminHashedPassword or adminHashedPasswordSecret, but not both adminHashedPassword adminHashedPasswordSecret: name key aggregatorSpec: Count height storageGB leafSpec: count: height storageGB
Run the following command to deploy SingleStoreDB.
helm install <deployment-name> singlestoredb-ibmcloudpakfordata-charts/singlestoredb-ibmcloudpakfordata \ [--version x.y.z] -f values-override.yaml
Not that the version (
--version x.y.z
) is optional.Wait for the deployment to complete and run the following commands. Note that
${CLUSTER_NAME}
is the{{ .Values.memsqlCluster.name }}
from the Helm chart.CLUSTER_NAME=$(helm get values -a -o \ json <deployment-name> | jq -r '.memsqlCluster.name')
oc get memsqlcluster ${CLUSTER_NAME} -o=jsonpath='{.status.phase}{"\n"}'
The SingleStoreDB server deployment is complete when
Running
is displayed after running the above commands.After the deployment completes, run the following command to display the two SingleStoreDB service endpoints that are created during the deployment.
oc get svc | grep ${CLUSTER_NAME}
The
svc-${CLUSTER_NAME}-ddl
andsvc-${CLUSTER_NAME}-dml
service endpoints can be used to connect to SingleStoreDB using a MySQL compatible client. Note thatsvc-${CLUSTER_NAME}-dml
only exists if{{ .Values.memsqlCluster.aggregatorSpec.count }}
is greater than1
.The output will resemble the following (actual values will vary):
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc-memsql-cluster ClusterIP None <none> 3306/TCP 42h svc-memsql-cluster-ddl LoadBalancer 172.21.29.233 169.46.26.10 3306:32278/TCP 42h svc-memsql-cluster-dml LoadBalancer 172.21.6.77 169.46.26.11 3306:30922/TCP 42h
You may also obtain DDL and DML endpoints from the SingleStoreDB cluster status using the following commands:
oc get memsqlcluster ${CLUSTER_NAME} -o jsonpath='{.status.ddlEndpoint}{"\n"}'
oc get memsqlcluster ${CLUSTER_NAME} -o jsonpath='{.status.dmlEndpoint}{"\n"}'
The output will resemble the following (actual values will vary):
169.46.26.10:3306 169.46.26.11:3306
Refer to Data Definition Language DDL and Data Manipulation Language DML for more information.
Resources
Refer to the SingleStoreDB (MemSQL) Operator Introduction for a general deployment guide in a Kubernetes environment.
Refer to the SingleStoreDB (MemSQL) Operator Reference for detailed configuration information.
SingleStoreDB Data Definition Language DDL reference
SingleStoreDB Data Manipulation Language DML reference