Deleting a Cluster

Delete your M3DB cluster with kubectl:

kubectl delete m3dbcluster simple-cluster

By default, the operator will delete the placement and namespaces associated with a cluster before the CRD resource deleted. If you do not want this behavior, set keepEtcdDataOnDelete to true on your cluster spec.

Under the hood, the operator uses Kubernetes finalizers to ensure the cluster CRD is not deleted until the operator has had a chance to do cleanup.

Debugging Stuck Cluster Deletion

If for some reason the operator is unable to delete the placement and namespace for the cluster, the cluster CRD itself will be stuck in a state where it can not be deleted, due to the way finalizers work in Kubernetes. The operator might be unable to clean up the data for many reasons, for example if the M3DB cluster itself is not available to serve the APIs for cleanup or if etcd is down and cannot fulfill the deleted.

To allow the CRD to be deleted, you can kubectl edit m3dbcluster $CLUSTER and remove the operator.m3db.io/etcd-deletion finalizer. For example, in the following cluster you’d remove the finalizer from metadata.finalizers:

apiVersion: operator.m3db.io/v1alpha1
kind: M3DBCluster
metadata:
  ...
  finalizers:
  - operator.m3db.io/etcd-deletion
  name: m3db-cluster
...

Note that if you do this, you’ll have to manually remove the relevant data in etcd. For a cluster in namespace $NS with name $CLUSTER, the keys are:

  • _sd.placement/$NS/$CLUSTER/m3db
  • _kv/$NS/$CLUSTER/m3db.node.namespaces