Use Mission Control to provision and deploy an HCD cluster

With Mission Control, you can provision a database cluster directly in the Mission Control UI or through the kubectl command line tool.

Mission Control reconciles MissionControlCluster resources defined either through the UI or CLI against any currently deployed database instances. These definitions describe the desired state of your database clusters. Your definitions are used to automate the process of provisioning and configuring resources across your control and data planes.

Prerequisites

Use the Hyper-Converged Database (HCD) UI

You need the following:

Use the CLI

You need the following:

  • Working knowledge of Kubernetes.

  • Access to a Kubernetes cluster.

  • kubectl installed and configured.

Create and deploy an HCD cluster

Be sure you review the installation methods comparison before you proceed.

You can provision a database cluster using the Mission Control UI (simple or expert mode) or the CLI:

  • UI simple mode: DataStax recommends simple mode for new users. In this mode, Mission Control guides you through the minimum required configuration.

  • UI expert mode: DataStax recommends expert mode if you are familiar with the Kubernetes API and YAML configuration. In this mode, you define your YAML configuration file, and you have more granular control over your cluster configuration.

  • CLI: DataStax recommends the CLI if you are familiar with the kubectl command line tool.

For best practices, see Best practices for database clusters.

Use simple mode in the Mission Control UI

To provision a database cluster using simple mode, do the following:

  1. In the Mission Control UI, select a project, and then click Create Cluster.

  2. Enter a meaningful, human-readable Cluster Name.

    The Cluster Name can be any string of characters, including international, alphanumeric, punctuation—dashes, spaces, underscores, upper or lower case.

    Cluster names are permanent. You cannot change them after you create the cluster. The name uniquely identifies the cluster across all projects and all environments to prevent a logical cluster from inadvertently joining another.

  3. Select a cluster Type.

  4. Enter a valid Version number.

  5. Leave the Image field blank. It is for advanced users.

  6. To define the Datacenter configuration, do the following:

    1. Enter a meaningful, human-readable Datacenter Name.

      Datacenter names are permanent. You cannot change them after you create the cluster. The datacenter name:

      • Must start with an alphanumeric character.

      • Must be a single word.

      • Can be any capitalization: upper, lower, or mixed-case.

      • Can include dashes and underscores.

      • Must not include spaces.

    2. Optional: Add the configuration property and its corresponding value in the Add cassandra.yaml Setting sub-section if you require a non-standard Cassandra configuration.

    3. Select the Data Plane Context where you want to deploy the cluster.

      By default, Mission Control deploys a database cluster to the control plane. If a data plane is deployed on another Kubernetes cluster, you can choose to deploy the database cluster to that context. For more information, see Mission Control deployment topologies.

    4. Enter a Rack Name for the first rack, for example, rack1.

      Rack names are permanent. You cannot change them after you create the cluster. The rack name:

      • Must start with an alphanumeric character.

      • Must be a single word.

      • Can be any capitalization: upper, lower, or mixed-case.

      • Can have dashes and underscores.

      • Must not include spaces.

      Database pods, or nodes, are scheduled using node affinity.

    5. Add the mission-control.datastax.com/role=database label to the rack configuration to ensure database pods are scheduled on database worker nodes only, not on platform worker nodes.

      • Label: mission-control.datastax.com/role

      • Value: database

      DataStax recommends a minimum of three nodes for production clusters to support replication in a datacenter for high availability. With three replicas in a datacenter, this configuration can tolerate a failure of one node when using a strong consistency of LOCAL_QUORUM.

      To add another rack, select Add Rack and configure it as you did in the previous steps. Make sure that you add the node affinity label.

    6. For Nodes Per Rack, allocate at least one database node to the rack.

    7. Optional: To create a multi-datacenter cluster, select Add Datacenter and configure it as above.

    8. For Resource Requests, enter the minimum available resources required. DataStax recommends that you allocate the following minimum amounts of memory:

      • 4 GB of RAM for development environments and 8 GB for nodes with Vector Search enabled.

      • 32 GB of RAM to production nodes and 64 GB for nodes with Vector Search enabled.

      • 500 GB of storage for production nodes.

      For more information, see the HCD capacity planning guide.

      .Select the Storage Class you configured for your environment.

      DataStax recommends a class backed by NVMe SSDs.

    9. Enter the Storage Amount to allocate.

  7. To add Security Settings, do the following:

    1. Select the Require authentication to access cluster option.

    2. Enter a Superuser Name.

    3. Enter a Superuser Password.

    4. Select the Enable internode encryption option.

      The superuser role is required to provision other roles such as operators and service accounts.

      DataStax recommends that you secure your clusters by enabling authentication and internode encryption, especially for production environments.

  8. To configure Backup/Restore options, do the following:

    1. Optional: Enter a Prefix to use as the name of the top-level folder in the Backup bucket.

      If you don’t enter a value, Mission Control uses the cluster name.

    2. Select your Backup Configuration.

  9. Under Advanced Settings, for Heap Amount, enter an appropriate amount of heap based on your system memory:

    System memory Heap

    8 GB

    4 GB

    32 GB

    8-24 GB

    64 GB

    31 GB

  10. Click Create Cluster.

  11. Optional: Track the progress of the database pods:

    kubectl get pods -n mission-control

    Hyper-Converged Database (HCD) assigns database pod names prefixed by the cluster name. Each node completes a standard bootstrap sequence in approximately 2-3 minutes. Once operational and ready to accept client requests, each pod displays 2/2 containers as READY with a STATUS of Running.

  12. Optional: Inspect pods that are not ready:

    kubectl describe pod -n mission-control POD_NAME

    Replace POD_NAME with the name of your pod.

