This is an automated email from the ASF dual-hosted git repository.
houston 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 b908801 Add support for more ZK Pod options. (#361)
b908801 is described below
commit b908801b36b82cda72cc885040d85f9234aae761
Author: Houston Putman <[email protected]>
AuthorDate: Wed Nov 3 18:39:14 2021 -0400
Add support for more ZK Pod options. (#361)
---
api/v1beta1/solrcloud_types.go | 28 +++++-
api/v1beta1/zz_generated.deepcopy.go | 24 +++++
config/crd/bases/solr.apache.org_solrclouds.yaml | 112 ++++++++++++++++++++++-
controllers/controller_utils_test.go | 3 +-
controllers/solrcloud_controller_zk_test.go | 25 +++--
controllers/util/zk_util.go | 50 +++++++++-
docs/solr-cloud/solr-cloud-crd.md | 5 +
helm/solr-operator/Chart.yaml | 7 ++
helm/solr-operator/crds/crds.yaml | 112 ++++++++++++++++++++++-
helm/solr/README.md | 5 +
10 files changed, 359 insertions(+), 12 deletions(-)
diff --git a/api/v1beta1/solrcloud_types.go b/api/v1beta1/solrcloud_types.go
index e61aa76..692afd4 100644
--- a/api/v1beta1/solrcloud_types.go
+++ b/api/v1beta1/solrcloud_types.go
@@ -764,7 +764,7 @@ type ZookeeperSpec struct {
// +optional
Ephemeral *ZKEphemeral `json:"ephemeral,omitempty"`
- // Pod resources for zookeeper pod
+ // Customization options for the Zookeeper Pod
// +optional
ZookeeperPod ZookeeperPodPolicy `json:"zookeeperPodPolicy,omitempty"`
@@ -980,6 +980,32 @@ type ZookeeperPodPolicy struct {
// Optional Service Account to run the zookeeper pods under.
// +optional
ServiceAccountName string `json:"serviceAccountName,omitempty"`
+
+ // Labels specifies the labels to attach to pods the operator creates
for
+ // the zookeeper cluster.
+ // +optional
+ Labels map[string]string `json:"labels,omitempty"`
+
+ // Annotations specifies the annotations to attach to zookeeper pods
+ // creates.
+ // +optional
+ Annotations map[string]string `json:"annotations,omitempty"`
+
+ // SecurityContext specifies the security context for the entire
zookeeper pod
+ // More info:
https://kubernetes.io/docs/tasks/configure-pod-container/security-context
+ // +optional
+ SecurityContext *corev1.PodSecurityContext
`json:"securityContext,omitempty"`
+
+ // TerminationGracePeriodSeconds is the amount of time that kubernetes
will
+ // give for a zookeeper pod instance to shutdown normally.
+ // The default value is 30.
+ // +optional
+ // +kubebuilder:validation:Minimum=0
+ TerminationGracePeriodSeconds int64
`json:"terminationGracePeriodSeconds,omitempty"`
+
+ // ImagePullSecrets is a list of references to secrets in the same
namespace to use for pulling any images
+ // +optional
+ ImagePullSecrets []corev1.LocalObjectReference
`json:"imagePullSecrets,omitempty"`
}
// SolrCloudStatus defines the observed state of SolrCloud
diff --git a/api/v1beta1/zz_generated.deepcopy.go
b/api/v1beta1/zz_generated.deepcopy.go
index 439ca53..79d356a 100644
--- a/api/v1beta1/zz_generated.deepcopy.go
+++ b/api/v1beta1/zz_generated.deepcopy.go
@@ -1551,6 +1551,30 @@ func (in *ZookeeperPodPolicy) DeepCopyInto(out
*ZookeeperPodPolicy) {
}
}
in.Resources.DeepCopyInto(&out.Resources)
+ if in.Labels != nil {
+ in, out := &in.Labels, &out.Labels
+ *out = make(map[string]string, len(*in))
+ for key, val := range *in {
+ (*out)[key] = val
+ }
+ }
+ if in.Annotations != nil {
+ in, out := &in.Annotations, &out.Annotations
+ *out = make(map[string]string, len(*in))
+ for key, val := range *in {
+ (*out)[key] = val
+ }
+ }
+ if in.SecurityContext != nil {
+ in, out := &in.SecurityContext, &out.SecurityContext
+ *out = new(v1.PodSecurityContext)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.ImagePullSecrets != nil {
+ in, out := &in.ImagePullSecrets, &out.ImagePullSecrets
+ *out = make([]v1.LocalObjectReference, len(*in))
+ copy(*out, *in)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver,
creating a new ZookeeperPodPolicy.
diff --git a/config/crd/bases/solr.apache.org_solrclouds.yaml
b/config/crd/bases/solr.apache.org_solrclouds.yaml
index ec403d2..4af3461 100644
--- a/config/crd/bases/solr.apache.org_solrclouds.yaml
+++ b/config/crd/bases/solr.apache.org_solrclouds.yaml
@@ -6334,7 +6334,7 @@ spec:
format: int32
type: integer
zookeeperPodPolicy:
- description: Pod resources for zookeeper pod
+ description: Customization options for the Zookeeper
Pod
properties:
affinity:
description: The scheduling constraints on pods.
@@ -6677,6 +6677,11 @@ spec:
type: array
type: object
type: object
+ annotations:
+ additionalProperties:
+ type: string
+ description: Annotations specifies the annotations
to attach to zookeeper pods creates.
+ type: object
env:
description: List of environment variables to set
in the main ZK container.
items:
@@ -6757,6 +6762,21 @@ spec:
- name
type: object
type: array
+ imagePullSecrets:
+ description: ImagePullSecrets is a list of
references to secrets in the same namespace to use for pulling any images
+ items:
+ description: LocalObjectReference contains
enough information to let you locate the referenced object inside the same
namespace.
+ properties:
+ name:
+ description: 'Name of the referent. More
info:
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
+ type: string
+ type: object
+ type: array
+ labels:
+ additionalProperties:
+ type: string
+ description: Labels specifies the labels to attach
to pods the operator creates for the zookeeper cluster.
+ type: object
nodeSelector:
additionalProperties:
type: string
@@ -6784,9 +6804,99 @@ spec:
description: 'Requests describes the minimum
amount of compute resources required. If Requests is omitted for a container,
it defaults to Limits if that is explicitly specified, otherwise to an
implementation-defined value. More info:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
type: object
type: object
+ securityContext:
+ description: 'SecurityContext specifies the
security context for the entire zookeeper pod More info:
https://kubernetes.io/docs/tasks/configure-pod-container/security-context'
+ properties:
+ fsGroup:
+ description: "A special supplemental group
that applies to all containers in a pod. Some volume types allow the Kubelet to
change the ownership of that volume to be owned by the pod: \n 1. The owning
GID will be the FSGroup 2. The setgid bit is set (new files created in the
volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----
\n If unset, the Kubelet will not modify the ownership and permissions of any
volume."
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ description: 'fsGroupChangePolicy defines
behavior of changing ownership and permission of the volume before being
exposed inside Pod. This field will only apply to volume types which support
fsGroup based ownership(and permissions). It will have no effect on ephemeral
volume types such as: secret, configmaps and emptydir. Valid values are
"OnRootMismatch" and "Always". If not specified, "Always" is used.'
+ type: string
+ runAsGroup:
+ description: The GID to run the entrypoint of
the container process. Uses runtime default if unset. May also be set in
SecurityContext. If set in both SecurityContext and PodSecurityContext, the
value specified in SecurityContext takes precedence for that container.
+ format: int64
+ type: integer
+ runAsNonRoot:
+ description: Indicates that the container must
run as a non-root user. If true, the Kubelet will validate the image at runtime
to ensure that it does not run as UID 0 (root) and fail to start the container
if it does. If unset or false, no such validation will be performed. May also
be set in SecurityContext. If set in both SecurityContext and
PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: boolean
+ runAsUser:
+ description: The UID to run the entrypoint of
the container process. Defaults to user specified in image metadata if
unspecified. May also be set in SecurityContext. If set in both
SecurityContext and PodSecurityContext, the value specified in SecurityContext
takes precedence for that container.
+ format: int64
+ type: integer
+ seLinuxOptions:
+ description: The SELinux context to be applied
to all containers. If unspecified, the container runtime will allocate a random
SELinux context for each container. May also be set in SecurityContext. If
set in both SecurityContext and PodSecurityContext, the value specified in
SecurityContext takes precedence for that container.
+ properties:
+ level:
+ description: Level is SELinux level label
that applies to the container.
+ type: string
+ role:
+ description: Role is a SELinux role label
that applies to the container.
+ type: string
+ type:
+ description: Type is a SELinux type label
that applies to the container.
+ type: string
+ user:
+ description: User is a SELinux user label
that applies to the container.
+ type: string
+ type: object
+ seccompProfile:
+ description: The seccomp options to use by the
containers in this pod.
+ properties:
+ localhostProfile:
+ description: localhostProfile indicates a
profile defined in a file on the node should be used. The profile must be
preconfigured on the node to work. Must be a descending path, relative to the
kubelet's configured seccomp profile location. Must only be set if type is
"Localhost".
+ type: string
+ type:
+ description: "type indicates which kind of
seccomp profile will be applied. Valid options are: \n Localhost - a profile
defined in a file on the node should be used. RuntimeDefault - the container
runtime default profile should be used. Unconfined - no profile should be
applied."
+ type: string
+ required:
+ - type
+ type: object
+ supplementalGroups:
+ description: A list of groups applied to the
first process run in each container, in addition to the container's primary
GID. If unspecified, no groups will be added to any container.
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ description: Sysctls hold a list of namespaced
sysctls used for the pod. Pods with unsupported sysctls (by the container
runtime) might fail to launch.
+ items:
+ description: Sysctl defines a kernel
parameter to be set
+ properties:
+ name:
+ description: Name of a property to set
+ type: string
+ value:
+ description: Value of a property to set
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ windowsOptions:
+ description: The Windows specific settings
applied to all containers. If unspecified, the options within a container's
SecurityContext will be used. If set in both SecurityContext and
PodSecurityContext, the value specified in SecurityContext takes precedence.
+ properties:
+ gmsaCredentialSpec:
+ description: GMSACredentialSpec is where
the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa)
inlines the contents of the GMSA credential spec named by the
GMSACredentialSpecName field.
+ type: string
+ gmsaCredentialSpecName:
+ description: GMSACredentialSpecName is the
name of the GMSA credential spec to use.
+ type: string
+ runAsUserName:
+ description: The UserName in Windows to
run the entrypoint of the container process. Defaults to the user specified in
image metadata if unspecified. May also be set in PodSecurityContext. If set in
both SecurityContext and PodSecurityContext, the value specified in
SecurityContext takes precedence.
+ type: string
+ type: object
+ type: object
serviceAccountName:
description: Optional Service Account to run the
zookeeper pods under.
type: string
+ terminationGracePeriodSeconds:
+ description: TerminationGracePeriodSeconds is the
amount of time that kubernetes will give for a zookeeper pod instance to
shutdown normally. The default value is 30.
+ format: int64
+ minimum: 0
+ type: integer
tolerations:
description: Tolerations to be added on pods.
items:
diff --git a/controllers/controller_utils_test.go
b/controllers/controller_utils_test.go
index 72b10d8..d7e7299 100644
--- a/controllers/controller_utils_test.go
+++ b/controllers/controller_utils_test.go
@@ -26,7 +26,6 @@ import (
zk_api "github.com/apache/solr-operator/controllers/zk_api"
"golang.org/x/net/context"
appsv1 "k8s.io/api/apps/v1"
- batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
netv1 "k8s.io/api/networking/v1"
"k8s.io/apimachinery/pkg/api/resource"
@@ -638,7 +637,7 @@ func cleanupTest(ctx context.Context, parentResource
client.Object) {
&zk_api.ZookeeperCluster{},
// All dependent Kubernetes types, in order of dependence
(deployment then replicaSet then pod)
- &corev1.ConfigMap{}, &batchv1.Job{}, &netv1.Ingress{},
+ &corev1.ConfigMap{}, &netv1.Ingress{},
&corev1.PersistentVolumeClaim{}, &corev1.PersistentVolume{},
&appsv1.StatefulSet{}, &appsv1.Deployment{},
&appsv1.ReplicaSet{}, &corev1.Pod{}, &corev1.PersistentVolumeClaim{},
&corev1.Secret{},
diff --git a/controllers/solrcloud_controller_zk_test.go
b/controllers/solrcloud_controller_zk_test.go
index fcd8511..898a5f8 100644
--- a/controllers/solrcloud_controller_zk_test.go
+++ b/controllers/solrcloud_controller_zk_test.go
@@ -48,6 +48,8 @@ var _ = FDescribe("SolrCloud controller - Zookeeper", func() {
},
Spec: solrv1beta1.SolrCloudSpec{},
}
+
+ cleanupTest(ctx, solrCloud)
})
JustBeforeEach(func() {
@@ -194,18 +196,24 @@ var _ = FDescribe("SolrCloud controller - Zookeeper",
func() {
ZookeeperRef: &solrv1beta1.ZookeeperRef{
ProvidedZookeeper:
&solrv1beta1.ZookeeperSpec{
Replicas: &four,
+ Image:
&solrv1beta1.ContainerImage{ImagePullSecret: testImagePullSecretName},
Ephemeral:
&solrv1beta1.ZKEphemeral{
EmptyDirVolumeSource:
corev1.EmptyDirVolumeSource{
Medium:
"Memory",
},
},
ZookeeperPod:
solrv1beta1.ZookeeperPodPolicy{
- Affinity:
testAffinity,
- NodeSelector:
testNodeSelectors,
- Tolerations:
testTolerations,
- Env:
extraVars,
- Resources:
testResources,
- ServiceAccountName:
testServiceAccountName,
+ Affinity:
testAffinity,
+ NodeSelector:
testNodeSelectors,
+ Tolerations:
testTolerations,
+ Env:
extraVars,
+ Resources:
testResources,
+ ServiceAccountName:
testServiceAccountName,
+ Labels:
testSSLabels,
+ Annotations:
testSSAnnotations,
+ SecurityContext:
&testPodSecurityContext,
+
TerminationGracePeriodSeconds: testTerminationGracePeriodSeconds,
+ ImagePullSecrets:
testAdditionalImagePullSecrets,
},
Config: zkConf,
ChRoot: "a-ch/root",
@@ -272,6 +280,11 @@ var _ = FDescribe("SolrCloud controller - Zookeeper",
func() {
Expect(zkCluster.Spec.Pod.Resources).To(Equal(testResources), "Incorrect
zkCluster resources")
Expect(zkCluster.Spec.Pod.Env).To(Equal(extraVars),
"Incorrect zkCluster env vars")
Expect(zkCluster.Spec.Pod.ServiceAccountName).To(Equal(testServiceAccountName),
"Incorrect zkCluster serviceAccountName")
+
Expect(zkCluster.Spec.Pod.Labels).To(Equal(util.MergeLabelsOrAnnotations(testSSLabels,
map[string]string{"app": "foo-solrcloud-zookeeper", "release":
"foo-solrcloud-zookeeper"})), "Incorrect zkCluster pod labels")
+
Expect(zkCluster.Spec.Pod.Annotations).To(Equal(testSSAnnotations), "Incorrect
zkCluster pod annotations")
+
Expect(zkCluster.Spec.Pod.SecurityContext).To(Equal(&testPodSecurityContext),
"Incorrect zkCluster pod securityContext")
+
Expect(zkCluster.Spec.Pod.TerminationGracePeriodSeconds).To(Equal(testTerminationGracePeriodSeconds),
"Incorrect zkCluster pod terminationGracePeriodSeconds")
+
Expect(zkCluster.Spec.Pod.ImagePullSecrets).To(Equal(append(append(make([]corev1.LocalObjectReference,
0), testAdditionalImagePullSecrets...), corev1.LocalObjectReference{Name:
testImagePullSecretName})), "Incorrect zkCluster imagePullSecrets")
// Check ZK Config Options
Expect(zkCluster.Spec.Conf.InitLimit).To(Equal(zkConf.InitLimit), "Incorrect
zkCluster Config InitLimit")
diff --git a/controllers/util/zk_util.go b/controllers/util/zk_util.go
index 01fefd8..980a42f 100644
--- a/controllers/util/zk_util.go
+++ b/controllers/util/zk_util.go
@@ -123,8 +123,32 @@ func GenerateZookeeperCluster(solrCloud
*solrv1beta1.SolrCloud, zkSpec *solrv1be
zkCluster.Spec.Pod.ServiceAccountName =
zkSpec.ZookeeperPod.ServiceAccountName
}
+ if len(zkSpec.ZookeeperPod.Labels) > 0 {
+ zkCluster.Spec.Pod.Labels = zkSpec.ZookeeperPod.Labels
+ }
+
+ if len(zkSpec.ZookeeperPod.Annotations) > 0 {
+ zkCluster.Spec.Pod.Annotations = zkSpec.ZookeeperPod.Annotations
+ }
+
+ if zkSpec.ZookeeperPod.SecurityContext != nil {
+ zkCluster.Spec.Pod.SecurityContext =
zkSpec.ZookeeperPod.SecurityContext
+ }
+
+ if zkSpec.ZookeeperPod.TerminationGracePeriodSeconds != 0 {
+ zkCluster.Spec.Pod.TerminationGracePeriodSeconds =
zkSpec.ZookeeperPod.TerminationGracePeriodSeconds
+ }
+
+ if len(zkSpec.ZookeeperPod.ImagePullSecrets) > 0 {
+ zkCluster.Spec.Pod.ImagePullSecrets =
zkSpec.ZookeeperPod.ImagePullSecrets
+ }
+
if zkSpec.Image.ImagePullSecret != "" {
- zkCluster.Spec.Pod.ImagePullSecrets =
[]corev1.LocalObjectReference{{Name: zkSpec.Image.ImagePullSecret}}
+ if len(zkSpec.ZookeeperPod.ImagePullSecrets) > 0 {
+ zkCluster.Spec.Pod.ImagePullSecrets =
append(zkCluster.Spec.Pod.ImagePullSecrets, corev1.LocalObjectReference{Name:
zkSpec.Image.ImagePullSecret})
+ } else {
+ zkCluster.Spec.Pod.ImagePullSecrets =
[]corev1.LocalObjectReference{{Name: zkSpec.Image.ImagePullSecret}}
+ }
}
// Add defaults that the ZK Operator should set itself, otherwise we
will have problems with reconcile loops.
@@ -295,6 +319,30 @@ func CopyZookeeperClusterFields(from, to
*zk_api.ZookeeperCluster, logger logr.L
to.Spec.Pod.ServiceAccountName =
from.Spec.Pod.ServiceAccountName
}
+ if !DeepEqualWithNils(to.Spec.Pod.Labels, from.Spec.Pod.Labels) {
+ logger.Info("Update required because field changed", "field",
"Spec.Pod.Labels", "from", to.Spec.Pod.Labels, "to", from.Spec.Pod.Labels)
+ requireUpdate = true
+ to.Spec.Pod.Labels = from.Spec.Pod.Labels
+ }
+
+ if !DeepEqualWithNils(to.Spec.Pod.Annotations,
from.Spec.Pod.Annotations) {
+ logger.Info("Update required because field changed", "field",
"Spec.Pod.Annotations", "from", to.Spec.Pod.Annotations, "to",
from.Spec.Pod.Annotations)
+ requireUpdate = true
+ to.Spec.Pod.Annotations = from.Spec.Pod.Annotations
+ }
+
+ if !DeepEqualWithNils(to.Spec.Pod.SecurityContext,
from.Spec.Pod.SecurityContext) {
+ logger.Info("Update required because field changed", "field",
"Spec.Pod.SecurityContext", "from", to.Spec.Pod.SecurityContext, "to",
from.Spec.Pod.SecurityContext)
+ requireUpdate = true
+ to.Spec.Pod.SecurityContext = from.Spec.Pod.SecurityContext
+ }
+
+ if !DeepEqualWithNils(to.Spec.Pod.TerminationGracePeriodSeconds,
from.Spec.Pod.TerminationGracePeriodSeconds) {
+ logger.Info("Update required because field changed", "field",
"Spec.Pod.TerminationGracePeriodSeconds", "from",
to.Spec.Pod.TerminationGracePeriodSeconds, "to",
from.Spec.Pod.TerminationGracePeriodSeconds)
+ requireUpdate = true
+ to.Spec.Pod.TerminationGracePeriodSeconds =
from.Spec.Pod.TerminationGracePeriodSeconds
+ }
+
if !DeepEqualWithNils(to.Spec.Pod.ImagePullSecrets,
from.Spec.Pod.ImagePullSecrets) {
logger.Info("Update required because field changed", "field",
"Spec.Pod.ImagePullSecrets", "from", to.Spec.Pod.ImagePullSecrets, "to",
from.Spec.Pod.ImagePullSecrets)
requireUpdate = true
diff --git a/docs/solr-cloud/solr-cloud-crd.md
b/docs/solr-cloud/solr-cloud-crd.md
index 20c108b..6d9c7a0 100644
--- a/docs/solr-cloud/solr-cloud-crd.md
+++ b/docs/solr-cloud/solr-cloud-crd.md
@@ -187,6 +187,11 @@ each solrCloud that has this option specified.
The startup parameter `zookeeper-operator` must be provided on startup of the
solr-operator for this parameter to be available.
+To find all Provided zookeeper options, run `kubectl explain
solrcloud.spec.zookeeperRef.provided`.
+Zookeeper Conf and PodOptions provided in the linked Zookeeper Operator
version should be supported in the SolrCloud CRD.
+However, this is a manual task, so not all options might be available.
+If there is an option available in the ZookeeperCluster CRD that is not
exposed via the SolrCloud CRD, please create a Github Issue.
+
#### Zookeeper Storage Options
_Since v0.4.0_
diff --git a/helm/solr-operator/Chart.yaml b/helm/solr-operator/Chart.yaml
index ae80f5b..4f9bd1b 100644
--- a/helm/solr-operator/Chart.yaml
+++ b/helm/solr-operator/Chart.yaml
@@ -169,6 +169,13 @@ annotations:
url: https://github.com/apache/solr-operator/issues/347
- name: Github PR
url: https://github.com/apache/solr-operator/pull/357
+ - kind: added
+ description: Support for more Zookeeper Pod customization options
+ links:
+ - name: Github Issue
+ url: https://github.com/apache/solr-operator/issues/352
+ - name: Github PR
+ url: https://github.com/apache/solr-operator/pull/361
artifacthub.io/images: |
- name: solr-operator
image: apache/solr-operator:v0.5.0-prerelease
diff --git a/helm/solr-operator/crds/crds.yaml
b/helm/solr-operator/crds/crds.yaml
index 409fca0..a2d4ccd 100644
--- a/helm/solr-operator/crds/crds.yaml
+++ b/helm/solr-operator/crds/crds.yaml
@@ -7468,7 +7468,7 @@ spec:
format: int32
type: integer
zookeeperPodPolicy:
- description: Pod resources for zookeeper pod
+ description: Customization options for the Zookeeper
Pod
properties:
affinity:
description: The scheduling constraints on pods.
@@ -7811,6 +7811,11 @@ spec:
type: array
type: object
type: object
+ annotations:
+ additionalProperties:
+ type: string
+ description: Annotations specifies the annotations
to attach to zookeeper pods creates.
+ type: object
env:
description: List of environment variables to set
in the main ZK container.
items:
@@ -7891,6 +7896,21 @@ spec:
- name
type: object
type: array
+ imagePullSecrets:
+ description: ImagePullSecrets is a list of
references to secrets in the same namespace to use for pulling any images
+ items:
+ description: LocalObjectReference contains
enough information to let you locate the referenced object inside the same
namespace.
+ properties:
+ name:
+ description: 'Name of the referent. More
info:
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
+ type: string
+ type: object
+ type: array
+ labels:
+ additionalProperties:
+ type: string
+ description: Labels specifies the labels to attach
to pods the operator creates for the zookeeper cluster.
+ type: object
nodeSelector:
additionalProperties:
type: string
@@ -7918,9 +7938,99 @@ spec:
description: 'Requests describes the minimum
amount of compute resources required. If Requests is omitted for a container,
it defaults to Limits if that is explicitly specified, otherwise to an
implementation-defined value. More info:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
type: object
type: object
+ securityContext:
+ description: 'SecurityContext specifies the
security context for the entire zookeeper pod More info:
https://kubernetes.io/docs/tasks/configure-pod-container/security-context'
+ properties:
+ fsGroup:
+ description: "A special supplemental group
that applies to all containers in a pod. Some volume types allow the Kubelet to
change the ownership of that volume to be owned by the pod: \n 1. The owning
GID will be the FSGroup 2. The setgid bit is set (new files created in the
volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----
\n If unset, the Kubelet will not modify the ownership and permissions of any
volume."
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ description: 'fsGroupChangePolicy defines
behavior of changing ownership and permission of the volume before being
exposed inside Pod. This field will only apply to volume types which support
fsGroup based ownership(and permissions). It will have no effect on ephemeral
volume types such as: secret, configmaps and emptydir. Valid values are
"OnRootMismatch" and "Always". If not specified, "Always" is used.'
+ type: string
+ runAsGroup:
+ description: The GID to run the entrypoint of
the container process. Uses runtime default if unset. May also be set in
SecurityContext. If set in both SecurityContext and PodSecurityContext, the
value specified in SecurityContext takes precedence for that container.
+ format: int64
+ type: integer
+ runAsNonRoot:
+ description: Indicates that the container must
run as a non-root user. If true, the Kubelet will validate the image at runtime
to ensure that it does not run as UID 0 (root) and fail to start the container
if it does. If unset or false, no such validation will be performed. May also
be set in SecurityContext. If set in both SecurityContext and
PodSecurityContext, the value specified in SecurityContext takes precedence.
+ type: boolean
+ runAsUser:
+ description: The UID to run the entrypoint of
the container process. Defaults to user specified in image metadata if
unspecified. May also be set in SecurityContext. If set in both
SecurityContext and PodSecurityContext, the value specified in SecurityContext
takes precedence for that container.
+ format: int64
+ type: integer
+ seLinuxOptions:
+ description: The SELinux context to be applied
to all containers. If unspecified, the container runtime will allocate a random
SELinux context for each container. May also be set in SecurityContext. If
set in both SecurityContext and PodSecurityContext, the value specified in
SecurityContext takes precedence for that container.
+ properties:
+ level:
+ description: Level is SELinux level label
that applies to the container.
+ type: string
+ role:
+ description: Role is a SELinux role label
that applies to the container.
+ type: string
+ type:
+ description: Type is a SELinux type label
that applies to the container.
+ type: string
+ user:
+ description: User is a SELinux user label
that applies to the container.
+ type: string
+ type: object
+ seccompProfile:
+ description: The seccomp options to use by the
containers in this pod.
+ properties:
+ localhostProfile:
+ description: localhostProfile indicates a
profile defined in a file on the node should be used. The profile must be
preconfigured on the node to work. Must be a descending path, relative to the
kubelet's configured seccomp profile location. Must only be set if type is
"Localhost".
+ type: string
+ type:
+ description: "type indicates which kind of
seccomp profile will be applied. Valid options are: \n Localhost - a profile
defined in a file on the node should be used. RuntimeDefault - the container
runtime default profile should be used. Unconfined - no profile should be
applied."
+ type: string
+ required:
+ - type
+ type: object
+ supplementalGroups:
+ description: A list of groups applied to the
first process run in each container, in addition to the container's primary
GID. If unspecified, no groups will be added to any container.
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ description: Sysctls hold a list of namespaced
sysctls used for the pod. Pods with unsupported sysctls (by the container
runtime) might fail to launch.
+ items:
+ description: Sysctl defines a kernel
parameter to be set
+ properties:
+ name:
+ description: Name of a property to set
+ type: string
+ value:
+ description: Value of a property to set
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ windowsOptions:
+ description: The Windows specific settings
applied to all containers. If unspecified, the options within a container's
SecurityContext will be used. If set in both SecurityContext and
PodSecurityContext, the value specified in SecurityContext takes precedence.
+ properties:
+ gmsaCredentialSpec:
+ description: GMSACredentialSpec is where
the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa)
inlines the contents of the GMSA credential spec named by the
GMSACredentialSpecName field.
+ type: string
+ gmsaCredentialSpecName:
+ description: GMSACredentialSpecName is the
name of the GMSA credential spec to use.
+ type: string
+ runAsUserName:
+ description: The UserName in Windows to
run the entrypoint of the container process. Defaults to the user specified in
image metadata if unspecified. May also be set in PodSecurityContext. If set in
both SecurityContext and PodSecurityContext, the value specified in
SecurityContext takes precedence.
+ type: string
+ type: object
+ type: object
serviceAccountName:
description: Optional Service Account to run the
zookeeper pods under.
type: string
+ terminationGracePeriodSeconds:
+ description: TerminationGracePeriodSeconds is the
amount of time that kubernetes will give for a zookeeper pod instance to
shutdown normally. The default value is 30.
+ format: int64
+ minimum: 0
+ type: integer
tolerations:
description: Tolerations to be added on pods.
items:
diff --git a/helm/solr/README.md b/helm/solr/README.md
index 07edb9a..0871e66 100644
--- a/helm/solr/README.md
+++ b/helm/solr/README.md
@@ -174,6 +174,8 @@ Currently the Zookeeper Operator does not support ACLs, so
do not use the provid
| zk.provided.persistence.annotations | object | | Annotations to use for the
ZooKeeper PVC(s) |
| zk.provided.ephemeral.emptydirvolumesource | object | | An emptyDir volume
source for the ZooKeeper Storage on each pod. |
| zk.provided.config | object | | Zookeeper Config Options to set for the
provided cluster. For all possible options, run: `kubectl explain
solrcloud.spec.zookeeperRef.provided.config` |
+| zk.provided.zookeeperPodPolicy.labels | map[string]string | | List of
additional labels to add to the Zookeeper pod |
+| zk.provided.zookeeperPodPolicy.annotations | map[string]string | | List of
additional annotations to add to the Zookeeper pod |
| zk.provided.zookeeperPodPolicy.serviceAccountName | string | | Optional
serviceAccount to run the ZK Pod under |
| zk.provided.zookeeperPodPolicy.affinity | string | | PullSecret for the
ZooKeeper image |
| zk.provided.zookeeperPodPolicy.resources.limits | map[string]string | |
Provide Resource limits for the ZooKeeper containers |
@@ -182,6 +184,9 @@ Currently the Zookeeper Operator does not support ACLs, so
do not use the provid
| zk.provided.zookeeperPodPolicy.affinity | object | | Add Kubernetes
affinity information for the ZooKeeper pod |
| zk.provided.zookeeperPodPolicy.tolerations | []object | | Specify a list of
Kubernetes tolerations for the ZooKeeper pod |
| zk.provided.zookeeperPodPolicy.envVars | []object | | List of additional
environment variables for the ZooKeeper container |
+| zk.provided.zookeeperPodPolicy.securityContext | object | | Security
context for the entire ZooKeeper pod. More information can be found in the
[Kubernetes docs](More info:
https://kubernetes.io/docs/tasks/configure-pod-container/security-context). |
+| zk.provided.zookeeperPodPolicy.terminationGracePeriodSeconds | int | `30` |
The amount of time that Kubernetes will give for a zookeeper pod instance to
shutdown normally. |
+| zk.provided.zookeeperPodPolicy.imagePullSecrets | []object | | List of
image pull secrets to inject into the Zookeeper pod. |
| zk.acl.secret | string | | Name of a secret in the same namespace as the
Solr cloud that stores the ZK admin ACL information |
| zk.acl.usernameKey | string | | Key in the Admin ACL Secret that stores the
ACL username |
| zk.acl.passwordKey | string | | Key in the Admin ACL Secret that stores the
ACL password |