Tembo Operator Install

Installing with Helm

Tembo provides Helm charts as a first-class method of installation on Kubernetes



1. Add the Helm repository

This repository is the only supported source of the tembo-operator charts.

helm repo add tembo https://tembo-io.github.io/tembo

2. Update your local Helm chart repository cache:

helm repo update

3. Install tembo-operator

To install the tembo-operator Helm chart, use the Helm install command as described below.

helm install \
  tembo tembo/tembo-operator \
  --namespace tembo-system \
  --create-namespace \
  --set controller.crds.create=true

A full list of available Helm values is on tembo-operator’s chart github page.

The example below shows how to tune the tembo-operator installation by overwriting the default Helm values:

helm install \
  tembo tembo/tembo-operator \
  --namespace tembo-system \
  --create-namespace \
  --set controller.crds.create=true \ # Example: enable installation of the CRDs
  --set controller.monitoring.prometheusRule=true \  # Example: enable prometheus rules for CNPG using a Helm parameter
  --set controller.extraEnv[0].name=USE_SHARED_CA,controller.extraEnv[0].value="1" \ # Example: enable the shared CA for instance connections
  --set controller.extraEnv[1].name=DATA_PLANE_BASEDOMAIN,controller.extraEnv[1].value=localhost \ # Example: enable domain name for ingress.
  --set controller.extraEnv[2].name=ENABLE_BACKUP,controller.extraEnv[2].value="false" \ # Example: disable backups (for local use)
  --set pod-init.logLevel=debug # Example: set pod-init log level to debug

4. Verify Installation

Once you’ve installed tembo-operator, you can verify it is deployed correctly by checking the tembo-system namespace for running pods:

kubectl get pods --namespace tembo-system

NAME                                    READY   STATUS    RESTARTS   AGE
tembo-cloudnative-pg-55966ffbc4-x58wb   1/1     Running   0          4m24s
tembo-controller-7d498b4d5-t7j5n        1/1     Running   0          4m24s
tembo-pod-init-77c456888b-l64sr         1/1     Running   0          4m24s

You should see the controller, pod-init, and cloudnative-pg pods in a Running state.

5. Deploy test instance

To deploy a test instance we will need to enable the deployment via a namespace label. You will need to apply this label to all namespaces you wish to deploy an instance in.

kubectl label namespace default "tembo-pod-init.tembo.io/watch"="true"

Apply the following sample CoreDB configuration. This will use all defaults and will deploy a Tembo instance to your cluster.

cat <<EOF | kubectl apply -f -
apiVersion: coredb.io/v1alpha1
kind: CoreDB
  name: test-db
spec: {}
kubectl get pods -n default
NAME                               READY   STATUS    RESTARTS   AGE
test-db-1                          1/1     Running   0          68s
test-db-metrics-58cf9ccf7d-wpc52   1/1     Running   0          88s
Storage Class Configuration

Depending on your cluster setup and cloud environment you are running the tembo-operator in you will need to define a storageClass when configuring your Tembo instance.

By default the tembo-operator will use your default storage class in your cluster. If you do not wish to use this storage class you will need to define it in the CoreDB configuration.

In this example we want to use the storageClass named gp3enc to provision the PVC’s with.

kubectl get storageclass
gp2 (default)      kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  278d
gp3enc             ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   254d
apiVersion: coredb.io/v1alpha1
kind: CoreDB
    name: test-db
    storageClass: gp3enc

Uninstalling with Helm

Uninstalling tembo-operator from a helm installation is a case of running the installation process, in reverse, using the delete command on both kubectl and helm.

helm --namespace tembo-system delete tembo

Next, delete the tembo-system namespace:

kubectl delete namespace tembo-system

Finally, delete the tembo-operator CustomResourceDefinitions using the link to the version you installed:

Warning: This command will also remove installed tembo-operator CRDs. All tembo-operator resources (e.g. coredbs.coredb.io resources) will be removed by Kubernetes’ garbage collector.

kubectl delete -f https://raw.githubusercontent.com/tembo-io/tembo/main/charts/tembo-operator/templates/crd.yaml

Note: If you used helm to install the CRDs with the controller.crds.create=true value for the chart, then the CRDs will NOT have been removed and you will need to run this final kubectl command to purge them from the cluster.

helm installation

tembo-operator bundles the CRDs along with the other templates in the Helm chart. This means that Helm manages these resources so they are upgraded with your tembo-operator release when you use controller.crds.create: true in your values file or CLI command. We also set a helm annotation of helm.sh/resource-policy: keep which will not delete the CRD from the cluster when you delete the helm deployment.


  • CRDS are automatically updated when you upgrade tembo-operator via helm
  • Same action manages both CRDs and other installation resources


  • Helm values need to be correct to avoid accidental removal of CRDs.

CRD Installation Advice

You should follow the path that makes sense for your environment.

Generally we recommend:

  • For most installations, install CRDs with helm is the best method to install for now.

You may want to consider your approach along with other tools that may offer helm compatible installs, for a standardized approach to managing CRD resources. If you have an approach that tembo-operator does not currently support, then please raise an issue to discuss or join us on our Slack community to ask questions.


chevron right arrow


Tembo operator