This is an automated email from the ASF dual-hosted git repository.

gerlowskija 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 77d27a0  Add shareProcessNamespace flag to podOptions (#735)
77d27a0 is described below

commit 77d27a049b2558e25280d46646e73424ab5b953c
Author: Jason Gerlowski <gerlowsk...@apache.org>
AuthorDate: Wed Jan 8 06:35:50 2025 -0500

    Add shareProcessNamespace flag to podOptions (#735)
    
    Boolean flag defaults to false, and is available in the CRD at
    `.spec.customSolrKubeOptions.podOptions.shareProcessNamespace`.
    
    The 'solr' helm chart exposes this with the variable:
    `podOptions.shareProcessNamespace`.
    
    Closes #716
    
    ---------
    
    Co-authored-by: Houston Putman <houstonput...@gmail.com>
---
 api/v1beta1/common_types.go                                   | 4 ++++
 config/crd/bases/solr.apache.org_solrclouds.yaml              | 4 ++++
 config/crd/bases/solr.apache.org_solrprometheusexporters.yaml | 4 ++++
 controllers/solrcloud_controller_test.go                      | 5 +++++
 controllers/util/solr_util.go                                 | 3 +++
 helm/solr-operator/Chart.yaml                                 | 7 +++++++
 helm/solr-operator/crds/crds.yaml                             | 8 ++++++++
 helm/solr/README.md                                           | 1 +
 helm/solr/templates/_custom_option_helpers.tpl                | 3 +++
 helm/solr/values.yaml                                         | 2 ++
 10 files changed, 41 insertions(+)

diff --git a/api/v1beta1/common_types.go b/api/v1beta1/common_types.go
index b440b90..6f921a4 100644
--- a/api/v1beta1/common_types.go
+++ b/api/v1beta1/common_types.go
@@ -137,6 +137,10 @@ type PodOptions struct {
        // +optional
        ServiceAccountName string `json:"serviceAccountName,omitempty"`
 
+       // Should process namespace sharing be enabled on created pods
+       // +optional
+       ShareProcessNamespace bool `json:"shareProcessNamespace,omitempty"`
+
        // Optional PodSpreadTopologyConstraints to use when scheduling pods.
        // More information here: 
https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
        //
diff --git a/config/crd/bases/solr.apache.org_solrclouds.yaml 
b/config/crd/bases/solr.apache.org_solrclouds.yaml
index 3173322..17feeab 100644
--- a/config/crd/bases/solr.apache.org_solrclouds.yaml
+++ b/config/crd/bases/solr.apache.org_solrclouds.yaml
@@ -5082,6 +5082,10 @@ spec:
                       serviceAccountName:
                         description: Optional Service Account to run the pod 
under.
                         type: string
+                      shareProcessNamespace:
+                        description: Should process namespace sharing be 
enabled on
+                          created pods
+                        type: boolean
                       sidecarContainers:
                         description: Sidecar containers to run in the pod. 
These are
                           in addition to the Solr Container
diff --git a/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml 
b/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml
index e53c87b..808140d 100644
--- a/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml
+++ b/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml
@@ -3173,6 +3173,10 @@ spec:
                       serviceAccountName:
                         description: Optional Service Account to run the pod 
under.
                         type: string
+                      shareProcessNamespace:
+                        description: Should process namespace sharing be 
enabled on
+                          created pods
+                        type: boolean
                       sidecarContainers:
                         description: Sidecar containers to run in the pod. 
These are
                           in addition to the Solr Container
diff --git a/controllers/solrcloud_controller_test.go 
b/controllers/solrcloud_controller_test.go
index de590e1..c1dbc11 100644
--- a/controllers/solrcloud_controller_test.go
+++ b/controllers/solrcloud_controller_test.go
@@ -25,6 +25,7 @@ import (
        "github.com/apache/solr-operator/controllers/util"
        . "github.com/onsi/ginkgo/v2"
        . "github.com/onsi/gomega"
+       . "github.com/onsi/gomega/gstruct"
        appsv1 "k8s.io/api/apps/v1"
        corev1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -146,6 +147,7 @@ var _ = FDescribe("SolrCloud controller - General", func() {
                        
Expect(statefulSet.Spec.Template.Spec.Volumes).To(HaveLen(len(extraVolumes)+3), 
"Pod has wrong number of volumes")
                        
Expect(statefulSet.Spec.Template.Spec.Volumes[3].Name).To(Equal(extraVolumes[0].Name),
 "Additional Volume from podOptions not loaded into pod properly.")
                        
Expect(statefulSet.Spec.Template.Spec.Volumes[3].VolumeSource).To(Equal(extraVolumes[0].Source),
 "Additional Volume from podOptions not loaded into pod properly.")
+                       
Expect(statefulSet.Spec.Template.Spec.ShareProcessNamespace).Should(PointTo(BeFalse()))
                        
Expect(statefulSet.Spec.Template.Spec.ReadinessGates).To(ContainElement(corev1.PodReadinessGate{ConditionType:
 util.SolrIsNotStoppedReadinessCondition}), "All pods should contain the 
isNotStopped readinessGate.")
 
                        By("testing the Solr Common Service")
@@ -169,6 +171,7 @@ var _ = FDescribe("SolrCloud controller - General", func() {
 
        FContext("Solr Cloud with Custom Kube Options", func() {
                three := intstr.FromInt(3)
+               testShareProcessNamespace := true
                BeforeEach(func() {
                        replicas := int32(4)
                        solrCloud.Spec = solrv1beta1.SolrCloudSpec{
@@ -213,6 +216,7 @@ var _ = FDescribe("SolrCloud controller - General", func() {
                                                TopologySpreadConstraints:     
testTopologySpreadConstraints,
                                                DefaultInitContainerResources: 
testResources2,
                                                InitContainers:                
extraContainers1,
+                                               ShareProcessNamespace:         
testShareProcessNamespace,
                                        },
                                        StatefulSetOptions: 
&solrv1beta1.StatefulSetOptions{
                                                Annotations:         
testSSAnnotations,
@@ -284,6 +288,7 @@ var _ = FDescribe("SolrCloud controller - General", func() {
                        
Expect(statefulSet.Spec.Template.Spec.ServiceAccountName).To(Equal(testServiceAccountName),
 "Incorrect serviceAccountName")
                        
Expect(statefulSet.Spec.Template.Spec.TopologySpreadConstraints).To(HaveLen(len(testTopologySpreadConstraints)),
 "Wrong number of topologySpreadConstraints")
                        
Expect(statefulSet.Spec.Template.Spec.TopologySpreadConstraints[0]).To(Equal(testTopologySpreadConstraints[0]),
 "Wrong first topologySpreadConstraint")
+                       
Expect(statefulSet.Spec.Template.Spec.ShareProcessNamespace).To(Equal(&testShareProcessNamespace),
 "Wrong shareProcessNamespace value")
                        expectedSecondTopologyConstraint := 
testTopologySpreadConstraints[1].DeepCopy()
                        expectedSecondTopologyConstraint.LabelSelector = 
statefulSet.Spec.Selector
                        
Expect(statefulSet.Spec.Template.Spec.TopologySpreadConstraints[1]).To(Equal(*expectedSecondTopologyConstraint),
 "Wrong second topologySpreadConstraint")
diff --git a/controllers/util/solr_util.go b/controllers/util/solr_util.go
index de44d7c..64b9ba1 100644
--- a/controllers/util/solr_util.go
+++ b/controllers/util/solr_util.go
@@ -82,6 +82,7 @@ var (
 // zkConnectionString: the connectionString of the ZK instance to connect to
 func GenerateStatefulSet(solrCloud *solr.SolrCloud, solrCloudStatus 
*solr.SolrCloudStatus, hostNameIPs map[string]string, reconcileConfigInfo 
map[string]string, tls *TLSCerts, security *SecurityConfig) *appsv1.StatefulSet 
{
        terminationGracePeriod := int64(60)
+       shareProcessNamespace := false
        solrPodPort := solrCloud.Spec.SolrAddressability.PodPort
        defaultFSGroup := int64(DefaultSolrGroup)
 
@@ -122,6 +123,7 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud, 
solrCloudStatus *solr.SolrCl
                if customPodOptions.TerminationGracePeriodSeconds != nil {
                        terminationGracePeriod = 
*customPodOptions.TerminationGracePeriodSeconds
                }
+               shareProcessNamespace = customPodOptions.ShareProcessNamespace
        }
 
        // The isNotStopped readiness gate will always be used for 
managedUpdates
@@ -543,6 +545,7 @@ func GenerateStatefulSet(solrCloud *solr.SolrCloud, 
solrCloudStatus *solr.SolrCl
 
                                Spec: corev1.PodSpec{
                                        TerminationGracePeriodSeconds: 
&terminationGracePeriod,
+                                       ShareProcessNamespace:         
&shareProcessNamespace,
                                        SecurityContext: 
&corev1.PodSecurityContext{
                                                FSGroup: &defaultFSGroup,
                                        },
diff --git a/helm/solr-operator/Chart.yaml b/helm/solr-operator/Chart.yaml
index 891e494..060ae16 100644
--- a/helm/solr-operator/Chart.yaml
+++ b/helm/solr-operator/Chart.yaml
@@ -62,6 +62,13 @@ annotations:
           url: https://github.com/apache/solr-operator/issues/684
         - name: Github PR
           url: https://github.com/apache/solr-operator/pull/685
+    - kind: added
+      description: SolrClouds now support namespace sharing among pod 
containers in a pod.
+      links:
+        - name: Github Issue
+          url: https://github.com/apache/solr-operator/issues/716
+        - name: Github PR
+          url: https://github.com/apache/solr-operator/pull/735
     - kind: changed
       description: SolrClouds now support auto-readOnlyRootFilesystem setting.
       links:
diff --git a/helm/solr-operator/crds/crds.yaml 
b/helm/solr-operator/crds/crds.yaml
index 14f285c..0f807e3 100644
--- a/helm/solr-operator/crds/crds.yaml
+++ b/helm/solr-operator/crds/crds.yaml
@@ -5343,6 +5343,10 @@ spec:
                       serviceAccountName:
                         description: Optional Service Account to run the pod 
under.
                         type: string
+                      shareProcessNamespace:
+                        description: Should process namespace sharing be 
enabled on
+                          created pods
+                        type: boolean
                       sidecarContainers:
                         description: Sidecar containers to run in the pod. 
These are
                           in addition to the Solr Container
@@ -19456,6 +19460,10 @@ spec:
                       serviceAccountName:
                         description: Optional Service Account to run the pod 
under.
                         type: string
+                      shareProcessNamespace:
+                        description: Should process namespace sharing be 
enabled on
+                          created pods
+                        type: boolean
                       sidecarContainers:
                         description: Sidecar containers to run in the pod. 
These are
                           in addition to the Solr Container
diff --git a/helm/solr/README.md b/helm/solr/README.md
index 5aa45a9..bbd0075 100644
--- a/helm/solr/README.md
+++ b/helm/solr/README.md
@@ -285,6 +285,7 @@ When using the helm chart, omit `customSolrKubeOptions.`
 | podOptions.tolerations | []object |  | Specify a list of Kubernetes 
tolerations for the Solr pod |
 | podOptions.topologySpreadConstraints | []object |  | Specify a list of 
Kubernetes topologySpreadConstraints for the Solr pod. No need to provide a 
`labelSelector`, as the Solr Operator will default that for you. More 
information can be found in [the 
documentation](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/).
 |
 | podOptions.serviceAccountName | string |  | Optional serviceAccount to run 
the Solr pods under |
+| podOptions.shareProcessNamespace | boolean | false | Whether containers in a 
pod should share the same process namespace. |
 | podOptions.priorityClassName | string | | Optional priorityClassName for the 
Solr pod |
 | podOptions.sidecarContainers | []object |  | An optional list of additional 
containers to run along side the Solr in its pod |
 | podOptions.initContainers | []object |  | An optional list of additional 
initContainers to run before the Solr container starts |
diff --git a/helm/solr/templates/_custom_option_helpers.tpl 
b/helm/solr/templates/_custom_option_helpers.tpl
index d2b9b58..f0b4aba 100644
--- a/helm/solr/templates/_custom_option_helpers.tpl
+++ b/helm/solr/templates/_custom_option_helpers.tpl
@@ -36,6 +36,9 @@ resources:
 {{- if (include "solr.serviceAccountName.solr" .) -}}
 serviceAccountName: {{ include "solr.serviceAccountName.solr" . }}
 {{ end }}
+{{- if .Values.podOptions.shareProcessNamespace -}}
+shareProcessNamespace: {{ .Values.podOptions.shareProcessNamespace }}
+{{ end }}
 {{- if .Values.podOptions.priorityClassName -}}
 priorityClassName: {{ .Values.podOptions.priorityClassName }}
 {{ end }}
diff --git a/helm/solr/values.yaml b/helm/solr/values.yaml
index 216944d..15171f1 100644
--- a/helm/solr/values.yaml
+++ b/helm/solr/values.yaml
@@ -300,6 +300,8 @@ podOptions:
   # Set Solr service account individually instead of the global 
"serviceAccount.name"
   serviceAccountName: ""
 
+  shareProcessNamespace: false
+
   # Manage where the Solr pods are scheduled
   affinity: {}
   tolerations: []

Reply via email to