From 55a2ea3d7ccc11a2fb3a60c0d8ecefdb58c3e23a Mon Sep 17 00:00:00 2001 From: lamai93 Date: Mon, 29 Apr 2019 17:09:26 +0200 Subject: [PATCH] Added user sidecars. --- pkg/apis/deployment/v1alpha/server_group_spec.go | 7 +++++++ .../deployment/v1alpha/zz_generated.deepcopy.go | 7 +++++++ pkg/deployment/images.go | 2 +- pkg/deployment/resources/pod_creator.go | 4 ++-- pkg/util/k8sutil/pods.go | 14 ++++++++++++-- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/pkg/apis/deployment/v1alpha/server_group_spec.go b/pkg/apis/deployment/v1alpha/server_group_spec.go index 6017c7dab..2ffd5764f 100644 --- a/pkg/apis/deployment/v1alpha/server_group_spec.go +++ b/pkg/apis/deployment/v1alpha/server_group_spec.go @@ -60,6 +60,8 @@ type ServerGroupSpec struct { Probes *ServerGroupProbesSpec `json:"probes,omitempty"` // PriorityClassName specifies a priority class name PriorityClassName string `json:"priorityClassName,omitempty"` + // Sidecars specifies a list of additional containers to be started + Sidecars []v1.Container `json:"sidecars,omitempty"` } // ServerGroupProbesSpec contains specification for probes for pods of the server group @@ -84,6 +86,11 @@ type ServerGroupProbesSpec struct { // return s.ReadinessProbeOverride != nil // } +// GetSidecars returns a list of sidecars the use wish to add +func (s ServerGroupSpec) GetSidecars() []v1.Container { + return s.Sidecars +} + // IsLivenessProbeDisabled returns true if liveness probes are disabled func (s ServerGroupProbesSpec) IsLivenessProbeDisabled() bool { return util.BoolOrDefault(s.LivenessProbeDisabled) diff --git a/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go b/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go index aa3c924be..7db327c41 100644 --- a/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go @@ -823,6 +823,13 @@ func (in *ServerGroupSpec) DeepCopyInto(out *ServerGroupSpec) { *out = new(ServerGroupProbesSpec) (*in).DeepCopyInto(*out) } + if in.Sidecars != nil { + in, out := &in.Sidecars, &out.Sidecars + *out = make([]v1.Container, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/pkg/deployment/images.go b/pkg/deployment/images.go index 82e5cceec..f8461aefe 100644 --- a/pkg/deployment/images.go +++ b/pkg/deployment/images.go @@ -198,7 +198,7 @@ func (ib *imagesBuilder) fetchArangoDBImageIDAndVersion(ctx context.Context, ima } } if err := k8sutil.CreateArangodPod(ib.KubeCli, true, ib.APIObject, role, id, podName, "", image, "", "", ib.Spec.GetImagePullPolicy(), "", false, terminationGracePeriod, args, env, nil, nil, nil, - tolerations, serviceAccountName, "", "", "", nil, "", v1.ResourceRequirements{}, nil); err != nil { + tolerations, serviceAccountName, "", "", "", nil, "", v1.ResourceRequirements{}, nil, nil); err != nil { log.Debug().Err(err).Msg("Failed to create image ID pod") return true, maskAny(err) } diff --git a/pkg/deployment/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index cc5919ace..6eefdaaff 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -660,7 +660,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, finalizers := r.createPodFinalizers(group) if err := k8sutil.CreateArangodPod(kubecli, spec.IsDevelopment(), apiObject, role, m.ID, m.PodName, m.PersistentVolumeClaimName, imageInfo.ImageID, lifecycleImage, alpineImage, spec.GetImagePullPolicy(), engine, requireUUID, terminationGracePeriod, args, env, finalizers, livenessProbe, readinessProbe, tolerations, serviceAccountName, tlsKeyfileSecretName, rocksdbEncryptionSecretName, - clusterJWTSecretName, groupSpec.GetNodeSelector(), groupSpec.PriorityClassName, groupSpec.Resources, exporter); err != nil { + clusterJWTSecretName, groupSpec.GetNodeSelector(), groupSpec.PriorityClassName, groupSpec.Resources, exporter, groupSpec.GetSidecars()); err != nil { return maskAny(err) } log.Debug().Str("pod-name", m.PodName).Msg("Created pod") @@ -743,7 +743,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string, } if err := k8sutil.CreateArangoSyncPod(kubecli, spec.IsDevelopment(), apiObject, role, m.ID, m.PodName, imageID, lifecycleImage, spec.GetImagePullPolicy(), terminationGracePeriod, args, env, livenessProbe, tolerations, serviceAccountName, tlsKeyfileSecretName, clientAuthCASecretName, masterJWTSecretName, clusterJWTSecretName, affinityWithRole, groupSpec.GetNodeSelector(), - groupSpec.PriorityClassName, groupSpec.Resources); err != nil { + groupSpec.PriorityClassName, groupSpec.Resources, groupSpec.GetSidecars()); err != nil { return maskAny(err) } log.Debug().Str("pod-name", m.PodName).Msg("Created pod") diff --git a/pkg/util/k8sutil/pods.go b/pkg/util/k8sutil/pods.go index 3cbd7b3e3..dc794ec37 100644 --- a/pkg/util/k8sutil/pods.go +++ b/pkg/util/k8sutil/pods.go @@ -530,7 +530,7 @@ func CreateArangodPod(kubecli kubernetes.Interface, developmentMode bool, deploy args []string, env map[string]EnvValue, finalizers []string, livenessProbe *HTTPProbeConfig, readinessProbe *HTTPProbeConfig, tolerations []v1.Toleration, serviceAccountName string, tlsKeyfileSecretName, rocksdbEncryptionSecretName string, clusterJWTSecretName string, nodeSelector map[string]string, - podPriorityClassName string, resources v1.ResourceRequirements, exporter *ArangodbExporterContainerConf) error { + podPriorityClassName string, resources v1.ResourceRequirements, exporter *ArangodbExporterContainerConf, sidecars []v1.Container) error { // Prepare basic pod p := newPod(deployment.GetName(), deployment.GetNamespace(), role, id, podName, finalizers, tolerations, serviceAccountName, nodeSelector) terminationGracePeriodSeconds := int64(math.Ceil(terminationGracePeriod.Seconds())) @@ -579,6 +579,11 @@ func CreateArangodPod(kubecli kubernetes.Interface, developmentMode bool, deploy p.Labels[LabelKeyArangoExporter] = "yes" } + // Add sidecars + if len(sidecars) > 0 { + p.Spec.Containers = append(p.Spec.Containers, sidecars...) + } + // Add priorityClassName p.Spec.PriorityClassName = podPriorityClassName @@ -680,7 +685,7 @@ func CreateArangodPod(kubecli kubernetes.Interface, developmentMode bool, deploy func CreateArangoSyncPod(kubecli kubernetes.Interface, developmentMode bool, deployment APIObject, role, id, podName, image, lifecycleImage string, imagePullPolicy v1.PullPolicy, terminationGracePeriod time.Duration, args []string, env map[string]EnvValue, livenessProbe *HTTPProbeConfig, tolerations []v1.Toleration, serviceAccountName string, tlsKeyfileSecretName, clientAuthCASecretName, masterJWTSecretName, clusterJWTSecretName, affinityWithRole string, nodeSelector map[string]string, - podPriorityClassName string, resources v1.ResourceRequirements) error { + podPriorityClassName string, resources v1.ResourceRequirements, sidecars []v1.Container) error { // Prepare basic pod p := newPod(deployment.GetName(), deployment.GetNamespace(), role, id, podName, nil, tolerations, serviceAccountName, nodeSelector) terminationGracePeriodSeconds := int64(math.Ceil(terminationGracePeriod.Seconds())) @@ -721,6 +726,11 @@ func CreateArangoSyncPod(kubecli kubernetes.Interface, developmentMode bool, dep } p.Spec.Containers = append(p.Spec.Containers, c) + // Add sidecars + if len(sidecars) > 0 { + p.Spec.Containers = append(p.Spec.Containers, sidecars...) + } + // Add priorityClassName p.Spec.PriorityClassName = podPriorityClassName