Skip to main content

Helm Chart for IBM Cloud Pak for Data


Use these steps to deploy SingleStoreDB in a Kubernetes environment via the Helm chart for IBM Cloud Pak for Data®.

Cluster Admin Prerequisites

  1. 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

  2. Determine which StorageClass to use.

    Avoid using a StorageClass with an NFS-based provisioner. Ideally, you should choose a StorageClass that uses a block storage-based provisioner that supports volume expansion and the WaitForFirstConsumer binding mode.

    While cluster admin privileges are required to query or create a StorageClass, they are not required to use the StorageClass in the deployment.

  3. Run the following command to determine the fsGroup to use for the deployment.

    oc get project <project-name> -o=jsonpath=\

    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 the fsGroup ID that will be required in a later step.

  4. To deploy the required CRD, save the following content in a file named memsql-cluster-crd.yaml.

    kind: CustomResourceDefinition
        kind: MemsqlCluster
        listKind: MemsqlClusterList
        plural: memsqlclusters
        singular: memsqlcluster
          - memsql
      scope: Namespaced
      version: v1alpha1
        status: {}
      - 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
  5. Run the following command to apply the CRD file.

    oc apply -f memsql-cluster-crd.yaml

Deployment Prerequisites

  1. Obtain a SingleStore license from the SingleStore Customer Portal.

  2. 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.


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 \
docker push <private_registry>/memsql/node:centos-7.1.12-4ee69e2d18

Deploy SingleStoreDB

  1. Run the following commands to add the SingleStore Helm chart for IBM Cloud Pak for Data.

    helm repo add singlestoredb-ibmcloudpakfordata-charts
    "singlestoredb-ibmcloudpakfordata-charts" has been added to your repositories
    helm repo list
    NAME                                    URL
    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.

  2. Authenticate with the OpenShift API server.

    oc login OpenShift_URL:port
  3. Switch to the project that you selected in Cluster Admin Prerequisites.

    oc project <project-name>
  4. Create a values-override.yaml file to customize your deployment. Run the following command to see an example of values-override.yaml file.

    helm show readme \

    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:

      # choose either license or licenseSecret, but not both
      # choose either adminHashedPassword or adminHashedPasswordSecret, but not both
  5. 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.

  6. Wait for the deployment to complete and run the following commands. Note that ${CLUSTER_NAME} is the {{ }} from the Helm chart.

    CLUSTER_NAME=$(helm get values -a  -o \
    json <deployment-name> | jq -r '')
    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.

  7. 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 and svc-${CLUSTER_NAME}-dml service endpoints can be used to connect to SingleStoreDB using a MySQL compatible client. Note that svc-${CLUSTER_NAME}-dml only exists if {{ .Values.memsqlCluster.aggregatorSpec.count }} is greater than 1.

    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   3306:32278/TCP   42h
    svc-memsql-cluster-dml   LoadBalancer   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):

    Refer to Data Definition Language DDL and Data Manipulation Language DML for more information.