# Upgrade AKO using Helm

## Overview

This page describes how to upgrade Aerospike Kubernetes Operator (AKO) to the latest version using Helm.

## Prerequisites

-   Helm 3.x

::: note
Do not skip intermediate AKO versions if you are starting from version 3.0.0. Upgrade to version 4.0.2 or later before upgrading to version 4.1.2:

-   [Upgrade to 4.0.2](https://aerospike.com/docs/kubernetes/4.0.x/manage/upgrade/upgrading-operator)
:::

### Upgrade CRD

Helm 3.x does not support the upgrade of Custom Resource Definitions (CRDs). You need to manually upgrade the CRD.

1.  Replace the old CRDs with the new CRD:
    
    ::: caution
    Do not remove the old CRDs. This deletes all the Aerospike related CRs like AerospikeClusters, AerospikeBackups. Do not use `kubectl replace` with the `--force` flag as this also deletes all the Aerospike related CRs.
    :::
    
    Terminal window
    
    ```shell
    kubectl replace -f https://raw.githubusercontent.com/aerospike/aerospike-kubernetes-operator/v4.1.2/config/crd/bases/asdb.aerospike.com_aerospikeclusters.yaml
    
    kubectl replace -f https://raw.githubusercontent.com/aerospike/aerospike-kubernetes-operator/v4.1.2/config/crd/bases/asdb.aerospike.com_aerospikebackupservices.yaml
    
    kubectl replace -f https://raw.githubusercontent.com/aerospike/aerospike-kubernetes-operator/v4.1.2/config/crd/bases/asdb.aerospike.com_aerospikebackups.yaml
    
    kubectl replace -f https://raw.githubusercontent.com/aerospike/aerospike-kubernetes-operator/v4.1.2/config/crd/bases/asdb.aerospike.com_aerospikerestores.yaml
    ```
    
2.  Run the following command to add the Helm repository.
    
    Terminal window
    
    ```sh
    helm repo add aerospike https://aerospike.github.io/aerospike-kubernetes-enterprise
    ```
    
    If the Helm repository is already added, update the index:
    
    ```plaintext
    helm repo update
    ```
    
3.  Run the following command to upgrade AKO:
    
    Terminal window
    
    ```shell
    helm upgrade aerospike-kubernetes-operator aerospike/aerospike-kubernetes-operator --version=4.1.2
    ```
    

## Check AKO logs

AKO runs as two replicas by default for higher availability. Run the following command to follow the logs for the AKO pods.

```plaintext
kubectl -n RELEASE_NAMESPACE logs -f deployments/aerospike-kubernetes-operator manager
```

Sample output:

Terminal window

```shell
2025-08-06T08:42:37Z    INFO    setup   Initializing webhook certificate watcher using provided certificates    {"webhook-cert-path": "/tmp/k8s-webhook-server/serving-certs", "webhook-cert-name": "tls.crt", "webhook-cert-key": "tls.key"}

2025-08-06T08:42:37Z    INFO    controller-runtime.certwatcher  Updated current TLS certificate

2025-08-06T08:42:37Z    INFO    setup   Init aerospike-server config schemas

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "6.0.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "6.3.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "7.1.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "8.0.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "8.1.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "6.1.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "6.2.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "6.4.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "7.0.0"}

2025-08-06T08:42:37Z    DEBUG   setup   Config schema added     {"version": "7.2.0"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a mutating webhook  {"GVK": "asdb.aerospike.com/v1, Kind=AerospikeCluster", "path": "/mutate-asdb-aerospike-com-v1-aerospikecluster"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/mutate-asdb-aerospike-com-v1-aerospikecluster"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a validating webhook        {"GVK": "asdb.aerospike.com/v1, Kind=AerospikeCluster", "path": "/validate-asdb-aerospike-com-v1-aerospikecluster"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/validate-asdb-aerospike-com-v1-aerospikecluster"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a mutating webhook  {"GVK": "asdb.aerospike.com/v1beta1, Kind=AerospikeBackupService", "path": "/mutate-asdb-aerospike-com-v1beta1-aerospikebackupservice"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/mutate-asdb-aerospike-com-v1beta1-aerospikebackupservice"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a validating webhook        {"GVK": "asdb.aerospike.com/v1beta1, Kind=AerospikeBackupService", "path": "/validate-asdb-aerospike-com-v1beta1-aerospikebackupservice"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/validate-asdb-aerospike-com-v1beta1-aerospikebackupservice"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a mutating webhook  {"GVK": "asdb.aerospike.com/v1beta1, Kind=AerospikeBackup", "path": "/mutate-asdb-aerospike-com-v1beta1-aerospikebackup"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/mutate-asdb-aerospike-com-v1beta1-aerospikebackup"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a validating webhook        {"GVK": "asdb.aerospike.com/v1beta1, Kind=AerospikeBackup", "path": "/validate-asdb-aerospike-com-v1beta1-aerospikebackup"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/validate-asdb-aerospike-com-v1beta1-aerospikebackup"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a mutating webhook  {"GVK": "asdb.aerospike.com/v1beta1, Kind=AerospikeRestore", "path": "/mutate-asdb-aerospike-com-v1beta1-aerospikerestore"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/mutate-asdb-aerospike-com-v1beta1-aerospikerestore"}

2025-08-06T08:42:37Z    INFO    controller-runtime.builder      Registering a validating webhook        {"GVK": "asdb.aerospike.com/v1beta1, Kind=AerospikeRestore", "path": "/validate-asdb-aerospike-com-v1beta1-aerospikerestore"}

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Registering webhook     {"path": "/validate-asdb-aerospike-com-v1beta1-aerospikerestore"}

2025-08-06T08:42:37Z    INFO    setup   Adding webhook certificate watcher to manager

2025-08-06T08:42:37Z    INFO    setup   Starting manager

2025-08-06T08:42:37Z    INFO    controller-runtime.metrics      Starting metrics server

2025-08-06T08:42:37Z    INFO    starting server {"name": "health probe", "addr": "[::]:8081"}

2025-08-06T08:42:37Z    INFO    setup   disabling http/2

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Starting webhook server

2025-08-06T08:42:37Z    INFO    setup   disabling http/2

2025-08-06T08:42:37Z    INFO    controller-runtime.webhook      Serving webhook server  {"host": "", "port": 9443}
```