> ## Documentation Index
> Fetch the complete documentation index at: https://docs.streamnative.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Install StreamNative Operator with the Operator Lifecycle Manager

## Prerequisites

To use StreamNative Private Cloud, the following are required:

* Install [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl).
* Prepare a Kubernetes cluster within the supported versions.

## Import license

Before installing the StreamNative Operator, you need to import a valid license. Otherwise, StreamNative Operator will stop reconciling with a "no valid license" error message:

```
ERROR	controller.pulsarcoordinator	Reconciler error	{"reconciler group": "k8s.streamnative.io", "reconciler kind": "PulsarCoordinator", "name": "private-cloud", "namespace": "pulsar", "error": "No valid license has been found under namespace operators, please contact https://streamnative.io/deployment/start-free-trial"}
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
```

If you do not have any license, you can contact StreamNative to apply for a [free trial](https://streamnative.io/deployment/start-free-trial).

When you have a license in hand, you can import it through:

<Note title="Note">
  `metadata.labels` with the `cloud.streamnative.io/type: "license"` is required because the `sn-operator` will detect secrets in its namespace with label and to import automatically.
</Note>

```
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
# This label is a required field for the sn-operator to detect the license.
  labels:
    cloud.streamnative.io/type: "license"
  name: sn-license
  namespace: operators
type: Opaque
stringData:
  license: "Your license token"
EOF
```

## Install OLM

Run the following command to install OLM.

```bash theme={null}
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/install.sh | bash -s v0.25.0
```

## Install StreamNative Operator

OLM can deploy StreamNative Operator via the [Subscription](https://olm.operatorframework.io/docs/concepts/crds/subscription/) object.

Run the command below to deploy the StreamNative Private Cloud Operators in the operator namespace.

```
kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/main/quick-start/olm-subscriptions.yaml
```

Verify that Operator Pods are running.

```
kubectl get pods -n operators
```

### Provision a Pulsar cluster

Create the namespaces `pulsar`. The `pulsar` namespace is used for deploying your Pulsar cluster.

```
kubectl create ns pulsar
```

To provision a Pulsar cluster through the StreamNative Operator, you need to define a YAML file for your Pulsar cluster.

Run the command below to deploy your Pulsar cluster in `pulsar` namespace

```
kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/main/quick-start/pulsar-cluster.yaml
```