Use expert mode in the Mission Control UI

DataStax recommends expert mode only if you are familiar with the Kubernetes API and YAML configuration.

After you create or update a cluster in expert mode, you cannot edit it in simple mode.

For custom resource definition (CRD) details, see the Mission Control Custom Resource Definition (CRD) reference.

To provision a database cluster in Mission Control using expert mode, do the following:

  1. In the Mission Control UI, select a project, and then click Create Cluster.

  2. Click Expert. The Create Cluster page displays YAML configuration options.

  3. Edit the YAML configuration to define the cluster.

    As you make changes, autocomplete suggestions appear for some fields:

    • When you add a new array item (-), autocomplete provides intelligent suggestions based on the schema.

    • For arrays of objects, autocomplete suggests valid property names based on the object’s schema.

    • For arrays of enum strings, autocomplete suggests predefined values from the enum list.

  4. Click Create Cluster.

When you use expert mode to copy your YAML definition and create a new cluster on another installation, you must omit the metadata.resourceVersion property. If you include this property, you cannot make updates to the new cluster with kubectl.

Use the CLI

Assuming that your data plane clusters have either the appropriate compute capacity or the capability to auto-scale, you can define a simple MissionControlCluster YAML file and invoke kubectl to create a running cluster.

Create a cluster by completing the following define and submit tasks. Review the automatic reconciliation workflow, and then monitor the reconciliation status with one kubectl command.

To define a new MissionControlCluster, start with creating a new YAML file that defines the topology and configuration for the new cluster. This file is an instance of a MissionControlCluster Kubernetes custom resource (CR), and it describes the target end-state for the cluster.

The following is a minimal example of a MissionControlCluster instance that creates a three-node database cluster. Each node has five GB of storage available for data and requests 32 GB of RAM.

