# Configure Redpanda in 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: Configure Redpanda in Kubernetes
latest-redpanda-tag: v26.1.9
latest-console-tag: v3.7.3
latest-operator-version: v26.1.4
# EOL = End-of-Life (support lifecycle status)
page-is-nearing-eol: "false"
page-is-past-eol: "false"
page-eol-date: March 31, 2027
latest-connect-version: 4.93.0
docname: kubernetes/k-configure-helm-chart
page-component-name: streaming
page-version: "26.1"
page-component-version: "26.1"
page-component-title: Streaming
page-relative-src-path: kubernetes/k-configure-helm-chart.adoc
page-edit-url: https://github.com/redpanda-data/docs/edit/main/modules/manage/pages/kubernetes/k-configure-helm-chart.adoc
description: Customize the values of the Redpanda Helm chart or Redpanda resource to configure both the Redpanda cluster and the Kubernetes components.
page-git-created-date: "2024-01-04"
page-git-modified-date: "2025-08-27"
support-status: supported
---

<!-- Source: https://docs.redpanda.com/streaming/current/manage/kubernetes/k-configure-helm-chart.md -->

To configure the cluster and the Kubernetes components that the chart deploys, you can customize the values of the Redpanda Helm chart.

Helm does a three-way merge with the following:

-   Your overridden values

-   The values in the existing Helm release

-   The default values in the new Helm release (if you’re upgrading)


## [](#find-configuration-options)Find configuration options

To see what options you can override in the chart, use the `helm show values` command:

```bash
helm repo add redpanda https://charts.redpanda.com
helm repo update
helm show values redpanda/redpanda
```

