This is an automated email from the ASF dual-hosted git repository.
HoustonPutman pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-operator.git
The following commit(s) were added to refs/heads/main by this push:
new e4b20c1 doc(volumes): add docs for attaching additional volumes (#739)
e4b20c1 is described below
commit e4b20c156c5ee170331f4c560d4afb6440d87d1a
Author: Michael <[email protected]>
AuthorDate: Fri Jun 26 15:40:44 2026 -0400
doc(volumes): add docs for attaching additional volumes (#739)
Co-authored-by: Houston Putman <[email protected]>
---
docs/modules/solr-cloud/nav.adoc | 1 +
.../solr-cloud/pages/custom-kube-options.adoc | 69 ++++++++++++++++++++++
docs/modules/solr-cloud/pages/solr-cloud-crd.adoc | 1 +
example/test_solrcloud_additional_volume.yaml | 67 +++++++++++++++++++++
4 files changed, 138 insertions(+)
diff --git a/docs/modules/solr-cloud/nav.adoc b/docs/modules/solr-cloud/nav.adoc
index 44ca7bf..c16f8a1 100644
--- a/docs/modules/solr-cloud/nav.adoc
+++ b/docs/modules/solr-cloud/nav.adoc
@@ -23,6 +23,7 @@
** xref:custom-solr-config.adoc[Custom Solr Configuration]
** xref:tls.adoc[]
** xref:authentication-and-authorization.adoc[]
+** xref:custom-kube-options.adoc[]
* xref:cluster-operations.adoc[]
* xref:managed-updates.adoc[]
* xref:scaling.adoc[]
diff --git a/docs/modules/solr-cloud/pages/custom-kube-options.adoc
b/docs/modules/solr-cloud/pages/custom-kube-options.adoc
new file mode 100644
index 0000000..97dc6d9
--- /dev/null
+++ b/docs/modules/solr-cloud/pages/custom-kube-options.adoc
@@ -0,0 +1,69 @@
+= Customizing Resources
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+The Solr Operator creates a number of Kubernetes resources to run a SolrCloud
(StatefulSet, Services, ConfigMap, etc.).
+Most aspects of these resources can be customized through
`SolrCloud.spec.customSolrKubeOptions`, which exposes per-resource option
objects such as `podOptions`, `statefulSetOptions`, `commonServiceOptions`, and
others.
+This allows you to add labels, annotations, environment variables, affinity
rules, resource requests, extra containers, and more, without the operator
needing explicit support for every option.
+
+== Mounting Additional Volumes
+
+Arbitrary additional volumes can be mounted into the Solr pods (and their
init/sidecar containers) via
`SolrCloud.spec.customSolrKubeOptions.podOptions.volumes`.
+This is separate from the xref:solr-cloud-crd.adoc#data-storage[data storage]
used for Solr's index data.
+Some example scenarios where this is useful:
+
+* Custom Solr plugins that rely on certain data being present on disk.
+* Bootstrapping additional configuration for Solr via a `ConfigMap`.
+* A dedicated volume to support backups.
+
+Each entry under `volumes` has the following fields:
+
+* **`name`** - The name of the volume, used to reference it from container
`volumeMounts`.
+* **`source`** - A standard Kubernetes
https://kubernetes.io/docs/concepts/storage/volumes/#volume-types[volume
source] (e.g. `configMap`, `persistentVolumeClaim`, `secret`, `emptyDir`).
+The required fields depend on the source type chosen (for example, a
`configMap` source requires `name`, while a `persistentVolumeClaim` source
requires `claimName`).
+* **`defaultContainerMount`** - An optional
https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath[`volumeMount`]
describing where the volume should be mounted in the main Solr container.
+Init containers and sidecar containers can mount the same volume by
referencing it by `name` in their own `volumeMounts`.
+
+The following example mounts a `ConfigMap` into the Solr container and a
sidecar container:
+
+[source,yaml]
+----
+spec:
+ customSolrKubeOptions:
+ podOptions:
+ volumes:
+ - source:
+ configMap:
+ name: configset
+ defaultMode: 0777
+ name: configset
+ defaultContainerMount:
+ mountPath: /configset
+ name: configset
+ sidecarContainers:
+ - name: config-loader
+ image: alpine/curl:latest
+ command:
+ - "sh"
+ - "-c"
+ - "ls -la /configset"
+ volumeMounts:
+ - name: configset
+ mountPath: /configset
+----
+
+A complete, runnable example (including the backing `ConfigMap`) is available
in
https://github.com/apache/solr-operator/blob/main/example/test_solrcloud_additional_volume.yaml[`example/test_solrcloud_additional_volume.yaml`].
diff --git a/docs/modules/solr-cloud/pages/solr-cloud-crd.adoc
b/docs/modules/solr-cloud/pages/solr-cloud-crd.adoc
index a72ec09..07b37b3 100644
--- a/docs/modules/solr-cloud/pages/solr-cloud-crd.adoc
+++ b/docs/modules/solr-cloud/pages/solr-cloud-crd.adoc
@@ -25,6 +25,7 @@ The following topics are covered on their own pages:
* xref:custom-solr-config.adoc[Overriding built-in Solr configuration files]
* xref:tls.adoc[Enabling TLS between Solr pods]
* xref:authentication-and-authorization.adoc[Authentication and Authorization]
+* xref:custom-kube-options.adoc[Customizing Kubernetes resources]
== Solr Options
diff --git a/example/test_solrcloud_additional_volume.yaml
b/example/test_solrcloud_additional_volume.yaml
new file mode 100644
index 0000000..0e7ddc2
--- /dev/null
+++ b/example/test_solrcloud_additional_volume.yaml
@@ -0,0 +1,67 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Mounting Additional Volumes
+#
+# It is also possible to mount additional volumes to the SolrCloud (or its
initContainers). Some example scenarios where you might use this would be:
+# - Custom solr plugins that rely on certain data to be present on disk
+# - Bootstrapping additional configuration for Solr via a ConfigMap
+#
+# Below is an example of the last scenario:
+
+apiVersion: solr.apache.org/v1beta1
+kind: SolrCloud
+metadata:
+ name: test
+ namespace: test
+spec:
+ replicas: 1
+ customSolrKubeOptions:
+ podOptions:
+ volumes:
+ - source:
+ configMap:
+ name: configset
+ defaultMode: 0777
+ name: configset
+ defaultContainerMount:
+ mountPath: /configset
+ name: configset
+ sidecarContainers:
+ - name: config-loader
+ image: alpine/curl:latest
+ command:
+ - "sh"
+ - "-c"
+ - "ls -la /configset"
+ volumeMounts:
+ - name: configset
+ mountPath: /configset
+
+# Note the `source` spec may change based on the implementation. In this case,
the `configMap` spec requires field `name`.
+# See volume spec in CRD:
https://github.com/apache/solr-operator/blob/main/config/crd/bases/solr.apache.org_solrclouds.yaml#L6800
+
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: configset
+ namespace: test
+data:
+ config.xml: |
+ <?xml version="1.0" encoding="UTF-8" ?>
+ <config>
+ ...
+ </config>
\ No newline at end of file