# Cloud Topics on Kubernetes

> For the complete documentation index, see [llms.txt](https://docs.redpanda.com/llms.txt). Component-specific: [streaming-full.txt](https://docs.redpanda.com/streaming-full.txt)

---
title: Cloud Topics on Kubernetes
latest-redpanda-tag: v26.2.1
latest-console-tag: v3.10.0
latest-operator-version: v26.2.1
# EOL = End-of-Life (support lifecycle status)
page-is-nearing-eol: "false"
page-is-past-eol: "false"
page-eol-date: July 28, 2027
latest-connect-version: 4.105.0
docname: kubernetes/cloud-topics/k-cloud-topics
page-component-name: streaming
page-version: "26.2"
page-component-version: "26.2"
page-component-title: Streaming
page-relative-src-path: kubernetes/cloud-topics/k-cloud-topics.adoc
page-edit-url: https://github.com/redpanda-data/docs/edit/main/modules/manage/pages/kubernetes/cloud-topics/k-cloud-topics.adoc
description: Configure Cloud Topics on Kubernetes to optimize for latency-tolerant, high-throughput workloads using object storage as the primary data tier.
page-topic-type: how-to
personas: platform_admin, streaming_developer
learning-objective-1: Configure object storage for Cloud Topics on Kubernetes
learning-objective-2: Create Cloud Topics using the Redpanda Operator or Helm
learning-objective-3: Verify topic storage mode configuration
page-git-created-date: "2026-07-10"
page-git-modified-date: "2026-08-13"
support-status: supported
---

<!-- Source: https://docs.redpanda.com/streaming/current/manage/kubernetes/cloud-topics/k-cloud-topics.md -->

Starting in v26.1, Redpanda provides [Cloud Topics](https://docs.redpanda.com/streaming/current/reference/glossary/#cloud-topic) to support multi-modal streaming workloads in the most cost-effective way possible: as a per-topic configuration running mixed latency workloads. While standard Redpanda [topics](https://docs.redpanda.com/streaming/current/develop/manage-topics/config-topics/) that use local storage or Tiered Storage are ideal for latency-sensitive workloads (for example, for audit logs or analytics), Cloud Topics are optimized for latency-tolerant, high-throughput workloads where cross-AZ networking charges are a major consideration that can become the dominant cost driver at high throughput. These workloads can include observability streams, offline analytics, AI/ML model training data feeds, or development environments that have flexible latency requirements.

Instead of replicating every byte across expensive network links, Cloud Topics leverage durable, inexpensive cloud storage (S3, ADLS, GCS, MinIO) as the primary mechanism to both replicate data and serve it to consumers. This eliminates over 90% of the cost of replicating data over network links in multi-AZ clusters.

After reading this page, you will be able to:

-   Configure object storage for Cloud Topics on Kubernetes

-   Create Cloud Topics using the Redpanda Operator or Helm

-   Verify topic storage mode configuration


For an overview of how Cloud Topics work, including storage modes, use cases, and limitations, see [Cloud Topics in Kubernetes](../).

## [](#prerequisites)Prerequisites

You must have the following:

-   **kubectl**: Ensure you have the [`kubectl`](https://kubernetes.io/docs/tasks/tools/#kubectl) command-line tool installed and configured to communicate with your cluster.

-   **Redpanda**: A [Redpanda Operator and a Redpanda resource deployed](https://docs.redpanda.com/streaming/current/deploy/redpanda/kubernetes/k-production-deployment/) in your Kubernetes cluster running Redpanda v26.2 or later.

-   **Object storage**: A configured object storage backend (Amazon S3, Google Cloud Storage, Azure Blob Storage, or an S3-compatible store such as MinIO).

-   **Enterprise license**: A valid Redpanda Enterprise license applied to the cluster.

    > 📝 **NOTE**
    >
    > This feature requires an [enterprise license](https://docs.redpanda.com/streaming/current/get-started/licensing/). To get a trial license key or extend your trial period, [generate a new trial license key](https://redpanda.com/try-enterprise). To purchase a license, contact [Redpanda Sales](https://redpanda.com/upgrade).
    >
    > If Redpanda has enterprise features enabled and it cannot find a valid license, [restrictions](https://docs.redpanda.com/streaming/current/get-started/licensing/#self-managed) apply.

    To check if you already have a license key applied to your cluster:


```bash
rpk cluster license info
```

## [](#configure-object-storage)Configure object storage

Cloud Topics use the same object storage configuration as Tiered Storage. If you have already configured object storage for Tiered Storage, you can skip this step and proceed to [Set the default storage mode](#set-the-default-storage-mode).

For detailed instructions including IAM role configuration, access key management, and encryption options, see [Configure object storage](https://docs.redpanda.com/streaming/current/manage/kubernetes/tiered-storage/k-tiered-storage/#configure-object-storage) in the Tiered Storage documentation.

The following examples show the minimum required configuration for each cloud provider.

### [](#amazon-s3)Amazon S3

#### Helm + Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  clusterSpec:
    storage:
      tiered:
        credentialsSecretRef:
          accessKey:
            name: storage-secrets
            key: access-key
          secretKey:
            name: storage-secrets
            key: secret-key
        config:
          cloud_storage_enabled: true
          cloud_storage_credentials_source: config_file (1)
          cloud_storage_region: <region>
          cloud_storage_bucket: <bucket-name>
```

| 1 | Use aws_instance_metadata instead if you are using an IAM role attached to your nodes. |
| --- | --- |

#### Helm

`cloud-storage.yaml`

```yaml
storage:
  tiered:
    credentialsSecretRef:
      accessKey:
        name: storage-secrets
        key: access-key
      secretKey:
        name: storage-secrets
        key: secret-key
    config:
      cloud_storage_enabled: true
      cloud_storage_credentials_source: config_file (1)
      cloud_storage_region: <region>
      cloud_storage_bucket: <bucket-name>
```

| 1 | Use aws_instance_metadata instead if you are using an IAM role attached to your nodes. |
| --- | --- |

For details on IAM roles, access keys, and AWS KMS encryption, see [Amazon S3](https://docs.redpanda.com/streaming/current/manage/kubernetes/tiered-storage/k-tiered-storage/#amazon-s3) in the Tiered Storage documentation.

### [](#google-cloud-storage-gcs)Google Cloud Storage (GCS)

#### Helm + Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  clusterSpec:
    storage:
      tiered:
        credentialsSecretRef:
          accessKey:
            name: storage-secrets
            key: access-key
          secretKey:
            name: storage-secrets
            key: secret-key
        config:
          cloud_storage_enabled: true
          cloud_storage_credentials_source: config_file (1)
          cloud_storage_api_endpoint: storage.googleapis.com
          cloud_storage_region: <region>
          cloud_storage_bucket: <bucket-name>
```

| 1 | Use gcp_instance_metadata instead if you are using a GCP service account attached to your nodes. |
| --- | --- |

#### Helm

`cloud-storage.yaml`

```yaml
storage:
  tiered:
    credentialsSecretRef:
      accessKey:
        name: storage-secrets
        key: access-key
      secretKey:
        name: storage-secrets
        key: secret-key
    config:
      cloud_storage_enabled: true
      cloud_storage_credentials_source: config_file (1)
      cloud_storage_api_endpoint: storage.googleapis.com
      cloud_storage_region: <region>
      cloud_storage_bucket: <bucket-name>
```

| 1 | Use gcp_instance_metadata instead if you are using a GCP service account attached to your nodes. |
| --- | --- |

For details on IAM roles, HMAC access keys, and customer-managed encryption keys, see [Google Cloud Storage](https://docs.redpanda.com/streaming/current/manage/kubernetes/tiered-storage/k-tiered-storage/#google-cloud-storage) in the Tiered Storage documentation.

### [](#azure-blob-storage)Azure Blob Storage

#### Helm + Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  clusterSpec:
    storage:
      tiered:
        credentialsSecretRef:
          accessKey:
            name: storage-secrets
            key: shared-key
        config:
          cloud_storage_enabled: true
          cloud_storage_credentials_source: config_file (1)
          cloud_storage_azure_storage_account: <account-name>
          cloud_storage_azure_container: <container-name>
```

| 1 | Use azure_aks_oidc_federation instead if you are using an Azure managed identity. When using managed identities, omit credentialsSecretRef and configure workload identity annotations on the service account. |
| --- | --- |

#### Helm

`cloud-storage.yaml`

```yaml
storage:
  tiered:
    credentialsSecretRef:
      accessKey:
        name: storage-secrets
        key: shared-key
    config:
      cloud_storage_enabled: true
      cloud_storage_credentials_source: config_file (1)
      cloud_storage_azure_storage_account: <account-name>
      cloud_storage_azure_container: <container-name>
```

| 1 | Use azure_aks_oidc_federation instead if you are using an Azure managed identity. When using managed identities, omit credentialsSecretRef and configure workload identity annotations on the service account. |
| --- | --- |

For details on managed identities and account access keys, see [Microsoft ABS/ADLS](https://docs.redpanda.com/streaming/current/manage/kubernetes/tiered-storage/k-tiered-storage/#microsoft-absadls) in the Tiered Storage documentation.

## [](#set-the-default-storage-mode)Set the default storage mode

Cloud Topics are enabled automatically when cloud storage is enabled for the cluster ([`cloud_storage_enabled`](https://docs.redpanda.com/streaming/current/reference/properties/object-storage-properties/#cloud_storage_enabled) set to `true`), which is part of the object storage configuration in [Configure object storage](#configure-object-storage). No separate cluster property is required.

> 📝 **NOTE**
>
> In Redpanda versions earlier than v26.2, you must also set the `cloud_topics_enabled` cluster property to `true`. This property is deprecated in v26.2 and later. For details, see [Deprecated features](https://docs.redpanda.com/streaming/current/upgrade/deprecated/).

To make all new topics Cloud Topics by default, set the default storage mode for the cluster to `cloud`.

### Helm + Operator

1.  Add the following to your Redpanda custom resource to set the default storage mode:

    `redpanda-cluster.yaml`

    ```yaml
    apiVersion: cluster.redpanda.com/v1alpha2
    kind: Redpanda
    metadata:
      name: redpanda
    spec:
      clusterSpec:
        storage:
          tiered:
            mountType: none
            credentialsSecretRef:
              accessKey:
                name: cloud-storage-creds
                key: access-key
              secretKey:
                name: cloud-storage-creds
                key: secret-key
            config:
              cloud_storage_enabled: true
              cloud_storage_region: <region>
              cloud_storage_bucket: <bucket-name>
        config:
          cluster:
            default_redpanda_storage_mode: cloud (1)
    ```

    | 1 | Set to cloud to make all new topics Cloud Topics by default. Omit this to create Cloud Topics individually. |
    | --- | --- |

2.  Apply the configuration:

    ```bash
    kubectl apply -f redpanda-cluster.yaml -n <namespace>
    ```

3.  The Redpanda Operator reconciles the configuration. Wait for the cluster to be ready:

    ```bash
    kubectl rollout status statefulset redpanda -n <namespace> --watch
    ```

4.  Verify that cloud storage, which enables Cloud Topics, is turned on:

    ```bash
    kubectl exec -n <namespace> redpanda-0 -c redpanda -- \
      rpk cluster config get cloud_storage_enabled
    ```

    Expected output: `true`

### Helm

1.  Add the following to your Helm values file:

    `cloud-topics-values.yaml`

    ```yaml
    storage:
      tiered:
        mountType: none
        credentialsSecretRef:
          accessKey:
            name: cloud-storage-creds
            key: access-key
          secretKey:
            name: cloud-storage-creds
            key: secret-key
        config:
          cloud_storage_enabled: true
          cloud_storage_region: <region>
          cloud_storage_bucket: <bucket-name>
    config:
      cluster:
        default_redpanda_storage_mode: cloud (1)
    ```

    | 1 | Set to cloud to make all new topics Cloud Topics by default. Omit this to create Cloud Topics individually. |
    | --- | --- |

2.  Deploy or upgrade the Helm chart:

    ```bash
    helm upgrade --install redpanda redpanda/redpanda \
      -n <namespace> --create-namespace \
      -f cloud-topics-values.yaml
    ```

3.  Wait for the cluster to be ready:

    ```bash
    kubectl rollout status statefulset redpanda -n <namespace> --watch
    ```

4.  Verify that cloud storage, which enables Cloud Topics, is turned on:

    ```bash
    kubectl exec -n <namespace> redpanda-0 -c redpanda -- \
      rpk cluster config get cloud_storage_enabled
    ```

    Expected output: `true`

## [](#create-a-cloud-topic)Create a Cloud Topic

You can create Cloud Topics either by setting the cluster default storage mode to `cloud`, or by configuring individual topics.

### [](#create-cloud-topics-by-default)Create Cloud Topics by default

If you set `default_redpanda_storage_mode` to `cloud` in the cluster configuration, all new topics inherit the `cloud` storage mode automatically.

Verify the cluster default:

```bash
kubectl exec -n <namespace> redpanda-0 -c redpanda -- \
  rpk cluster config get default_redpanda_storage_mode
```

Expected output: `cloud`

Any new topic created without an explicit storage mode inherits this default:

`cloud-topic.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Topic
metadata:
  name: my-cloud-topic
  namespace: <namespace>
spec:
  partitions: 3
  replicationFactor: 3
  cluster:
    clusterRef:
      name: redpanda
```

```bash
kubectl apply -f cloud-topic.yaml
```

### [](#create-individual-cloud-topics)Create individual Cloud Topics

If the cluster default storage mode is not set to `cloud`, you can create individual Cloud Topics by setting the `redpanda.storage.mode` property on the topic.

`cloud-topic.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Topic
metadata:
  name: my-cloud-topic
  namespace: <namespace>
spec:
  partitions: 3
  replicationFactor: 3
  additionalConfig:
    redpanda.storage.mode: "cloud"
  cluster:
    clusterRef:
      name: redpanda
```

```bash
kubectl apply -f cloud-topic.yaml
```

### [](#override-the-cluster-default)Override the cluster default

Topic-level storage mode settings override the cluster default. For example, if the cluster default is `cloud`, you can create a topic that uses Tiered Storage instead:

`tiered-topic.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Topic
metadata:
  name: my-tiered-topic
  namespace: <namespace>
spec:
  partitions: 3
  replicationFactor: 3
  additionalConfig:
    redpanda.storage.mode: "tiered"
  cluster:
    clusterRef:
      name: redpanda
```

## [](#verify-topic-storage-mode)Verify topic storage mode

To verify the storage mode of a topic, inspect its configuration through the Topic resource status:

```bash
kubectl get topic <topic-name> -n <namespace> -o jsonpath=\
  '{range .status.topicConfiguration[*]}{.name}={.value} ({.source}){"\n"}{end}' \
  | grep storage.mode
```

Expected output for a Cloud Topic:

storage.mode=cloud (DEFAULT\_CONFIG)

Or, if explicitly set on the topic:

storage.mode=cloud (DYNAMIC\_TOPIC\_CONFIG)

The `source` field indicates whether the value was inherited from the cluster default (`DEFAULT_CONFIG`) or explicitly set on the topic (`DYNAMIC_TOPIC_CONFIG`).

## [](#suggested-reading)Suggested reading

-   [Restore Cloud Topics with Whole Cluster Restore](https://docs.redpanda.com/streaming/current/manage/kubernetes/cloud-topics/k-cloud-topics-whole-cluster-restore/)

-   [Use Tiered Storage on Kubernetes](https://docs.redpanda.com/streaming/current/manage/kubernetes/tiered-storage/k-tiered-storage/)

-   [Manage Topics with the Redpanda Operator](https://docs.redpanda.com/streaming/current/manage/kubernetes/k-manage-topics/)