> ## 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.

# Upgrade StreamNative Operator

StreamNative Operator supports seamless upgrades to newer versions while maintaining the existing Pulsar cluster state and configuration.

**Since version 0.12.x, we have aligned the sn-operator helm chart version with the sn-operator version, this will make it easier for the sn-operator helm chart to represent sn-operator versions.**

This document demonstrates how to upgrade StreamNative Operator to a newer version.

<Note>
  If you previously installed pulsar-operator/zookeeper-operator/bookkeeper-operator, please refer to [upgrade-from-pulsar-operators](/private-cloud/v2/operate-private-cloud/upgrade/upgrade-from-pulsar-operators) to upgrade.
</Note>

Please check your license first:

* Import license through

```
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: sn-system
type: Opaque
stringData:
  license: "Your license token"
EOF
```

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

<Tabs>
  <Tab title="Helm">
    To upgrade to `sn-operator` under the Helm installation, follow below steps.

    * Apply the StreamNative Operator CRDs

    ```
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/bookkeeper.streamnative.io_bookkeeperclusters.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_agentfunctions.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_apikeys.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_connections.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_connectorcatalogs.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_consoles.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_coordinators.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_kafkaclusters.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_kafkaconnects.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_kafkarestproxies.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_mqttproxies.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_oxiaclusters.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_oxianamespaces.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_pfsqlclusters.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_pulsarcoordinators.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_snschemaregistries.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_storagecatalogs.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_unilinks.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/k8s.streamnative.io_unilinkschemas.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/pulsar.streamnative.io_pulsarbrokerrevisions.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/pulsar.streamnative.io_pulsarbrokers.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/pulsar.streamnative.io_pulsarfunctionsworkers.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/pulsar.streamnative.io_pulsarproxies.yaml --server-side --force-conflicts
    kubectl apply -f https://raw.githubusercontent.com/streamnative/private-cloud/refs/heads/branch-0.17.0/charts/sn-operator/crds/zookeeper.streamnative.io_zookeeperclusters.yaml --server-side --force-conflicts
    ```

    * Install the StreamNative Operator through Helm

    ```
    helm upgrade --install sn-operator streamnative/sn-operator -n sn-system
    ```
  </Tab>

  <Tab title="OLM">
    OLM will automatically handle the upgrade process, you don't need to do anything. Available channels are `alpha`, `beta`, and `stable` - for production environments, use the `stable` channel.
  </Tab>
</Tabs>

## Post-Upgrade Verification

After completing the upgrade, perform the following verification steps:

### 1. Check Operator Status

```bash theme={null}
# Verify operator is running
kubectl get pods -n sn-system

# Check operator logs for any errors
kubectl logs -f -n sn-system deployment/sn-operator
```
