From 966853030344d8dd7f0c6f52ab0272ae317754f1 Mon Sep 17 00:00:00 2001 From: Jason Gerlowski Date: Tue, 4 Nov 2025 14:57:03 -0500 Subject: [PATCH 1/3] Bump 'default' Solr version to 9.9.0 This leaves a few vistigial bits of operator code that exist in support of 8.11. And this commit doesn't update our documentation to indicate that 8.11 is no longer supported. Those can be handled in a subsequent commit or PR. But otherwise this commit does everything necessary to make 9.9.0 the "default" and the version assumed by our docs. Resolves #806 --- api/v1beta1/solrcloud_types.go | 2 +- dev-docs/e2e-testing.md | 2 +- docs/local_tutorial.md | 8 +- example/test_solrcloud.yaml | 2 +- example/test_solrcloud_backuprepos.yaml | 2 +- example/test_solrcloud_private_repo.yaml | 2 +- .../test_solrcloud_toleration_example.yaml | 2 +- example/test_solrprometheusexporter.yaml | 2 +- hack/release/smoke_test/test_cluster.sh | 4 +- helm/solr-operator/Chart.yaml | 4 +- helm/solr/Chart.yaml | 4 +- helm/solr/README.md | 74 +++++++++---------- tests/e2e/suite_test.go | 2 +- tests/scripts/manage_e2e_tests.sh | 2 +- 14 files changed, 56 insertions(+), 56 deletions(-) diff --git a/api/v1beta1/solrcloud_types.go b/api/v1beta1/solrcloud_types.go index 0a689a20..c37250cd 100644 --- a/api/v1beta1/solrcloud_types.go +++ b/api/v1beta1/solrcloud_types.go @@ -37,7 +37,7 @@ const ( DefaultSolrReplicas = int32(3) DefaultSolrRepo = "library/solr" - DefaultSolrVersion = "8.11" + DefaultSolrVersion = "9.9.0" DefaultSolrJavaMem = "-Xms1g -Xmx2g" DefaultSolrOpts = "" DefaultSolrLogLevel = "INFO" diff --git a/dev-docs/e2e-testing.md b/dev-docs/e2e-testing.md index 42a31dfc..23c46b99 100644 --- a/dev-docs/e2e-testing.md +++ b/dev-docs/e2e-testing.md @@ -47,7 +47,7 @@ $ make e2e-tests TEST_SEED=89724023 SOLR_IMAGE=apache/solr-nightly:10.0.0-SNAPSH The default parallelism is `3`. - **SOLR_IMAGE** - The solr docker image label to use in the integration tests. It is recommended to use only supported versions for the Solr Operator version being tested. - Default is `solr:8.11`. + Default is `solr:9.9.0`. - **KUBERETES_VERSION** - A full Kubernetes version, starting with `v`, to use when creating the KinD Cluster. To find a list of all possible versions, check the [KinD Node Docker tags](https://hub.docker.com/r/kindest/node/tags). Default is `v1.26.6`. diff --git a/docs/local_tutorial.md b/docs/local_tutorial.md index 9bb80853..14bd430f 100644 --- a/docs/local_tutorial.md +++ b/docs/local_tutorial.md @@ -122,9 +122,9 @@ After inspecting the status of you Kube cluster, you should see a deployment for To start a Solr Cloud cluster, we will create a yaml that will tell the Solr Operator what version of Solr Cloud to run, and how many nodes, with how much memory etc. ```bash -# Create a 3-node cluster v8.11 with 300m Heap each: +# Create a 3-node cluster v9.9.0 with 300m Heap each: helm install example-solr apache-solr/solr --version 0.10.0-prerelease \ - --set image.tag=8.11 \ + --set image.tag=9.9.0 \ --set solrOptions.javaMemory="-Xms300m -Xmx300m" \ --set addressability.external.method=Ingress \ --set addressability.external.domainName="ing.local.domain" \ @@ -207,13 +207,13 @@ By default, the helm chart does not set the `replicas` field, so it is safe to u So we wish to upgrade to a newer Solr version: ```bash -# Take note of the current version, which is 8.11.2 +# Take note of the current version curl -s http://default-example-solrcloud.ing.local.domain/solr/admin/info/system | grep solr-i # Update the solrCloud configuration with the new version, keeping all previous settings and the number of nodes set by the autoscaler. helm upgrade example-solr apache-solr/solr --version 0.10.0-prerelease \ --reuse-values \ - --set image.tag=8.7 + --set image.tag=9.9.0 # Click the 'Show all details" button in Admin UI and start hitting the "Refresh" button # See how the operator upgrades one pod at a time. Solr version is in the 'node' column diff --git a/example/test_solrcloud.yaml b/example/test_solrcloud.yaml index 04c7499d..1875f442 100644 --- a/example/test_solrcloud.yaml +++ b/example/test_solrcloud.yaml @@ -28,7 +28,7 @@ spec: storage: "5Gi" replicas: 3 solrImage: - tag: "8.11" + tag: "9.9.0" solrJavaMem: "-Xms1g -Xmx3g" solrModules: - jaegertracer-configurator diff --git a/example/test_solrcloud_backuprepos.yaml b/example/test_solrcloud_backuprepos.yaml index 8cb2004e..1c8aba65 100644 --- a/example/test_solrcloud_backuprepos.yaml +++ b/example/test_solrcloud_backuprepos.yaml @@ -20,7 +20,7 @@ metadata: spec: replicas: 1 solrImage: - tag: "8.11" + tag: "9.0.0" backupRepositories: # "Volume" repositories store backup data in a Kubernetes volume. - name: "volume_repository_1" diff --git a/example/test_solrcloud_private_repo.yaml b/example/test_solrcloud_private_repo.yaml index fd8d5f98..a0371a4d 100644 --- a/example/test_solrcloud_private_repo.yaml +++ b/example/test_solrcloud_private_repo.yaml @@ -21,5 +21,5 @@ spec: replicas: 3 solrImage: repository: myprivate-repo.jfrog.io/solr - tag: "8.11" + tag: "9.0.0" imagePullSecret: "k8s-docker-registry-secret" diff --git a/example/test_solrcloud_toleration_example.yaml b/example/test_solrcloud_toleration_example.yaml index 68b322fa..8940c473 100644 --- a/example/test_solrcloud_toleration_example.yaml +++ b/example/test_solrcloud_toleration_example.yaml @@ -20,7 +20,7 @@ metadata: spec: replicas: 1 solrImage: - tag: "8.11" + tag: "9.0.0" customSolrKubeOptions: podOptions: nodeSelector: diff --git a/example/test_solrprometheusexporter.yaml b/example/test_solrprometheusexporter.yaml index fa64926b..221eade2 100644 --- a/example/test_solrprometheusexporter.yaml +++ b/example/test_solrprometheusexporter.yaml @@ -23,4 +23,4 @@ spec: name: "example" numThreads: 4 image: - tag: "8.11" + tag: "9.9.0" diff --git a/hack/release/smoke_test/test_cluster.sh b/hack/release/smoke_test/test_cluster.sh index 27b3aa12..0a14a6cf 100755 --- a/hack/release/smoke_test/test_cluster.sh +++ b/hack/release/smoke_test/test_cluster.sh @@ -33,7 +33,7 @@ Test the release candidate in a Kind cluster -i Solr Operator docker image to use (Optional, defaults to apache/solr-operator:) -g GPG Key (fingerprint) used to sign the artifacts (Optional, if not provided then the helm chart will not be verified) -k Kubernetes Version to test with (full tag, e.g. v1.26.6) (Optional, defaults to a compatible version) - -t Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.0.0, 8.11). (Optional, defaults to a compatible version) + -t Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.0.0, 9.9.0). (Optional, defaults to a compatible version) EOF } @@ -77,7 +77,7 @@ if [[ -z "${KUBERNETES_VERSION:-}" ]]; then KUBERNETES_VERSION="v1.26.6" fi if [[ -z "${SOLR_IMAGE:-}" ]]; then - SOLR_IMAGE="${SOLR_VERSION:-8.11}" + SOLR_IMAGE="${SOLR_VERSION:-9.9.0}" fi if [[ "${SOLR_IMAGE}" != *":"* ]]; then SOLR_IMAGE="solr:${SOLR_IMAGE}" diff --git a/helm/solr-operator/Chart.yaml b/helm/solr-operator/Chart.yaml index ddbd8128..4a58745b 100644 --- a/helm/solr-operator/Chart.yaml +++ b/helm/solr-operator/Chart.yaml @@ -114,7 +114,7 @@ annotations: storage: "20Gi" replicas: 3 solrImage: - tag: 8.11 + tag: 9.9.0 solrJavaMem: "-Xms4g -Xmx4g" customSolrKubeOptions: podOptions: @@ -155,7 +155,7 @@ annotations: name: "example" numThreads: 4 image: - tag: 8.11 + tag: 9.9.0 - apiVersion: solr.apache.org/v1beta1 kind: SolrBackup metadata: diff --git a/helm/solr/Chart.yaml b/helm/solr/Chart.yaml index 96f31c28..34737a34 100644 --- a/helm/solr/Chart.yaml +++ b/helm/solr/Chart.yaml @@ -16,7 +16,7 @@ apiVersion: v2 name: solr description: A SolrCloud cluster running on Kubernetes via the Solr Operator version: 0.10.0-prerelease -appVersion: 8.11.1 +appVersion: 9.9.0 kubeVersion: ">= 1.22.0-0" home: https://solr.apache.org sources: @@ -65,7 +65,7 @@ annotations: url: https://solr.apache.org/operator/resources#tutorials artifacthub.io/images: | - name: solr - image: solr:8.11 + image: solr:9.9.0 whitelisted: true artifacthub.io/signKey: | fingerprint: diff --git a/helm/solr/README.md b/helm/solr/README.md index 5a94b80f..a062c68b 100644 --- a/helm/solr/README.md +++ b/helm/solr/README.md @@ -36,7 +36,7 @@ There may be breaking changes between the version you are using and the version To install a SolrCloud for the first time in your cluster, you can use the latest version or a specific version, run with the following commands: ```bash -helm install example apache-solr/solr --version 0.10.0-prerelease --set image.tag=8.11 +helm install example apache-solr/solr --version 0.10.0-prerelease --set image.tag=9.9.0 ``` The command deploys a SolrCloud object on the Kubernetes cluster with the default configuration. @@ -50,7 +50,7 @@ _Note that the Helm chart version does not contain a `v` prefix, which the Solr If you are upgrading your SolrCloud deployment, you should always use a specific version of the chart and upgrade **after [upgrading the Solr Operator](https://artifacthub.io/packages/helm/apache-solr/solr-operator#upgrading-the-solr-operator) to the same version**: ```bash -helm upgrade example apache-solr/solr --version 0.10.0-prerelease --reuse-values --set image.tag=8.11 +helm upgrade example apache-solr/solr --version 0.10.0-prerelease --reuse-values --set image.tag=9.9.0 ``` The upgrade will be done according to the `upgradeStrategy.method` chosen in the values. @@ -76,42 +76,42 @@ Descriptions on how to use these options can be found in the [SolrCloud document ### Running Solr -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| fullnameOverride | string | `""` | A custom name for the Solr Operator Deployment | -| nameOverride | string | `""` | | -| replicas | int | `3` | The number of Solr pods to run in the Solr Cloud. If you want to use autoScaling, do not set this field. | -| image.repository | string | `"solr"` | The repository of the Solr image | -| image.tag | string | `"8.11"` | The tag/version of Solr to run | -| image.pullPolicy | string | | PullPolicy for the Solr image, defaults to the empty Pod behavior | -| image.imagePullSecret | string | | PullSecret for the Solr image | -| busyBoxImage.repository | string | `"busybox"` | The repository of the BusyBox image | -| busyBoxImage.tag | string | `"1.28.0-glibc"` | The tag/version of BusyBox to run | -| busyBoxImage.pullPolicy | string | | PullPolicy for the BusyBox image, defaults to the empty Pod behavior | -| busyBoxImage.imagePullSecret | string | | PullSecret for the BusyBox image | +| Key | Type | Default | Description | +|-----|------|-------------------|-------------| +| fullnameOverride | string | `""` | A custom name for the Solr Operator Deployment | +| nameOverride | string | `""` | | +| replicas | int | `3` | The number of Solr pods to run in the Solr Cloud. If you want to use autoScaling, do not set this field. | +| image.repository | string | `"solr"` | The repository of the Solr image | +| image.tag | string | `"9.9.0"` | The tag/version of Solr to run | +| image.pullPolicy | string | | PullPolicy for the Solr image, defaults to the empty Pod behavior | +| image.imagePullSecret | string | | PullSecret for the Solr image | +| busyBoxImage.repository | string | `"busybox"` | The repository of the BusyBox image | +| busyBoxImage.tag | string | `"1.28.0-glibc"` | The tag/version of BusyBox to run | +| busyBoxImage.pullPolicy | string | | PullPolicy for the BusyBox image, defaults to the empty Pod behavior | +| busyBoxImage.imagePullSecret | string | | PullSecret for the BusyBox image | | solrOptions.javaMemory | string | `"-Xms1g -Xmx2g"` | Java memory parameters | -| solrOptions.javaOpts | string | `""` | Additional java arguments to pass via the command line. ZooKeeper-connection related properties should be reserved for `solrOptions.zkJavaOpts` (see below). | -| solrOptions.zkJavaOpts | string | `""` | Additional java arguments required to connect to ZooKeeper to pass via the command line | -| solrOptions.logLevel | string | `"INFO"` | Log level to run Solr under | -| solrOptions.gcTune | string | `""` | GC Tuning parameters for Solr | -| solrOptions.solrModules | []string | | List of packaged Solr Modules to load when running Solr. Note: There is no need to specify solr modules necessary for other parts of the Spec (i.e. `backupRepositories[].gcs`), those will be added automatically. | -| solrOptions.additionalLibs | []string | | List of paths in the Solr Image to add to the classPath when running Solr. (There is no need to include paths for solrModules here if already listed in `solrModules`, those paths will be added automatically.) Note that this setting has no effect on solrcloud clusters that rely on a user-provided `solr.xml` file. | -| solrOptions.security.authenticationType | string | `""` | Type of authentication to use for Solr | -| solrOptions.security.basicAuthSecret | string | `""` | Name of Secret in the same namespace that stores the basicAuth information for the Solr user | -| solrOptions.security.probesRequireAuth | boolean | | Whether the probes for the SolrCloud pod require auth | -| solrOptions.security.bootstrapSecurityJson.name | string | | Name of a Secret in the same namespace that stores a user-provided `security.json` to bootstrap the Solr security config | -| solrOptions.security.bootstrapSecurityJson.key | string | | Key holding the user-provided `security.json` in the bootstrap security Secret | -| updateStrategy.method | string | `"Managed"` | The method for conducting updates of Solr pods. Either `Managed`, `StatefulSet` or `Manual`. See the [docs](https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#update-strategy) for more information | -| updateStrategy.managedUpdate.maxPodsUnavailable | int-or-string | `"25%"` | The number of Solr pods in a Solr Cloud that are allowed to be unavailable during the rolling restart. Either a static number, or a percentage representing the percentage of total pods requested for the statefulSet. | -| updateStrategy.managedUpdate.maxShardReplicasUnavailable | int-or-string | `1` | The number of replicas for each shard allowed to be unavailable during the restart. Either a static number, or a percentage representing the percentage of the number of replicas for a shard. | -| updateStrategy.restartSchedule | [string (CRON)](https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format) | | A CRON schedule for automatically restarting the Solr Cloud. [Refer here](https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format) for all possible CRON syntaxes accepted. | -| availability.podDisruptionBudget.enabled | boolean | `true` | Create [PodDisruptionBudget(s)](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) to ensure the availability of SolrNodes. | -| availability.podDisruptionBudget.method | string | `"ClusterWide"` | The method by which PodDisruptionBudgets should be created. The only option currently is `ClusterWide`. | -| serviceAccount.create | boolean | `false` | Create a serviceAccount to be used for all pods being deployed (Solr & ZK). If `serviceAccount.name` is not specified, the full name of the deployment will be used. | -| serviceAccount.name | string | | The optional default service account used for Solr and ZK unless overridden below. If `serviceAccount.create` is set to `false`, this serviceAccount must exist in the target namespace. | -| backupRepositories | []object | | A list of BackupRepositories to connect your SolrCloud to. Visit the [SolrBackup docs](https://apache.github.io/solr-operator/docs/solr-backup) or run `kubectl explain solrcloud.spec.backupRepositories` to see the available options. | -| scaling.vacatePodsOnScaleDown | boolean | `true` | While scaling down the SolrCloud, move replicas off of Solr Pods before they are deleted. This only affects pods that will not exist after the scaleDown operation. | -| scaling.populatePodsOnScaleUp | boolean | `true` | While scaling up the SolrCloud, migrate replicas onto the new Solr Pods after they are created. This uses the Balance Replicas API in Solr that is only available in Solr 9.3+. This option will be ignored if using an unsupported version of Solr. | +| solrOptions.javaOpts | string | `""` | Additional java arguments to pass via the command line. ZooKeeper-connection related properties should be reserved for `solrOptions.zkJavaOpts` (see below). | +| solrOptions.zkJavaOpts | string | `""` | Additional java arguments required to connect to ZooKeeper to pass via the command line | +| solrOptions.logLevel | string | `"INFO"` | Log level to run Solr under | +| solrOptions.gcTune | string | `""` | GC Tuning parameters for Solr | +| solrOptions.solrModules | []string | | List of packaged Solr Modules to load when running Solr. Note: There is no need to specify solr modules necessary for other parts of the Spec (i.e. `backupRepositories[].gcs`), those will be added automatically. | +| solrOptions.additionalLibs | []string | | List of paths in the Solr Image to add to the classPath when running Solr. (There is no need to include paths for solrModules here if already listed in `solrModules`, those paths will be added automatically.) Note that this setting has no effect on solrcloud clusters that rely on a user-provided `solr.xml` file. | +| solrOptions.security.authenticationType | string | `""` | Type of authentication to use for Solr | +| solrOptions.security.basicAuthSecret | string | `""` | Name of Secret in the same namespace that stores the basicAuth information for the Solr user | +| solrOptions.security.probesRequireAuth | boolean | | Whether the probes for the SolrCloud pod require auth | +| solrOptions.security.bootstrapSecurityJson.name | string | | Name of a Secret in the same namespace that stores a user-provided `security.json` to bootstrap the Solr security config | +| solrOptions.security.bootstrapSecurityJson.key | string | | Key holding the user-provided `security.json` in the bootstrap security Secret | +| updateStrategy.method | string | `"Managed"` | The method for conducting updates of Solr pods. Either `Managed`, `StatefulSet` or `Manual`. See the [docs](https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#update-strategy) for more information | +| updateStrategy.managedUpdate.maxPodsUnavailable | int-or-string | `"25%"` | The number of Solr pods in a Solr Cloud that are allowed to be unavailable during the rolling restart. Either a static number, or a percentage representing the percentage of total pods requested for the statefulSet. | +| updateStrategy.managedUpdate.maxShardReplicasUnavailable | int-or-string | `1` | The number of replicas for each shard allowed to be unavailable during the restart. Either a static number, or a percentage representing the percentage of the number of replicas for a shard. | +| updateStrategy.restartSchedule | [string (CRON)](https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format) | | A CRON schedule for automatically restarting the Solr Cloud. [Refer here](https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format) for all possible CRON syntaxes accepted. | +| availability.podDisruptionBudget.enabled | boolean | `true` | Create [PodDisruptionBudget(s)](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) to ensure the availability of SolrNodes. | +| availability.podDisruptionBudget.method | string | `"ClusterWide"` | The method by which PodDisruptionBudgets should be created. The only option currently is `ClusterWide`. | +| serviceAccount.create | boolean | `false` | Create a serviceAccount to be used for all pods being deployed (Solr & ZK). If `serviceAccount.name` is not specified, the full name of the deployment will be used. | +| serviceAccount.name | string | | The optional default service account used for Solr and ZK unless overridden below. If `serviceAccount.create` is set to `false`, this serviceAccount must exist in the target namespace. | +| backupRepositories | []object | | A list of BackupRepositories to connect your SolrCloud to. Visit the [SolrBackup docs](https://apache.github.io/solr-operator/docs/solr-backup) or run `kubectl explain solrcloud.spec.backupRepositories` to see the available options. | +| scaling.vacatePodsOnScaleDown | boolean | `true` | While scaling down the SolrCloud, move replicas off of Solr Pods before they are deleted. This only affects pods that will not exist after the scaleDown operation. | +| scaling.populatePodsOnScaleUp | boolean | `true` | While scaling up the SolrCloud, migrate replicas onto the new Solr Pods after they are created. This uses the Balance Replicas API in Solr that is only available in Solr 9.3+. This option will be ignored if using an unsupported version of Solr. | ### Data Storage Options diff --git a/tests/e2e/suite_test.go b/tests/e2e/suite_test.go index c7464430..6bd6c618 100644 --- a/tests/e2e/suite_test.go +++ b/tests/e2e/suite_test.go @@ -76,7 +76,7 @@ var ( logger logr.Logger defaultOperatorImage = "apache/solr-operator:" + version.FullVersion() - defaultSolrImage = "solr:8.11" + defaultSolrImage = "solr:9.9.0" operatorImage = getEnvWithDefault(operatorImageEnv, defaultOperatorImage) solrImage = getEnvWithDefault(solrImageEnv, defaultSolrImage) diff --git a/tests/scripts/manage_e2e_tests.sh b/tests/scripts/manage_e2e_tests.sh index 2da32c46..33d95d65 100755 --- a/tests/scripts/manage_e2e_tests.sh +++ b/tests/scripts/manage_e2e_tests.sh @@ -35,7 +35,7 @@ Available actions are: run-tests, create-cluster, destroy-cluster, kubeconfig -h Display this help and exit -i Solr Operator docker image to use (Optional, defaults to apache/solr-operator:) -k Kubernetes Version to test with (full tag, e.g. v1.24.16) (Optional, defaults to a compatible version) - -s Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.4.0, 8.11). (Optional, defaults to a compatible version) + -s Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.4.0, 9.9.0). (Optional, defaults to a compatible version) -a Load additional local images into the test Kubernetes cluster. Provide option multiple times for multiple images. (Optional) EOF } From 6b61b7a7fe2eacdad49c0f3024779aa97b16f026 Mon Sep 17 00:00:00 2001 From: Jason Gerlowski Date: Thu, 4 Dec 2025 12:00:10 -0500 Subject: [PATCH 2/3] Bump default up to 9.10 --- api/v1beta1/solrcloud_types.go | 2 +- dev-docs/e2e-testing.md | 2 +- docs/local_tutorial.md | 6 +- example/test_solrcloud.yaml | 2 +- example/test_solrcloud_backuprepos.yaml | 2 +- example/test_solrcloud_private_repo.yaml | 2 +- .../test_solrcloud_toleration_example.yaml | 2 +- example/test_solrprometheusexporter.yaml | 2 +- hack/release/smoke_test/test_cluster.sh | 4 +- helm/solr-operator/Chart.yaml | 4 +- helm/solr/Chart.yaml | 4 +- helm/solr/README.md | 68 +++++++++---------- tests/e2e/suite_test.go | 2 +- tests/scripts/manage_e2e_tests.sh | 2 +- 14 files changed, 52 insertions(+), 52 deletions(-) diff --git a/api/v1beta1/solrcloud_types.go b/api/v1beta1/solrcloud_types.go index c37250cd..18930268 100644 --- a/api/v1beta1/solrcloud_types.go +++ b/api/v1beta1/solrcloud_types.go @@ -37,7 +37,7 @@ const ( DefaultSolrReplicas = int32(3) DefaultSolrRepo = "library/solr" - DefaultSolrVersion = "9.9.0" + DefaultSolrVersion = "9.10.0" DefaultSolrJavaMem = "-Xms1g -Xmx2g" DefaultSolrOpts = "" DefaultSolrLogLevel = "INFO" diff --git a/dev-docs/e2e-testing.md b/dev-docs/e2e-testing.md index 23c46b99..7360fc2f 100644 --- a/dev-docs/e2e-testing.md +++ b/dev-docs/e2e-testing.md @@ -47,7 +47,7 @@ $ make e2e-tests TEST_SEED=89724023 SOLR_IMAGE=apache/solr-nightly:10.0.0-SNAPSH The default parallelism is `3`. - **SOLR_IMAGE** - The solr docker image label to use in the integration tests. It is recommended to use only supported versions for the Solr Operator version being tested. - Default is `solr:9.9.0`. + Default is `solr:9.10.0`. - **KUBERETES_VERSION** - A full Kubernetes version, starting with `v`, to use when creating the KinD Cluster. To find a list of all possible versions, check the [KinD Node Docker tags](https://hub.docker.com/r/kindest/node/tags). Default is `v1.26.6`. diff --git a/docs/local_tutorial.md b/docs/local_tutorial.md index 14bd430f..ba1743d1 100644 --- a/docs/local_tutorial.md +++ b/docs/local_tutorial.md @@ -122,9 +122,9 @@ After inspecting the status of you Kube cluster, you should see a deployment for To start a Solr Cloud cluster, we will create a yaml that will tell the Solr Operator what version of Solr Cloud to run, and how many nodes, with how much memory etc. ```bash -# Create a 3-node cluster v9.9.0 with 300m Heap each: +# Create a 3-node cluster v9.10.0 with 300m Heap each: helm install example-solr apache-solr/solr --version 0.10.0-prerelease \ - --set image.tag=9.9.0 \ + --set image.tag=9.10.0 \ --set solrOptions.javaMemory="-Xms300m -Xmx300m" \ --set addressability.external.method=Ingress \ --set addressability.external.domainName="ing.local.domain" \ @@ -213,7 +213,7 @@ curl -s http://default-example-solrcloud.ing.local.domain/solr/admin/info/system # Update the solrCloud configuration with the new version, keeping all previous settings and the number of nodes set by the autoscaler. helm upgrade example-solr apache-solr/solr --version 0.10.0-prerelease \ --reuse-values \ - --set image.tag=9.9.0 + --set image.tag=9.10.0 # Click the 'Show all details" button in Admin UI and start hitting the "Refresh" button # See how the operator upgrades one pod at a time. Solr version is in the 'node' column diff --git a/example/test_solrcloud.yaml b/example/test_solrcloud.yaml index 1875f442..6e348ccf 100644 --- a/example/test_solrcloud.yaml +++ b/example/test_solrcloud.yaml @@ -28,7 +28,7 @@ spec: storage: "5Gi" replicas: 3 solrImage: - tag: "9.9.0" + tag: "9.10.0" solrJavaMem: "-Xms1g -Xmx3g" solrModules: - jaegertracer-configurator diff --git a/example/test_solrcloud_backuprepos.yaml b/example/test_solrcloud_backuprepos.yaml index 1c8aba65..0213abf9 100644 --- a/example/test_solrcloud_backuprepos.yaml +++ b/example/test_solrcloud_backuprepos.yaml @@ -20,7 +20,7 @@ metadata: spec: replicas: 1 solrImage: - tag: "9.0.0" + tag: "9.10.0" backupRepositories: # "Volume" repositories store backup data in a Kubernetes volume. - name: "volume_repository_1" diff --git a/example/test_solrcloud_private_repo.yaml b/example/test_solrcloud_private_repo.yaml index a0371a4d..73ef1cdd 100644 --- a/example/test_solrcloud_private_repo.yaml +++ b/example/test_solrcloud_private_repo.yaml @@ -21,5 +21,5 @@ spec: replicas: 3 solrImage: repository: myprivate-repo.jfrog.io/solr - tag: "9.0.0" + tag: "9.10.0" imagePullSecret: "k8s-docker-registry-secret" diff --git a/example/test_solrcloud_toleration_example.yaml b/example/test_solrcloud_toleration_example.yaml index 8940c473..fb4fe6f1 100644 --- a/example/test_solrcloud_toleration_example.yaml +++ b/example/test_solrcloud_toleration_example.yaml @@ -20,7 +20,7 @@ metadata: spec: replicas: 1 solrImage: - tag: "9.0.0" + tag: "9.10.0" customSolrKubeOptions: podOptions: nodeSelector: diff --git a/example/test_solrprometheusexporter.yaml b/example/test_solrprometheusexporter.yaml index 221eade2..69adc8b3 100644 --- a/example/test_solrprometheusexporter.yaml +++ b/example/test_solrprometheusexporter.yaml @@ -23,4 +23,4 @@ spec: name: "example" numThreads: 4 image: - tag: "9.9.0" + tag: "9.10.0" diff --git a/hack/release/smoke_test/test_cluster.sh b/hack/release/smoke_test/test_cluster.sh index 0a14a6cf..b99e7227 100755 --- a/hack/release/smoke_test/test_cluster.sh +++ b/hack/release/smoke_test/test_cluster.sh @@ -33,7 +33,7 @@ Test the release candidate in a Kind cluster -i Solr Operator docker image to use (Optional, defaults to apache/solr-operator:) -g GPG Key (fingerprint) used to sign the artifacts (Optional, if not provided then the helm chart will not be verified) -k Kubernetes Version to test with (full tag, e.g. v1.26.6) (Optional, defaults to a compatible version) - -t Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.0.0, 9.9.0). (Optional, defaults to a compatible version) + -t Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.0.0, 9.10.0). (Optional, defaults to a compatible version) EOF } @@ -77,7 +77,7 @@ if [[ -z "${KUBERNETES_VERSION:-}" ]]; then KUBERNETES_VERSION="v1.26.6" fi if [[ -z "${SOLR_IMAGE:-}" ]]; then - SOLR_IMAGE="${SOLR_VERSION:-9.9.0}" + SOLR_IMAGE="${SOLR_VERSION:-9.10.0}" fi if [[ "${SOLR_IMAGE}" != *":"* ]]; then SOLR_IMAGE="solr:${SOLR_IMAGE}" diff --git a/helm/solr-operator/Chart.yaml b/helm/solr-operator/Chart.yaml index 4a58745b..1e174e17 100644 --- a/helm/solr-operator/Chart.yaml +++ b/helm/solr-operator/Chart.yaml @@ -114,7 +114,7 @@ annotations: storage: "20Gi" replicas: 3 solrImage: - tag: 9.9.0 + tag: 9.10.0 solrJavaMem: "-Xms4g -Xmx4g" customSolrKubeOptions: podOptions: @@ -155,7 +155,7 @@ annotations: name: "example" numThreads: 4 image: - tag: 9.9.0 + tag: 9.10.0 - apiVersion: solr.apache.org/v1beta1 kind: SolrBackup metadata: diff --git a/helm/solr/Chart.yaml b/helm/solr/Chart.yaml index 34737a34..66e0251b 100644 --- a/helm/solr/Chart.yaml +++ b/helm/solr/Chart.yaml @@ -16,7 +16,7 @@ apiVersion: v2 name: solr description: A SolrCloud cluster running on Kubernetes via the Solr Operator version: 0.10.0-prerelease -appVersion: 9.9.0 +appVersion: 9.10.0 kubeVersion: ">= 1.22.0-0" home: https://solr.apache.org sources: @@ -65,7 +65,7 @@ annotations: url: https://solr.apache.org/operator/resources#tutorials artifacthub.io/images: | - name: solr - image: solr:9.9.0 + image: solr:9.10.0 whitelisted: true artifacthub.io/signKey: | fingerprint: diff --git a/helm/solr/README.md b/helm/solr/README.md index a062c68b..a2c29c93 100644 --- a/helm/solr/README.md +++ b/helm/solr/README.md @@ -36,7 +36,7 @@ There may be breaking changes between the version you are using and the version To install a SolrCloud for the first time in your cluster, you can use the latest version or a specific version, run with the following commands: ```bash -helm install example apache-solr/solr --version 0.10.0-prerelease --set image.tag=9.9.0 +helm install example apache-solr/solr --version 0.10.0-prerelease --set image.tag=9.10.0 ``` The command deploys a SolrCloud object on the Kubernetes cluster with the default configuration. @@ -50,7 +50,7 @@ _Note that the Helm chart version does not contain a `v` prefix, which the Solr If you are upgrading your SolrCloud deployment, you should always use a specific version of the chart and upgrade **after [upgrading the Solr Operator](https://artifacthub.io/packages/helm/apache-solr/solr-operator#upgrading-the-solr-operator) to the same version**: ```bash -helm upgrade example apache-solr/solr --version 0.10.0-prerelease --reuse-values --set image.tag=9.9.0 +helm upgrade example apache-solr/solr --version 0.10.0-prerelease --reuse-values --set image.tag=9.10.0 ``` The upgrade will be done according to the `upgradeStrategy.method` chosen in the values. @@ -78,40 +78,40 @@ Descriptions on how to use these options can be found in the [SolrCloud document | Key | Type | Default | Description | |-----|------|-------------------|-------------| -| fullnameOverride | string | `""` | A custom name for the Solr Operator Deployment | -| nameOverride | string | `""` | | -| replicas | int | `3` | The number of Solr pods to run in the Solr Cloud. If you want to use autoScaling, do not set this field. | -| image.repository | string | `"solr"` | The repository of the Solr image | -| image.tag | string | `"9.9.0"` | The tag/version of Solr to run | -| image.pullPolicy | string | | PullPolicy for the Solr image, defaults to the empty Pod behavior | -| image.imagePullSecret | string | | PullSecret for the Solr image | -| busyBoxImage.repository | string | `"busybox"` | The repository of the BusyBox image | -| busyBoxImage.tag | string | `"1.28.0-glibc"` | The tag/version of BusyBox to run | -| busyBoxImage.pullPolicy | string | | PullPolicy for the BusyBox image, defaults to the empty Pod behavior | -| busyBoxImage.imagePullSecret | string | | PullSecret for the BusyBox image | +| fullnameOverride | string | `""` | A custom name for the Solr Operator Deployment | +| nameOverride | string | `""` | | +| replicas | int | `3` | The number of Solr pods to run in the Solr Cloud. If you want to use autoScaling, do not set this field. | +| image.repository | string | `"solr"` | The repository of the Solr image | +| image.tag | string | `"9.10.0"` | The tag/version of Solr to run | +| image.pullPolicy | string | | PullPolicy for the Solr image, defaults to the empty Pod behavior | +| image.imagePullSecret | string | | PullSecret for the Solr image | +| busyBoxImage.repository | string | `"busybox"` | The repository of the BusyBox image | +| busyBoxImage.tag | string | `"1.28.0-glibc"` | The tag/version of BusyBox to run | +| busyBoxImage.pullPolicy | string | | PullPolicy for the BusyBox image, defaults to the empty Pod behavior | +| busyBoxImage.imagePullSecret | string | | PullSecret for the BusyBox image | | solrOptions.javaMemory | string | `"-Xms1g -Xmx2g"` | Java memory parameters | -| solrOptions.javaOpts | string | `""` | Additional java arguments to pass via the command line. ZooKeeper-connection related properties should be reserved for `solrOptions.zkJavaOpts` (see below). | -| solrOptions.zkJavaOpts | string | `""` | Additional java arguments required to connect to ZooKeeper to pass via the command line | -| solrOptions.logLevel | string | `"INFO"` | Log level to run Solr under | -| solrOptions.gcTune | string | `""` | GC Tuning parameters for Solr | -| solrOptions.solrModules | []string | | List of packaged Solr Modules to load when running Solr. Note: There is no need to specify solr modules necessary for other parts of the Spec (i.e. `backupRepositories[].gcs`), those will be added automatically. | -| solrOptions.additionalLibs | []string | | List of paths in the Solr Image to add to the classPath when running Solr. (There is no need to include paths for solrModules here if already listed in `solrModules`, those paths will be added automatically.) Note that this setting has no effect on solrcloud clusters that rely on a user-provided `solr.xml` file. | -| solrOptions.security.authenticationType | string | `""` | Type of authentication to use for Solr | -| solrOptions.security.basicAuthSecret | string | `""` | Name of Secret in the same namespace that stores the basicAuth information for the Solr user | -| solrOptions.security.probesRequireAuth | boolean | | Whether the probes for the SolrCloud pod require auth | -| solrOptions.security.bootstrapSecurityJson.name | string | | Name of a Secret in the same namespace that stores a user-provided `security.json` to bootstrap the Solr security config | -| solrOptions.security.bootstrapSecurityJson.key | string | | Key holding the user-provided `security.json` in the bootstrap security Secret | -| updateStrategy.method | string | `"Managed"` | The method for conducting updates of Solr pods. Either `Managed`, `StatefulSet` or `Manual`. See the [docs](https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#update-strategy) for more information | -| updateStrategy.managedUpdate.maxPodsUnavailable | int-or-string | `"25%"` | The number of Solr pods in a Solr Cloud that are allowed to be unavailable during the rolling restart. Either a static number, or a percentage representing the percentage of total pods requested for the statefulSet. | -| updateStrategy.managedUpdate.maxShardReplicasUnavailable | int-or-string | `1` | The number of replicas for each shard allowed to be unavailable during the restart. Either a static number, or a percentage representing the percentage of the number of replicas for a shard. | +| solrOptions.javaOpts | string | `""` | Additional java arguments to pass via the command line. ZooKeeper-connection related properties should be reserved for `solrOptions.zkJavaOpts` (see below). | +| solrOptions.zkJavaOpts | string | `""` | Additional java arguments required to connect to ZooKeeper to pass via the command line | +| solrOptions.logLevel | string | `"INFO"` | Log level to run Solr under | +| solrOptions.gcTune | string | `""` | GC Tuning parameters for Solr | +| solrOptions.solrModules | []string | | List of packaged Solr Modules to load when running Solr. Note: There is no need to specify solr modules necessary for other parts of the Spec (i.e. `backupRepositories[].gcs`), those will be added automatically. | +| solrOptions.additionalLibs | []string | | List of paths in the Solr Image to add to the classPath when running Solr. (There is no need to include paths for solrModules here if already listed in `solrModules`, those paths will be added automatically.) Note that this setting has no effect on solrcloud clusters that rely on a user-provided `solr.xml` file. | +| solrOptions.security.authenticationType | string | `""` | Type of authentication to use for Solr | +| solrOptions.security.basicAuthSecret | string | `""` | Name of Secret in the same namespace that stores the basicAuth information for the Solr user | +| solrOptions.security.probesRequireAuth | boolean | | Whether the probes for the SolrCloud pod require auth | +| solrOptions.security.bootstrapSecurityJson.name | string | | Name of a Secret in the same namespace that stores a user-provided `security.json` to bootstrap the Solr security config | +| solrOptions.security.bootstrapSecurityJson.key | string | | Key holding the user-provided `security.json` in the bootstrap security Secret | +| updateStrategy.method | string | `"Managed"` | The method for conducting updates of Solr pods. Either `Managed`, `StatefulSet` or `Manual`. See the [docs](https://apache.github.io/solr-operator/docs/solr-cloud/solr-cloud-crd.html#update-strategy) for more information | +| updateStrategy.managedUpdate.maxPodsUnavailable | int-or-string | `"25%"` | The number of Solr pods in a Solr Cloud that are allowed to be unavailable during the rolling restart. Either a static number, or a percentage representing the percentage of total pods requested for the statefulSet. | +| updateStrategy.managedUpdate.maxShardReplicasUnavailable | int-or-string | `1` | The number of replicas for each shard allowed to be unavailable during the restart. Either a static number, or a percentage representing the percentage of the number of replicas for a shard. | | updateStrategy.restartSchedule | [string (CRON)](https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format) | | A CRON schedule for automatically restarting the Solr Cloud. [Refer here](https://pkg.go.dev/github.com/robfig/cron/v3?utm_source=godoc#hdr-CRON_Expression_Format) for all possible CRON syntaxes accepted. | -| availability.podDisruptionBudget.enabled | boolean | `true` | Create [PodDisruptionBudget(s)](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) to ensure the availability of SolrNodes. | -| availability.podDisruptionBudget.method | string | `"ClusterWide"` | The method by which PodDisruptionBudgets should be created. The only option currently is `ClusterWide`. | -| serviceAccount.create | boolean | `false` | Create a serviceAccount to be used for all pods being deployed (Solr & ZK). If `serviceAccount.name` is not specified, the full name of the deployment will be used. | -| serviceAccount.name | string | | The optional default service account used for Solr and ZK unless overridden below. If `serviceAccount.create` is set to `false`, this serviceAccount must exist in the target namespace. | -| backupRepositories | []object | | A list of BackupRepositories to connect your SolrCloud to. Visit the [SolrBackup docs](https://apache.github.io/solr-operator/docs/solr-backup) or run `kubectl explain solrcloud.spec.backupRepositories` to see the available options. | -| scaling.vacatePodsOnScaleDown | boolean | `true` | While scaling down the SolrCloud, move replicas off of Solr Pods before they are deleted. This only affects pods that will not exist after the scaleDown operation. | -| scaling.populatePodsOnScaleUp | boolean | `true` | While scaling up the SolrCloud, migrate replicas onto the new Solr Pods after they are created. This uses the Balance Replicas API in Solr that is only available in Solr 9.3+. This option will be ignored if using an unsupported version of Solr. | +| availability.podDisruptionBudget.enabled | boolean | `true` | Create [PodDisruptionBudget(s)](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) to ensure the availability of SolrNodes. | +| availability.podDisruptionBudget.method | string | `"ClusterWide"` | The method by which PodDisruptionBudgets should be created. The only option currently is `ClusterWide`. | +| serviceAccount.create | boolean | `false` | Create a serviceAccount to be used for all pods being deployed (Solr & ZK). If `serviceAccount.name` is not specified, the full name of the deployment will be used. | +| serviceAccount.name | string | | The optional default service account used for Solr and ZK unless overridden below. If `serviceAccount.create` is set to `false`, this serviceAccount must exist in the target namespace. | +| backupRepositories | []object | | A list of BackupRepositories to connect your SolrCloud to. Visit the [SolrBackup docs](https://apache.github.io/solr-operator/docs/solr-backup) or run `kubectl explain solrcloud.spec.backupRepositories` to see the available options. | +| scaling.vacatePodsOnScaleDown | boolean | `true` | While scaling down the SolrCloud, move replicas off of Solr Pods before they are deleted. This only affects pods that will not exist after the scaleDown operation. | +| scaling.populatePodsOnScaleUp | boolean | `true` | While scaling up the SolrCloud, migrate replicas onto the new Solr Pods after they are created. This uses the Balance Replicas API in Solr that is only available in Solr 9.3+. This option will be ignored if using an unsupported version of Solr. | ### Data Storage Options diff --git a/tests/e2e/suite_test.go b/tests/e2e/suite_test.go index 6bd6c618..1ac10f8d 100644 --- a/tests/e2e/suite_test.go +++ b/tests/e2e/suite_test.go @@ -76,7 +76,7 @@ var ( logger logr.Logger defaultOperatorImage = "apache/solr-operator:" + version.FullVersion() - defaultSolrImage = "solr:9.9.0" + defaultSolrImage = "solr:9.10.0" operatorImage = getEnvWithDefault(operatorImageEnv, defaultOperatorImage) solrImage = getEnvWithDefault(solrImageEnv, defaultSolrImage) diff --git a/tests/scripts/manage_e2e_tests.sh b/tests/scripts/manage_e2e_tests.sh index 33d95d65..1ad632d6 100755 --- a/tests/scripts/manage_e2e_tests.sh +++ b/tests/scripts/manage_e2e_tests.sh @@ -35,7 +35,7 @@ Available actions are: run-tests, create-cluster, destroy-cluster, kubeconfig -h Display this help and exit -i Solr Operator docker image to use (Optional, defaults to apache/solr-operator:) -k Kubernetes Version to test with (full tag, e.g. v1.24.16) (Optional, defaults to a compatible version) - -s Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.4.0, 9.9.0). (Optional, defaults to a compatible version) + -s Full solr image, or image tag (for the official Solr image), to test with (e.g. apache/solr-nightly:9.4.0, 9.10.0). (Optional, defaults to a compatible version) -a Load additional local images into the test Kubernetes cluster. Provide option multiple times for multiple images. (Optional) EOF } From a46c2ef16a9fc606e1227c578e7bcb7fe5af312b Mon Sep 17 00:00:00 2001 From: Jason Gerlowski Date: Thu, 4 Dec 2025 15:27:07 -0500 Subject: [PATCH 3/3] Use 9.10 in integration tests by default --- tests/scripts/manage_e2e_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scripts/manage_e2e_tests.sh b/tests/scripts/manage_e2e_tests.sh index 1ad632d6..09a0c773 100755 --- a/tests/scripts/manage_e2e_tests.sh +++ b/tests/scripts/manage_e2e_tests.sh @@ -76,7 +76,7 @@ if [[ -z "${KUBERNETES_VERSION:-}" ]]; then KUBERNETES_VERSION="v1.26.6" fi if [[ -z "${SOLR_IMAGE:-}" ]]; then - SOLR_IMAGE="${SOLR_VERSION:-9.8.1}" + SOLR_IMAGE="${SOLR_VERSION:-9.10.0}" fi if [[ "${SOLR_IMAGE}" != *":"* ]]; then SOLR_IMAGE="solr:${SOLR_IMAGE}"