Skip to content

Commit 30c90dc

Browse files
JakeSCahillchrissetomicheleRP
authored andcommitted
Add docs for extraClusterConfig (#1187)
Co-authored-by: Chris Seto <[email protected]> Co-authored-by: Michele Cyran <[email protected]>
1 parent a34310a commit 30c90dc

File tree

7 files changed

+208
-13
lines changed

7 files changed

+208
-13
lines changed

modules/get-started/pages/release-notes/helm-charts.adoc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,20 @@ The connectors subchart has been removed from the Helm chart because it is not o
4444

4545
TIP: For a supported and scalable Kafka Connect alternative, consider using Redpanda Connect. For more information, see xref:redpanda-connect:get-started:index.adoc[].
4646

47+
=== Reference Kubernetes Secrets and ConfigMaps for Redpanda cluster configuration
48+
49+
You can now set any Redpanda cluster configuration property using the new `extraClusterConfig` field. This allows you to reference values from Kubernetes Secrets or ConfigMaps. For example, use this field to inject sensitive credentials or reuse shared configurations across features like Tiered Storage, Iceberg, and disaster recovery.
50+
51+
This enhancement improves:
52+
53+
- Security: Avoid hardcoding secrets in Helm values or manifests.
54+
55+
- Reusability: Centralize common values used by multiple features.
56+
57+
- Maintainability: Better integrate with GitOps workflows and Kubernetes-native resource management.
58+
59+
See xref:manage:kubernetes/k-configure-helm-chart.adoc#extra-cluster-config[Set Redpanda cluster properties from Kubernetes Secrets or ConfigMaps].
60+
4761
== Redpanda chart v5.10.x
4862

4963
=== Ability to change StatefulSet replicas without restarting brokers

modules/get-started/pages/release-notes/operator.adoc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,20 @@ The connectors subchart has been removed from the Helm chart because it is not o
7272

7373
TIP: For a supported and scalable Kafka Connect alternative, consider using Redpanda Connect. For more information, see xref:redpanda-connect:get-started:index.adoc[].
7474

75+
=== Reference Kubernetes Secrets and ConfigMaps for Redpanda cluster configuration
76+
77+
You can now set any Redpanda cluster configuration property using the new `extraClusterConfig` field. This allows you to reference values from Kubernetes Secrets or ConfigMaps. For example, use this field to inject sensitive credentials or reuse shared configurations across features like Tiered Storage, Iceberg, and disaster recovery.
78+
79+
This enhancement improves:
80+
81+
- Security: Avoid hardcoding secrets in Helm values or manifests.
82+
83+
- Reusability: Centralize common values used by multiple features.
84+
85+
- Maintainability: Better integrate with GitOps workflows and Kubernetes-native resource management.
86+
87+
See xref:manage:kubernetes/k-configure-helm-chart.adoc#extra-cluster-config[Set Redpanda cluster properties from Kubernetes Secrets or ConfigMaps].
88+
7589
== Redpanda Operator v2.4.x
7690

7791
link:https://github.com/redpanda-data/redpanda-operator/blob/release/v2.4.x/operator/CHANGELOG.md[Changelog^].

modules/manage/pages/kubernetes/k-configure-helm-chart.adoc

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,147 @@ helm upgrade --install redpanda redpanda/redpanda \
210210
--
211211
======
212212

213+
[[extra-cluster-config]]
214+
== Set Redpanda cluster properties from Kubernetes Secrets or ConfigMaps
215+
216+
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.extraClusterConfig` field.
217+
218+
This feature provides a more secure, maintainable, and declarative way to manage sensitive or shared configuration values across your Redpanda deployment.
219+
220+
Use this method to:
221+
222+
- Securely inject sensitive values, such as credentials for Iceberg, TLS, or object storage.
223+
- Reuse the same value across multiple features, such as Tiered Storage, Iceberg, and disaster recovery, without duplication.
224+
- Centralize config management in Kubernetes-native resources to support GitOps and reduce drift.
225+
226+
For example, to set `iceberg_rest_catalog_client_secret` using a Secret called `iceberg-config`:
227+
228+
[tabs]
229+
======
230+
Operator::
231+
+
232+
--
233+
.`redpanda-cluster.yaml`
234+
[,yaml]
235+
----
236+
apiVersion: cluster.redpanda.com/v1alpha2
237+
kind: Redpanda
238+
metadata:
239+
name: redpanda
240+
spec:
241+
clusterSpec:
242+
config:
243+
extraClusterConfig:
244+
iceberg_rest_catalog_client_secret:
245+
secretRef:
246+
name: iceberg-config
247+
key: iceberg_rest_catalog_client_secret
248+
----
249+
250+
```bash
251+
kubectl apply -f redpanda-cluster.yaml --namespace <namespace>
252+
```
253+
254+
--
255+
Helm::
256+
+
257+
--
258+
[tabs]
259+
====
260+
--values::
261+
+
262+
.`redpanda-config.yaml`
263+
[,yaml]
264+
----
265+
config:
266+
extraClusterConfig:
267+
iceberg_rest_catalog_client_secret:
268+
secretRef:
269+
name: iceberg-config
270+
key: iceberg_rest_catalog_client_secret
271+
----
272+
+
273+
```bash
274+
helm upgrade --install redpanda redpanda/redpanda \
275+
--namespace <namespace> --create-namespace \
276+
--values redpanda-configs.yaml --reuse-values
277+
```
278+
279+
--set::
280+
+
281+
[,bash,role="no-wrap"]
282+
----
283+
helm upgrade --install redpanda redpanda/redpanda \
284+
--namespace <namespace> \
285+
--create-namespace \
286+
--set config.extraClusterConfig.iceberg_rest_catalog_client_secret.secretRef.name=iceberg-config \
287+
--set config.extraClusterConfig.iceberg_rest_catalog_client_secret.secretRef.key=iceberg_rest_catalog_client_secret
288+
----
289+
290+
====
291+
--
292+
======
293+
294+
This method supports both `secretRef` and `configMapRef`:
295+
296+
- Use `secretRef` for sensitive data like access keys or credentials.
297+
298+
- Use `configMapRef` for shared, non-sensitive values such as URIs or feature flags.
299+
300+
You can apply this approach to any Redpanda configuration key, making your deployments more secure, modular, and easier to manage at scale.
301+
302+
For full configuration options, see xref:reference:properties/index.adoc[].
303+
304+
[[reset-config]]
305+
== Reset configuration values
306+
307+
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.
308+
309+
[tabs]
310+
======
311+
Operator::
312+
+
313+
--
314+
315+
If you're using the Redpanda Operator and want to reset a configuration property back to its default:
316+
317+
. Add the following annotation to your Redpanda custom resource to enable declarative configuration sync:
318+
+
319+
[source,yaml]
320+
----
321+
metadata:
322+
annotations:
323+
operator.redpanda.com/config-sync-mode: Declarative
324+
----
325+
326+
. Remove the configuration key you want to reset from `spec.clusterSpec.config`.
327+
328+
With this annotation, the Redpanda Operator ensures that removed keys are also removed from the Redpanda cluster configuration.
329+
330+
331+
If this annotation is not set, the Redpanda Operator retains previously applied values even if you remove them from the custom resource.
332+
333+
--
334+
CLI::
335+
+
336+
--
337+
338+
To reset a configuration property using the Redpanda CLI:
339+
340+
- Run the xref:reference:rpk/rpk-cluster/rpk-cluster-config-set.adoc[`rpk cluster config set`] command with an empty string:
341+
342+
[source,bash]
343+
----
344+
rpk cluster config set <property> ""
345+
----
346+
347+
- Or, use the xref:reference:rpk/rpk-cluster/rpk-cluster-config-edit.adoc[`rpk cluster config edit`] command and delete the line for the property.
348+
349+
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.
350+
351+
--
352+
======
353+
213354
== Configure Redpanda Console
214355

215356
Redpanda Console is included as a subchart of the Redpanda Helm chart.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[TIP]
2+
====
3+
Starting in Redpanda Operator v25.1.1, you can configure object storage settings using `extraClusterConfig`. This lets you securely reference sensitive values from Kubernetes Secrets or ConfigMaps, and reuse values like your bucket name across multiple features, such as Tiered Storage, Iceberg, and topic recovery.
4+
5+
See xref:manage:kubernetes/k-configure-helm-chart.adoc#extra-cluster-config[Set Redpanda cluster properties from Kubernetes Secrets or ConfigMaps].
6+
====
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CAUTION: Do not set an object storage property to an empty string (`""`) or `null` to reset it. This may result in invalid or incomplete configuration. For safe ways to reset a property, see xref:manage:kubernetes/k-configure-helm-chart.adoc#reset-config[Reset configuration values].
2+

modules/manage/partials/tiered-storage.adoc

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ rpk cluster license info
3333
- Migrating topics from one bucket or container to another is not supported.
3434
- Multi-region buckets or containers are not supported.
3535

36-
CAUTION: Redpanda strongly recommends that you do not re-enable Tiered Storage after previously enabling and disabling it. Re-enabling Tiered Storage can result in inconsistent data and data gaps in Tiered Storage for a topic.
36+
CAUTION: Redpanda Data recommends that you do not re-enable Tiered Storage after previously enabling and disabling it. Re-enabling Tiered Storage can result in inconsistent data and data gaps in Tiered Storage for a topic.
3737

3838
== Set up Tiered Storage
3939

@@ -50,14 +50,18 @@ Redpanda natively supports Tiered Storage with Amazon Simple Storage Service (S3
5050
ifdef::env-kubernetes[]
5151
==== Amazon S3
5252

53-
TIP: If deploying Redpanda on an AWS Auto-Scaling group (ASG), keep in mind that the ASG controller terminates nodes and spins up replacements if the nodes saturate and are unable to heartbeat the controller (based on the EC2 health check). For more information, see the https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html#types-of-instance-status-checks[AWS documentation^]. Redpanda recommends deploying on Linux or Kubernetes. For more information, see xref:deploy:deployment-option/self-hosted/index.adoc[Deploy Redpanda].
53+
[NOTE]
54+
====
55+
If you deploy Redpanda directly on AWS EC2 instances managed by an Auto-Scaling Group (ASG), be aware that ASG may terminate and replace instances based on system-level health checks. This can result in unexpected Redpanda broker terminations, risking availability or data loss.
5456
55-
You can configure access to Amazon S3 with either an IAM role attached to the instance or with access keys.
57+
Redpanda Data recommends deploying on Kubernetes or using other orchestrators that understand Redpanda's stateful nature and can handle Pod lifecycle and storage gracefully.
5658
57-
[TIP]
59+
See xref:deploy:deployment-option/self-hosted/index.adoc[Deploy Redpanda] for deployment best practices.
5860
====
61+
62+
You can configure access to Amazon S3 with either an IAM role attached to the instance or with access keys.
63+
5964
If you need to manage and store encryption keys separately from your cloud provider, you can <<configure-access-with-an-aws-kms-key,configure access to an AWS S3 bucket that Redpanda Tiered Storage uses to leverage your AWS KMS key (SSE-KMS)>> instead of the default AWS S3-managed key (SSE-S3). This option enables you to segregate data from different teams or departments and remove that data at will by removing the encryption keys.
60-
====
6165

6266
===== **Configure access with an IAM role**
6367

@@ -135,11 +139,13 @@ Replace the following placeholders:
135139
- `<region>`: The region of your S3 bucket.
136140
- `<redpanda-bucket-name>`: The name of your S3 bucket.
137141
+
138-
CAUTION: Do not set an object storage property to an empty string `""` or to `null` as a way to reset it to its default value.
142+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]
143+
144+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
139145

140146
===== **Configure access with access keys**
141147

142-
. Grant an IAM user the following permissions to read and create objects in your buckets:
148+
. In AWS, grant an IAM user the following permissions to read and create objects in your buckets:
143149
- `GetObject`
144150
- `DeleteObject`
145151
- `PutObject`
@@ -253,7 +259,9 @@ Replace the following placeholders:
253259
- `<region>`: The region of your S3 bucket.
254260
- `<redpanda-bucket-name>`: The name of your S3 bucket.
255261
+
256-
CAUTION: Do not set an object storage property to an empty string `""` or to `null` as a way to reset it to its default value.
262+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]
263+
264+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
257265

258266
include::manage:partial$tiered-storage/aws-kms-key.adoc[leveloffset=+4]
259267

@@ -337,8 +345,10 @@ Replace the following placeholders:
337345
+
338346
- `<region>`: The region of your bucket.
339347
- `<redpanda-bucket-name>`: The name of your bucket.
348+
+
349+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]
340350

341-
CAUTION: Do not set an object storage property to an empty string `""` or to `null` as a way to reset it to its default value.
351+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
342352

343353
===== **Configure access with access keys**
344354

@@ -457,7 +467,9 @@ Replace the following placeholders:
457467
- `<region>`: The region of your bucket.
458468
- `<redpanda-bucket-name>`: The name of your bucket.
459469
+
460-
CAUTION: Do not set an object storage property to an empty string `""` or to `null` as a way to reset it to its default value.
470+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]
471+
472+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
461473

462474
include::manage:partial$tiered-storage/gcp-kms-key.adoc[leveloffset=+4]
463475

@@ -562,10 +574,12 @@ Replace the following placeholders:
562574
- `<container-name>`: The name of the Azure container in your Azure account.
563575
- `<managed-identity-client-id>`: The client ID for your Azure managed identity.
564576
--
577+
+
578+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]
565579

566-
NOTE: The `serviceAccount` annotations and the `statefulset` Pod labels are essential for the Azure webhook to inject the necessary Azure-specific environment variables and the projected service account token volume into the pods. For more information, visit https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview?tabs=dotnet[Microsoft Entra Workload ID with Azure Kubernetes Service (AKS)^].
580+
The `serviceAccount` annotations and the `statefulset` Pod labels are essential for the Azure webhook to inject the necessary Azure-specific environment variables and the projected service account token volume into the pods. For more information, visit https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview?tabs=dotnet[Microsoft Entra Workload ID with Azure Kubernetes Service (AKS)^].
567581

568-
CAUTION: Do not set an object storage property to an empty string `""` or to `null` as a way to reset it to its default value.
582+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
569583

570584
===== **Configure access with account access keys**
571585

@@ -666,7 +680,9 @@ Replace the following placeholders:
666680
- `<account-name>`: The name of your Azure account.
667681
- `<container-name>`: The name of the Azure container in your Azure account.
668682
+
669-
CAUTION: Do not set an object storage property to an empty string `""` or to `null` as a way to reset it to its default value.
683+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]
684+
685+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
670686

671687
- For information about how to grant access from an internet IP range (if you need to open additional routes/ports between your broker nodes and Azure Blob Storage; for example, in a hybrid cloud deployment), see the https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json&tabs=azure-portal#grant-access-from-an-internet-ip-range[Microsoft documentation^].
672688

modules/manage/partials/whole-cluster-restore.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ helm upgrade --install redpanda redpanda/redpanda --namespace <namespace> --crea
152152

153153
- `storage.tiered`: Make sure to configure the target cluster with the same Tiered Storage settings as the failed source cluster.
154154
- `config.cluster.cloud_storage_attempt_cluster_restore_on_bootstrap`: Automate cluster restore in Kubernetes. Setting to `true` is recommended when using an automated method for deployment. When bootstrapping a cluster with a given bucket, make sure that any previous cluster using the bucket is fully destroyed, otherwise Tiered Storage subsystems may interfere with each other.
155+
156+
include::manage:partial$kubernetes/extraclusterconfig.adoc[]
155157
endif::[]
156158

157159
ifndef::env-kubernetes[]

0 commit comments

Comments
 (0)