Upgrade a database cluster with zero downtime

You can upgrade a DSE or HCD cluster with zero downtime by updating the MissionControlCluster manifest. This topic demonstrates upgrading the DSE version from 6.9.12 to 6.9.13.

Prerequisites

Upgrade process

The existing deployment consists of 1 datacenter (dc1) with 3 nodes, each node on a separate rack.

Workflow of user and operators

  1. Submit a modified MissionControlCluster manifest to the control plane Kubernetes cluster.

  2. Cluster-level operator detects the change and modifies the datacenter-level resource.

  3. Datacenter-level operator detects the change and modifies the rack-level resource.

  4. Datacenter-level operator terminates the instance in the rack.

  5. Datacenter-level operator bootstraps a replacement node.

  6. Datacenter-level operator repeats steps c-e for all racks in one datacenter.

  7. Cluster-level operator repeats steps b-e for all datacenters in a cluster, one dc at a time, in the case of a multi-datacenter cluster.

  8. User follows Upgrade SSTables steps, if required.

    Upgrades of DSE versions follow the same process as configuration change deployments. See Deploy configuration changes to a DSE cluster.

Cluster upgrade with no downtime

  1. Modify the existing MissionControlCluster YAML (demo.yaml) in the control plane Kubernetes cluster, overwriting the value 6.9.12 in the spec.k8ssandra.cassandra.serverVersion field with 6.9.13:

    apiVersion: missioncontrol.datastax.com/v1beta2
    kind: MissionControlCluster
    metadata:
      name: demo
    spec:
      k8ssandra:
        cassandra:
          serverVersion: 6.9.13
    ...
  2. Submit the version change to the Kubernetes control plane cluster with the following command:

    kubectl apply -f demo.yaml

    The version upgrade is done as a rolling update.

  3. Monitor the progress of the upgrade from the data plane east cluster, looking at the status of the CassandraDatacenter with this command:

    kubectl get cassandradatacenter dc1 -o yaml
    Result
    status:
      cassandraOperatorProgress: Updating
      conditions:
      - lastTransitionTime: "2025-08-28T16:07:10Z"
        message: ""
        reason: ""
        status: "True"
        type: Healthy
      - lastTransitionTime: "2025-08-28T16:07:10Z"
        message: ""
        reason: ""
        status: "True"
        type: Stopped
    ...

    If the Updating operation’s conditions:status is True, then the update is in progress. When the Updating operation is complete, the cass-operator changes the conditions.status to False.

See also

You can trigger an Upgrade SSTables operation to rewrite SSTables into newer formats, if required.

Was this helpful?

Give Feedback

How can we improve the documentation?

© 2025 DataStax, an IBM Company | 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: +1 (650) 389-6000, info@datastax.com