This command displays all the values, descriptions, and defaults, which are also documented in the [Redpanda Helm Chart Specification](https://docs.redpanda.com/streaming/current/reference/k-redpanda-helm-spec/).

## [](#configure-redpanda)Configure Redpanda

#### Operator

To customize the values of the Redpanda Helm chart, you can override the defaults in the [Redpanda custom resource](https://docs.redpanda.com/streaming/current/reference/k-crd/#redpanda).

You must add all your overrides to the `spec.clusterSpec` configuration.

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  chartRef: {}
  clusterSpec: {}
```

For example, to override the `storage.persistentVolume.storageClass` configuration:

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  chartRef: {}
  clusterSpec:
    storage:
      persistentVolume:
        storageClass: "<storage-class>"
```

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

The values in your Redpanda custom resource override their counterparts in the Helm chart’s `values.yaml` file. Any values that are not overridden maintain their defaults.

#### Helm

To customize the values of the Redpanda Helm chart, you can override the defaults in your own YAML file with the `--values` option or in the command line with the `--set` option.

> 💡 **TIP**
>
> Redpanda Data recommends using the `--values` option and creating separate YAML files for each configuration block that you need to override. The Redpanda documentation follows this best practice. This way, it’s clearer to understand what you’ve overridden from the `helm` command.
>
> You can pass more than one `--values` option in the same command. For example, if you wanted to override the TLS configuration and the storage configuration, you could put those overrides in separate files:
>
> ```bash
> helm upgrade --install redpanda redpanda/redpanda \
>     --namespace <namespace> --create-namespace \
>     --values custom-storage-class.yaml \
>     --values enable-tls.yaml
> ```
##### --values

The `--values` option enables you to keep your overrides in one or more YAML files. If you specify multiple files and then override the same values in two or more of them, the rightmost file takes precedence. For example, you might override the `storage.persistentVolume.storageClass` configuration in a file called `storage-class.yaml`:

`storage-class.yaml`

```yaml
storage:
  persistentVolume:
    storageClass: "my-storage-class"
```

The `helm` command to apply this configuration override looks something like the following:

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --values storage-class.yaml --reuse-values
```

The values in your YAML files override their counterparts in the Helm chart’s `values.yaml` file. Any values that are not overridden maintain their defaults.

Use the `--reuse-values` flag to apply your overrides on top of existing overrides that you’ve already made. Don’t include this flag if you’re upgrading to a new version of the Helm chart. If you’re upgrading to a new version of the Helm chart, this flag prevents any values in the new release from being applied.

##### --set

The `--set` option allows you to specify configuration overrides in the command line. For example, you might override the `storage.persistentVolume.storageClass` configuration like so:

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --set storage.persistentVolume.storageClass=my-storage-class
```

For more details, see the [Helm documentation](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing).

The values in the `--set` options override their counterparts in the Helm chart’s `values.yaml` file. Any values that are not overridden maintain their defaults.

> 📝 **NOTE**
>
> If you’re upgrading and you already have Redpanda Console installed, set `console.enabled` to `false` to stop Helm from trying to deploy it again.

### [](#set-redpanda-cli-flags)Set Redpanda CLI flags

You can specify Redpanda CLI flags, such as `--smp`, `--memory`, or `--reserve-memory`, directly rather than having to find the appropriate stanza in the YAML values.

When you specify CLI flags, those values take precedence over the values defined in the YAML values.

#### Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  chartRef: {}
  clusterSpec:
    statefulset:
      additionalRedpandaCmdFlags:
        - <flag>
```

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

#### Helm

##### --values

`redpanda-flags.yaml`

```yaml
statefulset:
  additionalRedpandaCmdFlags:
    - <flag>
```

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --values redpanda-flags.yaml --reuse-values
```

##### --set

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --set "statefulset.additionalRedpandaCmdFlags=[<flags>]"
```

### [](#set-redpanda-cluster-properties)Set Redpanda cluster properties

Cluster properties control the core behavior of your Redpanda cluster, such as topic auto-creation, log retention, and feature flags. You can set any cluster property using the `config.cluster` field in your Helm values or Redpanda custom resource.

For a full list of available properties and their defaults, see [cluster configuration properties](https://docs.redpanda.com/streaming/current/reference/properties/cluster-properties/).

Example: Enable automatic topic creation

```yaml
config:
  cluster:
    auto_create_topics_enabled: true
```

You can set multiple properties under `config.cluster` as needed. This method works for all cluster properties, including those for advanced features like Tiered Storage.

To set cluster properties using the Operator or Helm, add the `config.cluster` block to your YAML file or use the `--set` flag. See the examples below for both approaches.

### [](#extra-cluster-config)Use Kubernetes Secrets or ConfigMaps

Starting in v25.1.1 of the Redpanda Operator and Redpanda Helm chart, you can set **any Redpanda cluster configuration property** by referencing Kubernetes Secrets or ConfigMaps using the `config.extraClusterConfiguration` field.

This feature provides a more secure, maintainable, and declarative way to manage sensitive or shared configuration values across your Redpanda deployment.

Use this method to:

-   Securely inject sensitive values, such as credentials for Iceberg, TLS, or object storage.

-   Reuse the same value across multiple features, such as Tiered Storage, Iceberg, and disaster recovery, without duplication.

-   Centralize config management in Kubernetes-native resources to support GitOps and reduce drift.


For example, to set `iceberg_rest_catalog_client_secret` using a Secret called `iceberg-config`:

#### Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  clusterSpec:
    config:
      extraClusterConfiguration:
        iceberg_rest_catalog_client_secret:
          secretKeyRef:
            name: iceberg-config
            key: iceberg_rest_catalog_client_secret
```

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

#### Helm

##### --values

`redpanda-config.yaml`

```yaml
  config:
    extraClusterConfiguration:
      iceberg_rest_catalog_client_secret:
        secretKeyRef:
          name: iceberg-config
          key: iceberg_rest_catalog_client_secret
```

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --values redpanda-config.yaml --reuse-values
```

##### --set

```bash
helm upgrade --install redpanda redpanda/redpanda \
  --namespace <namespace> \
  --create-namespace \
  --set config.extraClusterConfiguration.iceberg_rest_catalog_client_secret.secretKeyRef.name=iceberg-config \
  --set config.extraClusterConfiguration.iceberg_rest_catalog_client_secret.secretKeyRef.key=iceberg_rest_catalog_client_secret
```

This method supports both `secretKeyRef` and `configMapKeyRef`:

-   Use `secretKeyRef` for sensitive data like access keys or credentials.

-   Use `configMapKeyRef` for shared, non-sensitive values such as URIs or feature flags.


You can apply this approach to any Redpanda configuration key, making your deployments more secure, modular, and easier to manage at scale.

For full configuration options, see [Properties](https://docs.redpanda.com/streaming/current/reference/properties/).

### [](#export-a-redpanda-configuration-file)Export a Redpanda configuration file

To see all Redpanda configurations for a broker, you can use the `rpk cluster config export` command to save the current Redpanda configuration to a file. For example, you may want to use the configuration file during debugging.

> 💡 **TIP**
>
> To get more detailed information about your Redpanda deployment, generate a [diagnostics bundle](https://docs.redpanda.com/streaming/current/troubleshoot/debug-bundle/generate/kubernetes/), which includes the Redpanda configuration files for all brokers in the cluster.

1.  Execute the `rpk cluster config export` command inside a Pod container that’s running a Redpanda broker.

    ```bash
    kubectl exec redpanda-0 --namespace <namespace> -c redpanda -- \
    rpk cluster config export --filename <filename>.yaml
    ```

    To save the configuration file outside of your current working directory, provide an absolute path to the `--filename` flag. Otherwise, the file is saved in your current working directory.

    Example output

    ```none
    Wrote configuration to file "/tmp/config_625125906.yaml".
    ```

2.  On your host machine, make a directory in which to save the configuration file:

    ```bash
    mkdir configs
    ```

3.  Copy the configuration file from the Pod to your host machine:

    Replace `<path-to-file>` with the path to your exported file.

    ```bash
    kubectl cp redpanda/redpanda-0:<path-to-file> configs/redpanda-0-configuration-file.yaml
    ```

4.  Remove the exported file from the Redpanda container:

    ```bash
    kubectl exec redpanda-0 -c redpanda --namespace <namespace> -- rm <path-to-file>
    ```


When you’ve finished with the file, remove it from your host machine:

```bash
rm -r configs
```

### [](#reset-config)Reset configuration values

You may want to reset a configuration value back to its default. The method to do this depends on how you’re managing your Redpanda deployment.

#### Operator

If you’re using the Redpanda Operator and want to reset a configuration property back to its default:

1.  Add the following annotation to your Redpanda custom resource to enable declarative configuration sync:

    ```yaml
    metadata:
      annotations:
        operator.redpanda.com/config-sync-mode: Declarative
    ```

2.  Remove the configuration key you want to reset from `spec.clusterSpec.config`.


With this annotation, the Redpanda Operator ensures that removed keys are also removed from the Redpanda cluster configuration.

If this annotation is not set, the Redpanda Operator retains previously applied values even if you remove them from the custom resource.

#### CLI

To reset a configuration property using the Redpanda CLI:

-   Run the [`rpk cluster config set`](https://docs.redpanda.com/streaming/current/reference/rpk/rpk-cluster/rpk-cluster-config-set/) command with an empty string:


```bash
rpk cluster config set <property> ""
```

-   Or, use the [`rpk cluster config edit`](https://docs.redpanda.com/streaming/current/reference/rpk/rpk-cluster/rpk-cluster-config-edit/) command and delete the line for the property.


If you’re using a file, such as a `values.yaml` or a Redpanda resource, to manage your configuration, make sure to also remove the property from that file. Otherwise, it may be reapplied the next time you run `helm upgrade` or the Pods restart.

## [](#configure-redpanda-console)Configure Redpanda Console

Redpanda Console is included as a subchart of the Redpanda Helm chart.

You can configure Redpanda Console in the `console.config` object using the [Redpanda Console configuration values](https://docs.redpanda.com/streaming/current/console/config/configure-console/).

For example, to enable the admin API for Redpanda Console:

### Operator

`redpanda-cluster.yaml`

```yaml
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
  name: redpanda
spec:
  chartRef: {}
  clusterSpec:
    console:
      enabled: true
      console:
        config:
          redpanda:
            adminApi:
              enabled: true
              urls:
              - http://redpanda-0.redpanda.<namespace>.svc.cluster.local.:9644
```

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

### Helm

#### --values

`console-enable-admin-api.yaml`

```yaml
console:
  enabled: true
  console:
    config:
      redpanda:
        adminApi:
          enabled: true
          urls:
          - http://redpanda-0.redpanda.<namespace>.svc.cluster.local.:9644
```

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --values console-enable-admin-api.yaml --reuse-values
```

#### --set

```bash
helm upgrade --install redpanda redpanda/redpanda \
    --namespace <namespace> --create-namespace \
    --set console.console.config.redpanda.adminApi.enabled=true \
    --set console.console.config.redpanda.adminApi.urls={"http://redpanda-0.redpanda.<namespace>.svc.cluster.local.:9644"}
```

If you want to use the separate Redpanda Console Helm chart, disable Redpanda Console in the Redpanda Helm chart with `console.enabled=false`. To see what options you can override in the Redpanda Console chart, use the `helm show values` command:

```bash
helm repo add redpanda https://charts.redpanda.com
helm repo update
helm show values redpanda/console
```

For default values and documentation for configuration options, see the [`values.yaml`](https://artifacthub.io/packages/helm/redpanda-data/console?modal=values) file.

## [](#differences-between-helm-install-and-helm-upgrade)Differences between helm install and helm upgrade

When managing Redpanda deployments with Helm, it’s important to understand the differences between `helm install` and `helm upgrade`, particularly in how they handle cluster configuration overrides.

Use `helm install` to install or reinstall Redpanda. Use `helm upgrade` to reconfigure an existing deployment.

### [](#reinstall-redpanda)Reinstall Redpanda

When reinstalling Redpanda with `helm install`, cluster configuration overrides specified in the Helm values may not take effect due to PersistentVolumeClaim (PVC) retention.

By default, most PVCs are retained when a Helm release is uninstalled. As a result, when Redpanda is reinstalled, the previously created PVCs are adopted, restoring the state of the previous cluster. This adoption results in the new `bootstrap.yaml` file being ignored and the `post_upgrade` job not running. The `post_upgrade` job is a component in the Helm chart that applies configuration overrides during an upgrade.

To ensure the new installation does not adopt the old PVCs and restore the previous state:

1.  Delete the existing PVCs before reinstalling Redpanda:

    ```bash
    kubectl delete pvc -l app=redpanda --namespace <namespace>
    ```

2.  Execute the `helm install` command to reinstall Redpanda with a clean state.


### [](#configure-an-existing-cluster)Configure an existing cluster

During a `helm upgrade`, the `post_upgrade` job is triggered, which applies the latest overrides to the cluster.

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

-   [Customizing the Chart Before Installing](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing).


## Suggested labs

-   [Redpanda Iceberg Docker Compose Example](https://docs.redpanda.com/labs/docker-compose/iceberg/)
-   [Enable Unified Identity with Azure Entra ID for Redpanda and Redpanda Console](https://docs.redpanda.com/labs/docker-compose/oidc/)
-   [Owl Shop Example Application in Docker](https://docs.redpanda.com/labs/docker-compose/owl-shop/)
-   [Migrate Data with Redpanda Migrator](https://docs.redpanda.com/labs/docker-compose/redpanda-migrator/)
-   [Start a Single Redpanda Broker with Redpanda Console in Docker](https://docs.redpanda.com/labs/docker-compose/single-broker/)
-   [Start a Cluster of Redpanda Brokers with Redpanda Console in Docker](https://docs.redpanda.com/labs/docker-compose/three-brokers/)
-   [Iceberg Streaming on Kubernetes with Redpanda, MinIO, and Spark](https://docs.redpanda.com/labs/kubernetes/iceberg/)

See more

[Search all labs](https://docs.redpanda.com/labs)