Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

init container support #62

Merged
merged 4 commits into from
May 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apis/druid/v1alpha1/druid_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ import (
type AdditionalContainer struct {
// List of configurations to use which are not present or to override default implementation configurations

// +optional
RunAsInit bool `json:"runAsInit"`
// This is the image for the additional container to run.
// +required
Image string `json:"image"`
Expand Down
2 changes: 2 additions & 0 deletions chart/templates/crds/druid.apache.org_druids.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ spec:
https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
type: object
type: object
runAsInit:
type: boolean
securityContext:
description: ContainerSecurityContext. If not present, will
be taken from top level pod
Expand Down
2 changes: 2 additions & 0 deletions config/crd/bases/druid.apache.org_druids.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ spec:
https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
type: object
type: object
runAsInit:
type: boolean
securityContext:
description: ContainerSecurityContext. If not present, will
be taken from top level pod
Expand Down
2 changes: 2 additions & 0 deletions config/druid.apache.org_druids.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ spec:
https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
type: object
type: object
runAsInit:
type: boolean
securityContext:
description: ContainerSecurityContext. If not present, will
be taken from top level pod
Expand Down
10 changes: 5 additions & 5 deletions controllers/druid/druid_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
appsv1 "k8s.io/api/apps/v1"
autoscalev2 "k8s.io/api/autoscaling/v2"
v1 "k8s.io/api/core/v1"
netv1 "k8s.io/api/networking/v1"
policyv1 "k8s.io/api/policy/v1"
"k8s.io/apimachinery/pkg/types"
autoscalev2 "k8s.io/api/autoscaling/v2"
)

// +kubebuilder:docs-gen:collapse=Imports

/*
testDruidOperator
testDruidOperator
*/
var _ = Describe("Druid Operator", func() {

Expand Down Expand Up @@ -282,7 +282,7 @@ var _ = Describe("Druid Operator", func() {
configMapName := fmt.Sprintf("druid-%s-%s-config", druidCR.Name, componentName)
configMapNamespacedName := types.NamespacedName{Name: configMapName, Namespace: druidCR.Namespace}
runtimeProperties := fmt.Sprintf("druid.port=%d\n%s", druidCR.Spec.Nodes[componentName].DruidPort, druidCR.Spec.Nodes[componentName].RuntimeProperties)
jvmConfig := fmt.Sprintf("%s\n%s", druidCR.Spec.JvmOptions ,druidCR.Spec.Nodes[componentName].ExtraJvmOptions)
jvmConfig := fmt.Sprintf("%s\n%s", druidCR.Spec.JvmOptions, druidCR.Spec.Nodes[componentName].ExtraJvmOptions)
// Checking the kubernetes service Type
By(fmt.Sprintf("By checking configmap check for %s config", configMapName))
Eventually(func() bool {
Expand Down Expand Up @@ -314,7 +314,7 @@ var _ = Describe("Druid Operator", func() {
Expect(createdHpa.Spec.MinReplicas).To(Equal(druidCR.Spec.Nodes[componentName].HPAutoScaler.MinReplicas))
// check for ScaleTargetRef
Expect(createdHpa.Spec.ScaleTargetRef).To(Equal(druidCR.Spec.Nodes[componentName].HPAutoScaler.ScaleTargetRef))
})
})

})
})
Expand All @@ -330,4 +330,4 @@ func areStringArraysEqual(a1, a2 []string) bool {
return false
}
return true
}
}
50 changes: 34 additions & 16 deletions controllers/druid/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -1311,28 +1311,46 @@ func makePodSpec(nodeSpec *v1alpha1.DruidNodeSpec, m *v1alpha1.Druid, nodeSpecUn
},
)

if m.Spec.AdditionalContainer != nil {
var initContainer []v1.Container

if m.Spec.AdditionalContainer != nil {
for _, containerList := range m.Spec.AdditionalContainer {

containers = append(containers,
v1.Container{
Image: containerList.Image,
Name: containerList.ContainerName,
Resources: containerList.Resources,
VolumeMounts: containerList.VolumeMounts,
Command: containerList.Command,
Args: containerList.Args,
ImagePullPolicy: containerList.ImagePullPolicy,
SecurityContext: containerList.ContainerSecurityContext,
Env: containerList.Env,
EnvFrom: containerList.EnvFrom,
},
)
if containerList.RunAsInit {
initContainer = append(initContainer,
v1.Container{
Image: containerList.Image,
Name: containerList.ContainerName,
Resources: containerList.Resources,
VolumeMounts: containerList.VolumeMounts,
Command: containerList.Command,
Args: containerList.Args,
ImagePullPolicy: containerList.ImagePullPolicy,
SecurityContext: containerList.ContainerSecurityContext,
Env: containerList.Env,
EnvFrom: containerList.EnvFrom,
},
)
} else {
containers = append(containers,
v1.Container{
Image: containerList.Image,
Name: containerList.ContainerName,
Resources: containerList.Resources,
VolumeMounts: containerList.VolumeMounts,
Command: containerList.Command,
Args: containerList.Args,
ImagePullPolicy: containerList.ImagePullPolicy,
SecurityContext: containerList.ContainerSecurityContext,
Env: containerList.Env,
EnvFrom: containerList.EnvFrom,
},
)
}
}
}

spec := v1.PodSpec{
InitContainers: initContainer,
NodeSelector: firstNonNilValue(nodeSpec.NodeSelector, m.Spec.NodeSelector).(map[string]string),
TopologySpreadConstraints: getTopologySpreadConstraints(nodeSpec),
Tolerations: getTolerations(nodeSpec, m),
Expand Down
2 changes: 1 addition & 1 deletion controllers/druid/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
// +kubebuilder:docs-gen:collapse=Imports

/*
util test
util test
*/
var _ = Describe("Test util", func() {
Context("When testing util", func() {
Expand Down
2 changes: 1 addition & 1 deletion controllers/druid/zookeeper_dep_mgmt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
// +kubebuilder:docs-gen:collapse=Imports

/*
zookeeper_dep_mgmt_test
zookeeper_dep_mgmt_test
*/
var _ = Describe("Test zookeeper dep mgmt", func() {
Context("When testing zookeeper dep mgmt", func() {
Expand Down
27 changes: 27 additions & 0 deletions e2e/configs/druid-cr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,23 @@ spec:
httpGet:
path: /status/health
port: 8088
additionalContainer:
- containerName: mysqlconnector
runAsInit: true
image: apache/druid:25.0.0
command:
- "sh"
- "-c"
- "wget -O /tmp/mysql-connector-j-8.0.32.tar.gz https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.0.32.tar.gz && cd /tmp && tar -xf /tmp/mysql-connector-j-8.0.32.tar.gz && cp /tmp/mysql-connector-j-8.0.32/mysql-connector-j-8.0.32.jar /opt/druid/extensions/mysql-connector/mysql-connector-java.jar"
volumeMounts:
- name: mysqlconnector
mountPath: "/opt/druid/extensions/mysql-connector"
volumes:
- name: mysqlconnector
emptyDir: {}
volumeMounts:
- name: mysqlconnector
mountPath: "/opt/druid/extensions/mysql-connector"
securityContext:
fsGroup: 0
runAsUser: 0
Expand Down Expand Up @@ -118,6 +135,16 @@ spec:
clusterIP: None
nodeConfigMountPath: "/opt/druid/conf/druid/cluster/query/broker"
replicas: 1
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: standard
runtime.properties: |
druid.service=druid/broker
# HTTP server threads
Expand Down