For more information, see the HCD capacity planning guide.

  1. On a local machine, create a manifest file named database-cluster.yaml to describe the cluster topology.

  2. Copy the following configuration into the file:

    apiVersion: missioncontrol.datastax.com/v1beta2
    kind: MissionControlCluster
    metadata:
      name: CLUSTER_NAME
      namespace: PROJECT_SLUG
    spec:
      encryption:
        internodeEncryption:
          enabled: true
      k8ssandra:
        auth: true
        cassandra:
          serverVersion: SERVER_VERSION
          serverType: SERVER_TYPE
          storageConfig:
            cassandraDataVolumeClaimSpec:
              storageClassName: default
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 1024Gi
          config:
            cassandraYaml:
              dynamic_snitch: false
              server_encryption_options:
                internode_encryption: all
            jvmOptions:
              additionalJvmServerOptions:
              heapSize: 31Gi
          resources:
            limits:
              cpu: "32"
              memory: 128Gi
            requests:
              cpu: "28"
              memory: 128Gi
          datacenters:
            - metadata:
                name: dc1
              datacenterName: dc1
              stopped: false
              size: 3
              racks:
                - name: rack1
                  nodeAffinityLabels:
                    mission-control.datastax.com/role: database
                - name: rack2
                  nodeAffinityLabels:
                    mission-control.datastax.com/role: database
                - name: rack3
                  nodeAffinityLabels:
                    mission-control.datastax.com/role: database

    Replace the following:

    • CLUSTER_NAME: The name of the cluster

    • PROJECT_SLUG: The name of the project

    • SERVER_VERSION: The version of the database

    • SERVER_TYPE: The type of the database server: hcd

  3. Change the storageClassName to a preferred value, matching the ones available in the installation, or leave the default value. To determine which storage classes are available in the environment, run:

    kubectl get sc
  4. Optional: Append the hostNetwork section at the same level as the config section in the database-cluster.yaml file if you use VMs with a Mission Control embedded Kubernetes runtime:

    ...
      networking:
        hostNetwork: true
      config:
    ...

    This makes the deployed services directly available on the network.

  5. Apply the manifest:

    kubectl apply -f MANIFEST_FILENAME.yaml

    Replace MANIFEST_FILENAME.yaml with the name of your file.

  6. Check that the pods representing the nodes appear:

    kubectl get pods -n mission-control
    Result
    NAME                                                  READY   STATUS    RESTARTS   AGE
    cass-operator-controller-manager-6487b8fb6c-xkjjx     1/1     Running   0          41m
    k8ssandra-operator-55b44544d6-n8gs8                   1/1     Running   0          41m
    mission-control-controller-manager-54c64975cd-nvcm7   1/1     Running   0          41m
    test-dc1-default-sts-0                                0/2     Pending   0          7s
    test-dc1-default-sts-1                                0/2     Pending   0          7s
    test-dc1-default-sts-2                                0/2     Pending   0          7s

    Each node must go through the standard bootstrapping process, which takes a few minutes. The cluster is operational when all of the nodes return 2/2 for READY and Running for STATUS:

    NAME                                                  READY   STATUS    RESTARTS   AGE
    cass-operator-controller-manager-6487b8fb6c-xkjjx     1/1     Running   0          50m
    k8ssandra-operator-55b44544d6-n8gs8                   1/1     Running   0          50m
    mission-control-controller-manager-54c64975cd-nvcm7   1/1     Running   0          50m
    test-dc1-default-sts-0                                2/2     Running   0          9m6s
    test-dc1-default-sts-1                                2/2     Running   0          9m6s
    test-dc1-default-sts-2                                2/2     Running   0          9m6s

    If any pods list their STATUS as Pending, there might be resource availability issues. Run the following command to check the pod status:

    kubectl describe pod POD_NAME

    Replace POD_NAME with the name of your pod.

  7. Discover the username of the automatically generated superuser by accessing the CLUSTER_NAME-superuser secret in the Kubernetes cluster in the mission-control namespace.

    Mission Control is secured by default and generates a unique superuser after disabling the default cassandra account.

    kubectl get secret/CLUSTER_NAME-superuser -n mission-control -o jsonpath='{.data.username}' | base64 -d; echo
    Result
    test-superuser
  8. Read the username’s password:

    kubectl get secret/CLUSTER_NAME-superuser -n mission-control -o jsonpath='{.data.password}' | base64 -d; echo
    Result
    PaSsw0rdFORsup3ruser
  9. Use the superuser username and password to connect to the cluster:

    Embedded Kubernetes cluster

    Because host networking is enabled, connect to any of the nodes through its Internet Protocol (IP) address or hostname using cqlsh with the correct superuser credentials. Port 9042 must be accessible from cqlsh.

    cqlsh --username CLUSTER_NAME-superuser --password SUPERUSER_PASSWORD ip-175-32-24-217
    Result
    Connected to test at ip-175-32-24-217:9042
    [cqlsh 6.0.0 | Cassandra 4.0.7-c556d537c707 | CQL spec 3.4.5 | Native protocol v5]
    Use HELP for help.
    test-superuser@cqlsh>
    External Kubernetes cluster

    Port forward the service that exposes the cluster’s CQL port:

    kubectl port-forward svc/CLUSTER_NAME-DATACENTER_NAME-service 9042:9042 -n mission-control

    Then, connect using cqlsh pointing at localhost:

    cqlsh --username CLUSTER_NAME-superuser --password SUPERUSER_PASSWORD 127.0.0.1
    Result
    Connected to test at 127.0.0.1:9042.
    [cqlsh 6.0.0 | Cassandra 4.0.7-c556d537c707 | CQL spec 3.4.5 | Native protocol v5]
    Use HELP for help.
    test-superuser@cqlsh>

Was this helpful?

Give Feedback

How can we improve the documentation?

© Copyright IBM Corporation 2026 | Privacy policy | Terms of use Manage Privacy Choices

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: Contact IBM