From de71b1bbef792163b3b3581667d0418bd68bac74 Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Thu, 31 Aug 2023 09:54:03 +0000 Subject: [PATCH 1/7] add initcontainer to support set system parameters --- api/doris/v1/types.go | 3 ++ api/doris/v1/zz_generated.deepcopy.go | 5 ++++ .../doris.selectdb.com_dorisclusters.yaml | 21 ++++++++++++++ .../doriscluster-sample-system-params.yaml | 18 ++++++++++++ pkg/common/utils/resource/pod.go | 28 +++++++++++++++++++ pkg/controller/sub_controller/be/pod.go | 12 +++++++- pkg/controller/sub_controller/cn/pod.go | 20 +++++++++---- pkg/controller/sub_controller/fe/pod.go | 6 +++- 8 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 doc/examples/doriscluster-sample-system-params.yaml diff --git a/api/doris/v1/types.go b/api/doris/v1/types.go index 341c217e..8ff44dc3 100644 --- a/api/doris/v1/types.go +++ b/api/doris/v1/types.go @@ -174,6 +174,9 @@ type BaseSpec struct { HostAliases []corev1.HostAlias `json:"hostAliases,omitempty"` PersistentVolumes []PersistentVolume `json:"persistentVolumes,omitempty"` + + //SystemParameters for be and cn setting system parameters. + SystemParameters []string `json:"systemParameters,omitempty"` } // PersistentVolume defines volume information and container mount information. diff --git a/api/doris/v1/zz_generated.deepcopy.go b/api/doris/v1/zz_generated.deepcopy.go index 192269e5..1041fd78 100644 --- a/api/doris/v1/zz_generated.deepcopy.go +++ b/api/doris/v1/zz_generated.deepcopy.go @@ -151,6 +151,11 @@ func (in *BaseSpec) DeepCopyInto(out *BaseSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.SystemParameters != nil { + in, out := &in.SystemParameters, &out.SystemParameters + *out = make([]string, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BaseSpec. diff --git a/config/crd/bases/doris.selectdb.com_dorisclusters.yaml b/config/crd/bases/doris.selectdb.com_dorisclusters.yaml index 4b9564eb..928ffdb1 100644 --- a/config/crd/bases/doris.selectdb.com_dorisclusters.yaml +++ b/config/crd/bases/doris.selectdb.com_dorisclusters.yaml @@ -1440,6 +1440,11 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string + systemParameters: + description: SystemParameters for be and cn setting system parameters. + items: + type: string + type: array tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes @@ -2925,6 +2930,12 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string + systemParameters: + description: SystemParameters for be and cn setting system + parameters. + items: + type: string + type: array tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes @@ -5051,6 +5062,11 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string + systemParameters: + description: SystemParameters for be and cn setting system parameters. + items: + type: string + type: array tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes @@ -6482,6 +6498,11 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string + systemParameters: + description: SystemParameters for be and cn setting system parameters. + items: + type: string + type: array tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes diff --git a/doc/examples/doriscluster-sample-system-params.yaml b/doc/examples/doriscluster-sample-system-params.yaml new file mode 100644 index 00000000..1758b9bc --- /dev/null +++ b/doc/examples/doriscluster-sample-system-params.yaml @@ -0,0 +1,18 @@ +apiVersion: doris.selectdb.com/v1 +kind: DorisCluster +metadata: + labels: + app.kubernetes.io/name: doriscluster + app.kubernetes.io/instance: doriscluster-sample + app.kubernetes.io/part-of: doris-operator + name: doriscluster-sample-system-params + namespace: doris +spec: + feSpec: + replicas: 3 + image: selectdb/doris.fe-ubuntu:latest + beSpec: + replicas: 3 + image: selectdb/doris.be-ubuntu:latest + systemParameters: + - "vm.max_map_count=2000000" \ No newline at end of file diff --git a/pkg/common/utils/resource/pod.go b/pkg/common/utils/resource/pod.go index ca23c347..3789c1b1 100644 --- a/pkg/common/utils/resource/pod.go +++ b/pkg/common/utils/resource/pod.go @@ -1,6 +1,8 @@ package resource import ( + "strings" + v1 "github.com/selectdb/doris-operator/api/doris/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -135,6 +137,32 @@ func mergeEnvs(src []corev1.EnvVar, dst []corev1.EnvVar) []corev1.EnvVar { return dst } +func NewInitContainer(name string, params []string) corev1.Container { + enablePrivileged := true + c := corev1.Container{ + Image: "alpine:3.16", + Name: name, + Command: []string{"/sbin/sysctl", "-w", strings.Join(params, " ")}, + ImagePullPolicy: corev1.PullIfNotPresent, + SecurityContext: &corev1.SecurityContext{ + Privileged: &enablePrivileged, + }, + } + return c +} + +func GetVmSystemParameters(params []string) []string { + var vmParams []string + //Maybe need to check vm params + for _, p := range params { + p = strings.Trim(p, " ") + if strings.HasPrefix(p, "vm.") { + vmParams = append(vmParams, p) + } + } + return vmParams +} + func NewBaseMainContainer(dcr *v1.DorisCluster, config map[string]interface{}, componentType v1.ComponentType) corev1.Container { command, args := getCommand(componentType) var spec v1.BaseSpec diff --git a/pkg/controller/sub_controller/be/pod.go b/pkg/controller/sub_controller/be/pod.go index f26a1f0a..d1e6eb2a 100644 --- a/pkg/controller/sub_controller/be/pod.go +++ b/pkg/controller/sub_controller/be/pod.go @@ -2,10 +2,11 @@ package be import ( "context" + "strconv" + v1 "github.com/selectdb/doris-operator/api/doris/v1" "github.com/selectdb/doris-operator/pkg/common/utils/resource" corev1 "k8s.io/api/core/v1" - "strconv" ) func (be *Controller) buildBEPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTemplateSpec { @@ -15,6 +16,15 @@ func (be *Controller) buildBEPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTem beContainer := be.beContainer(dcr) containers = append(containers, beContainer) podTemplateSpec.Spec.Containers = containers + + params := dcr.Spec.FeSpec.SystemParameters + if len(params) > 0 { + //Only support system parameters starting with vm, like vm.max_map_count. + params = resource.GetVmSystemParameters(params) + beInitContainer := resource.NewInitContainer(string(v1.Component_BE)+"-init", params) + podTemplateSpec.Spec.InitContainers = []corev1.Container{beInitContainer} + } + return podTemplateSpec } diff --git a/pkg/controller/sub_controller/cn/pod.go b/pkg/controller/sub_controller/cn/pod.go index 5917324c..b44eff61 100644 --- a/pkg/controller/sub_controller/cn/pod.go +++ b/pkg/controller/sub_controller/cn/pod.go @@ -2,20 +2,30 @@ package cn import ( "context" + "strconv" + v1 "github.com/selectdb/doris-operator/api/doris/v1" "github.com/selectdb/doris-operator/pkg/common/utils/resource" corev1 "k8s.io/api/core/v1" - "strconv" ) func (cn *Controller) buildCnPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTemplateSpec { - podTemplateSpc := resource.NewPodTemplateSpc(dcr, v1.Component_CN) + podTemplateSpec := resource.NewPodTemplateSpc(dcr, v1.Component_CN) var containers []corev1.Container - containers = append(containers, podTemplateSpc.Spec.Containers...) + containers = append(containers, podTemplateSpec.Spec.Containers...) cnContainer := cn.cnContainer(dcr) containers = append(containers, cnContainer) - podTemplateSpc.Spec.Containers = containers - return podTemplateSpc + podTemplateSpec.Spec.Containers = containers + + params := dcr.Spec.CnSpec.SystemParameters + if len(params) > 0 { + //Only support system parameters starting with vm, like vm.max_map_count. + params = resource.GetVmSystemParameters(params) + cnInitContainer := resource.NewInitContainer(string(v1.Component_CN)+"-init", params) + podTemplateSpec.Spec.InitContainers = []corev1.Container{cnInitContainer} + } + + return podTemplateSpec } func (cn *Controller) cnContainer(dcr *v1.DorisCluster) corev1.Container { diff --git a/pkg/controller/sub_controller/fe/pod.go b/pkg/controller/sub_controller/fe/pod.go index 6f8191af..18a5157d 100644 --- a/pkg/controller/sub_controller/fe/pod.go +++ b/pkg/controller/sub_controller/fe/pod.go @@ -2,10 +2,11 @@ package fe import ( "context" + "strconv" + v1 "github.com/selectdb/doris-operator/api/doris/v1" "github.com/selectdb/doris-operator/pkg/common/utils/resource" corev1 "k8s.io/api/core/v1" - "strconv" ) func (fc *Controller) buildFEPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTemplateSpec { @@ -16,6 +17,9 @@ func (fc *Controller) buildFEPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTem feContainer := fc.feContainer(dcr, config) containers = append(containers, feContainer) podTemplateSpec.Spec.Containers = containers + + //FE currently does not support initcontainer. + return podTemplateSpec } From 9f0e5a05c9815a1b43f11ef6e5a2606fcb2479d0 Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Thu, 31 Aug 2023 21:04:25 +0800 Subject: [PATCH 2/7] change alpine image tag to latest --- pkg/common/utils/resource/pod.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/utils/resource/pod.go b/pkg/common/utils/resource/pod.go index 3789c1b1..dfa35fda 100644 --- a/pkg/common/utils/resource/pod.go +++ b/pkg/common/utils/resource/pod.go @@ -140,7 +140,7 @@ func mergeEnvs(src []corev1.EnvVar, dst []corev1.EnvVar) []corev1.EnvVar { func NewInitContainer(name string, params []string) corev1.Container { enablePrivileged := true c := corev1.Container{ - Image: "alpine:3.16", + Image: "alpine:latest", Name: name, Command: []string{"/sbin/sysctl", "-w", strings.Join(params, " ")}, ImagePullPolicy: corev1.PullIfNotPresent, From 7133af5680e1e92ed3ee5db299b8fe42a054dbde Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Thu, 31 Aug 2023 22:13:18 +0800 Subject: [PATCH 3/7] refactoring code --- Makefile | 2 +- api/doris/v1/types.go | 12 ++- api/doris/v1/zz_generated.deepcopy.go | 31 +++++-- .../doris.selectdb.com_dorisclusters.yaml | 81 ++++++++++++++----- pkg/common/utils/resource/pod.go | 31 +++---- pkg/common/utils/resource/statefulset.go | 2 +- pkg/controller/sub_controller/be/pod.go | 11 +-- pkg/controller/sub_controller/cn/pod.go | 11 +-- pkg/controller/sub_controller/fe/pod.go | 5 +- 9 files changed, 114 insertions(+), 72 deletions(-) diff --git a/Makefile b/Makefile index 6ca60bf9..23203a4b 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ test: manifests generate fmt vet envtest ## Run tests. .PHONY: build build: manifests generate fmt vet ## Build manager binary. - go build -ldflags=$(LDFLAGS) -o bin/manager cmd/main.go + go build -ldflags=$(LDFLAGS) -o bin/dorisoperator cmd/main.go .PHONY: run run: manifests generate fmt vet ## Run a controller from your host. diff --git a/api/doris/v1/types.go b/api/doris/v1/types.go index 8ff44dc3..0e339499 100644 --- a/api/doris/v1/types.go +++ b/api/doris/v1/types.go @@ -175,8 +175,16 @@ type BaseSpec struct { PersistentVolumes []PersistentVolume `json:"persistentVolumes,omitempty"` - //SystemParameters for be and cn setting system parameters. - SystemParameters []string `json:"systemParameters,omitempty"` + //SystemInitialization for fe, be and cn setting system parameters. + SystemInitialization SystemInitialization `json:"systemInitialization,omitempty"` +} + +type SystemInitialization struct { + // Entrypoint array. Not executed within a shell. + Command []string `json:"command,omitempty"` + + // Arguments to the entrypoint. + Args []string `json:"args,omitempty"` } // PersistentVolume defines volume information and container mount information. diff --git a/api/doris/v1/zz_generated.deepcopy.go b/api/doris/v1/zz_generated.deepcopy.go index 1041fd78..f81481b0 100644 --- a/api/doris/v1/zz_generated.deepcopy.go +++ b/api/doris/v1/zz_generated.deepcopy.go @@ -151,11 +151,7 @@ func (in *BaseSpec) DeepCopyInto(out *BaseSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.SystemParameters != nil { - in, out := &in.SystemParameters, &out.SystemParameters - *out = make([]string, len(*in)) - copy(*out, *in) - } + in.SystemInitialization.DeepCopyInto(&out.SystemInitialization) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BaseSpec. @@ -827,3 +823,28 @@ func (in *ResourceMetricSource) DeepCopy() *ResourceMetricSource { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SystemInitialization) DeepCopyInto(out *SystemInitialization) { + *out = *in + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SystemInitialization. +func (in *SystemInitialization) DeepCopy() *SystemInitialization { + if in == nil { + return nil + } + out := new(SystemInitialization) + in.DeepCopyInto(out) + return out +} diff --git a/config/crd/bases/doris.selectdb.com_dorisclusters.yaml b/config/crd/bases/doris.selectdb.com_dorisclusters.yaml index 928ffdb1..e5082687 100644 --- a/config/crd/bases/doris.selectdb.com_dorisclusters.yaml +++ b/config/crd/bases/doris.selectdb.com_dorisclusters.yaml @@ -1440,11 +1440,21 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string - systemParameters: - description: SystemParameters for be and cn setting system parameters. - items: - type: string - type: array + systemInitialization: + description: SystemInitialization for fe, be and cn setting system + parameters. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + type: object tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes @@ -2930,12 +2940,21 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string - systemParameters: - description: SystemParameters for be and cn setting system - parameters. - items: - type: string - type: array + systemInitialization: + description: SystemInitialization for fe, be and cn setting + system parameters. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + type: object tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes @@ -5062,11 +5081,21 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string - systemParameters: - description: SystemParameters for be and cn setting system parameters. - items: - type: string - type: array + systemInitialization: + description: SystemInitialization for fe, be and cn setting system + parameters. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + type: object tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes @@ -6498,11 +6527,21 @@ spec: serviceAccount: description: serviceAccount for cn access cloud service. type: string - systemParameters: - description: SystemParameters for be and cn setting system parameters. - items: - type: string - type: array + systemInitialization: + description: SystemInitialization for fe, be and cn setting system + parameters. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + type: object tolerations: description: (Optional) Tolerations for scheduling pods onto some dedicated nodes diff --git a/pkg/common/utils/resource/pod.go b/pkg/common/utils/resource/pod.go index dfa35fda..afe4a36e 100644 --- a/pkg/common/utils/resource/pod.go +++ b/pkg/common/utils/resource/pod.go @@ -1,8 +1,6 @@ package resource import ( - "strings" - v1 "github.com/selectdb/doris-operator/api/doris/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -34,16 +32,21 @@ const ( DEFAULT_ROOT_PATH = "/opt/apache-doris" ) -func NewPodTemplateSpc(dcr *v1.DorisCluster, componentType v1.ComponentType) corev1.PodTemplateSpec { +func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) corev1.PodTemplateSpec { spec := getBaseSpecFromCluster(dcr, componentType) var volumes []corev1.Volume + var initContainer corev1.Container switch componentType { case v1.Component_FE: volumes = newVolumesFromBaseSpec(dcr.Spec.FeSpec.BaseSpec) + initContainer = newBaseInitContainer(string(v1.Component_FE)+"-init", dcr.Spec.FeSpec.BaseSpec.SystemInitialization) case v1.Component_BE: volumes = newVolumesFromBaseSpec(dcr.Spec.BeSpec.BaseSpec) + initContainer = newBaseInitContainer(string(v1.Component_BE)+"-init", dcr.Spec.BeSpec.BaseSpec.SystemInitialization) + case v1.Component_CN: + initContainer = newBaseInitContainer(string(v1.Component_CN)+"-init", dcr.Spec.CnSpec.BaseSpec.SystemInitialization) default: - klog.Errorf("NewPodTemplateSpc dorisClusterName %s, namespace %s componentType %s not supported.", dcr.Name, dcr.Namespace, componentType) + klog.Errorf("NewPodTemplateSpec dorisClusterName %s, namespace %s componentType %s not supported.", dcr.Name, dcr.Namespace, componentType) } if len(volumes) == 0 { @@ -69,6 +72,9 @@ func NewPodTemplateSpc(dcr *v1.DorisCluster, componentType v1.ComponentType) cor Affinity: spec.Affinity, Tolerations: spec.Tolerations, HostAliases: spec.HostAliases, + InitContainers: []corev1.Container{ + initContainer, + }, }, } } @@ -137,13 +143,14 @@ func mergeEnvs(src []corev1.EnvVar, dst []corev1.EnvVar) []corev1.EnvVar { return dst } -func NewInitContainer(name string, params []string) corev1.Container { +func newBaseInitContainer(name string, si v1.SystemInitialization) corev1.Container { enablePrivileged := true c := corev1.Container{ Image: "alpine:latest", Name: name, - Command: []string{"/sbin/sysctl", "-w", strings.Join(params, " ")}, + Command: si.Command, ImagePullPolicy: corev1.PullIfNotPresent, + Args: si.Args, SecurityContext: &corev1.SecurityContext{ Privileged: &enablePrivileged, }, @@ -151,18 +158,6 @@ func NewInitContainer(name string, params []string) corev1.Container { return c } -func GetVmSystemParameters(params []string) []string { - var vmParams []string - //Maybe need to check vm params - for _, p := range params { - p = strings.Trim(p, " ") - if strings.HasPrefix(p, "vm.") { - vmParams = append(vmParams, p) - } - } - return vmParams -} - func NewBaseMainContainer(dcr *v1.DorisCluster, config map[string]interface{}, componentType v1.ComponentType) corev1.Container { command, args := getCommand(componentType) var spec v1.BaseSpec diff --git a/pkg/common/utils/resource/statefulset.go b/pkg/common/utils/resource/statefulset.go index 33ee6ac9..d17a231a 100644 --- a/pkg/common/utils/resource/statefulset.go +++ b/pkg/common/utils/resource/statefulset.go @@ -52,7 +52,7 @@ func NewStatefulSet(dcr *v1.DorisCluster, componentType v1.ComponentType) appv1. Spec: appv1.StatefulSetSpec{ Replicas: bSpec.Replicas, Selector: &selector, - Template: NewPodTemplateSpc(dcr, componentType), + Template: NewPodTemplateSpec(dcr, componentType), VolumeClaimTemplates: volumeClaimTemplates, ServiceName: v1.GenerateInternalCommunicateServiceName(dcr, componentType), RevisionHistoryLimit: metadata.GetInt32Pointer(5), diff --git a/pkg/controller/sub_controller/be/pod.go b/pkg/controller/sub_controller/be/pod.go index d1e6eb2a..2246709a 100644 --- a/pkg/controller/sub_controller/be/pod.go +++ b/pkg/controller/sub_controller/be/pod.go @@ -10,21 +10,12 @@ import ( ) func (be *Controller) buildBEPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTemplateSpec { - podTemplateSpec := resource.NewPodTemplateSpc(dcr, v1.Component_BE) + podTemplateSpec := resource.NewPodTemplateSpec(dcr, v1.Component_BE) var containers []corev1.Container containers = append(containers, podTemplateSpec.Spec.Containers...) beContainer := be.beContainer(dcr) containers = append(containers, beContainer) podTemplateSpec.Spec.Containers = containers - - params := dcr.Spec.FeSpec.SystemParameters - if len(params) > 0 { - //Only support system parameters starting with vm, like vm.max_map_count. - params = resource.GetVmSystemParameters(params) - beInitContainer := resource.NewInitContainer(string(v1.Component_BE)+"-init", params) - podTemplateSpec.Spec.InitContainers = []corev1.Container{beInitContainer} - } - return podTemplateSpec } diff --git a/pkg/controller/sub_controller/cn/pod.go b/pkg/controller/sub_controller/cn/pod.go index b44eff61..e73bd84e 100644 --- a/pkg/controller/sub_controller/cn/pod.go +++ b/pkg/controller/sub_controller/cn/pod.go @@ -10,21 +10,12 @@ import ( ) func (cn *Controller) buildCnPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTemplateSpec { - podTemplateSpec := resource.NewPodTemplateSpc(dcr, v1.Component_CN) + podTemplateSpec := resource.NewPodTemplateSpec(dcr, v1.Component_CN) var containers []corev1.Container containers = append(containers, podTemplateSpec.Spec.Containers...) cnContainer := cn.cnContainer(dcr) containers = append(containers, cnContainer) podTemplateSpec.Spec.Containers = containers - - params := dcr.Spec.CnSpec.SystemParameters - if len(params) > 0 { - //Only support system parameters starting with vm, like vm.max_map_count. - params = resource.GetVmSystemParameters(params) - cnInitContainer := resource.NewInitContainer(string(v1.Component_CN)+"-init", params) - podTemplateSpec.Spec.InitContainers = []corev1.Container{cnInitContainer} - } - return podTemplateSpec } diff --git a/pkg/controller/sub_controller/fe/pod.go b/pkg/controller/sub_controller/fe/pod.go index 18a5157d..eae848ff 100644 --- a/pkg/controller/sub_controller/fe/pod.go +++ b/pkg/controller/sub_controller/fe/pod.go @@ -10,16 +10,13 @@ import ( ) func (fc *Controller) buildFEPodTemplateSpec(dcr *v1.DorisCluster) corev1.PodTemplateSpec { - podTemplateSpec := resource.NewPodTemplateSpc(dcr, v1.Component_FE) + podTemplateSpec := resource.NewPodTemplateSpec(dcr, v1.Component_FE) var containers []corev1.Container //containers = append(containers, podTemplateSpec.Spec.Containers...) config, _ := fc.GetConfig(context.Background(), &dcr.Spec.FeSpec.ConfigMapInfo, dcr.Namespace) feContainer := fc.feContainer(dcr, config) containers = append(containers, feContainer) podTemplateSpec.Spec.Containers = containers - - //FE currently does not support initcontainer. - return podTemplateSpec } From ca5f71a0fff2de81217d586758353edb36b2a581 Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Thu, 31 Aug 2023 22:17:06 +0800 Subject: [PATCH 4/7] update yaml demo --- doc/examples/doriscluster-sample-system-params.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/examples/doriscluster-sample-system-params.yaml b/doc/examples/doriscluster-sample-system-params.yaml index 1758b9bc..6f10be55 100644 --- a/doc/examples/doriscluster-sample-system-params.yaml +++ b/doc/examples/doriscluster-sample-system-params.yaml @@ -14,5 +14,5 @@ spec: beSpec: replicas: 3 image: selectdb/doris.be-ubuntu:latest - systemParameters: - - "vm.max_map_count=2000000" \ No newline at end of file + systemInitialization: + command: ["/sbin/sysctl", "-w", "vm.max_map_count=2000000"] From d6ad96211edc136f1feceef7437e445354604a8f Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Fri, 1 Sep 2023 01:36:50 +0000 Subject: [PATCH 5/7] fix --- pkg/common/utils/resource/pod.go | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/pkg/common/utils/resource/pod.go b/pkg/common/utils/resource/pod.go index afe4a36e..5d804b10 100644 --- a/pkg/common/utils/resource/pod.go +++ b/pkg/common/utils/resource/pod.go @@ -39,12 +39,21 @@ func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) co switch componentType { case v1.Component_FE: volumes = newVolumesFromBaseSpec(dcr.Spec.FeSpec.BaseSpec) - initContainer = newBaseInitContainer(string(v1.Component_FE)+"-init", dcr.Spec.FeSpec.BaseSpec.SystemInitialization) + si := dcr.Spec.FeSpec.BaseSpec.SystemInitialization + if len(si.Command) > 0 || len(si.Args) > 0 { + initContainer = newBaseInitContainer(string(v1.Component_FE)+"-init", si) + } case v1.Component_BE: volumes = newVolumesFromBaseSpec(dcr.Spec.BeSpec.BaseSpec) - initContainer = newBaseInitContainer(string(v1.Component_BE)+"-init", dcr.Spec.BeSpec.BaseSpec.SystemInitialization) + si := dcr.Spec.BeSpec.BaseSpec.SystemInitialization + if len(si.Command) > 0 || len(si.Args) > 0 { + initContainer = newBaseInitContainer(string(v1.Component_BE)+"-init", si) + } case v1.Component_CN: - initContainer = newBaseInitContainer(string(v1.Component_CN)+"-init", dcr.Spec.CnSpec.BaseSpec.SystemInitialization) + si := dcr.Spec.CnSpec.BaseSpec.SystemInitialization + if len(si.Command) > 0 || len(si.Args) > 0 { + initContainer = newBaseInitContainer(string(v1.Component_CN)+"-init", si) + } default: klog.Errorf("NewPodTemplateSpec dorisClusterName %s, namespace %s componentType %s not supported.", dcr.Name, dcr.Namespace, componentType) } @@ -58,7 +67,7 @@ func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) co volumes = append(volumes, configVolume) } - return corev1.PodTemplateSpec{ + pts := corev1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Name: generatePodTemplateName(dcr, componentType), Labels: v1.GetPodLabels(dcr, componentType), @@ -72,11 +81,14 @@ func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) co Affinity: spec.Affinity, Tolerations: spec.Tolerations, HostAliases: spec.HostAliases, - InitContainers: []corev1.Container{ - initContainer, - }, }, } + + if initContainer.Name != "" { + pts.Spec.InitContainers = append(pts.Spec.InitContainers, initContainer) + } + + return pts } func newDefaultVolume(componentType v1.ComponentType) []corev1.Volume { From 33d1d0c6f9f82f9758ee7fd7fb2a3804a90e0804 Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Fri, 1 Sep 2023 05:54:35 +0000 Subject: [PATCH 6/7] update --- pkg/common/utils/resource/pod.go | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/pkg/common/utils/resource/pod.go b/pkg/common/utils/resource/pod.go index 5d804b10..c9b5fbd5 100644 --- a/pkg/common/utils/resource/pod.go +++ b/pkg/common/utils/resource/pod.go @@ -35,25 +35,16 @@ const ( func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) corev1.PodTemplateSpec { spec := getBaseSpecFromCluster(dcr, componentType) var volumes []corev1.Volume - var initContainer corev1.Container + var si v1.SystemInitialization switch componentType { case v1.Component_FE: volumes = newVolumesFromBaseSpec(dcr.Spec.FeSpec.BaseSpec) - si := dcr.Spec.FeSpec.BaseSpec.SystemInitialization - if len(si.Command) > 0 || len(si.Args) > 0 { - initContainer = newBaseInitContainer(string(v1.Component_FE)+"-init", si) - } + si = dcr.Spec.FeSpec.BaseSpec.SystemInitialization case v1.Component_BE: volumes = newVolumesFromBaseSpec(dcr.Spec.BeSpec.BaseSpec) - si := dcr.Spec.BeSpec.BaseSpec.SystemInitialization - if len(si.Command) > 0 || len(si.Args) > 0 { - initContainer = newBaseInitContainer(string(v1.Component_BE)+"-init", si) - } + si = dcr.Spec.BeSpec.BaseSpec.SystemInitialization case v1.Component_CN: - si := dcr.Spec.CnSpec.BaseSpec.SystemInitialization - if len(si.Command) > 0 || len(si.Args) > 0 { - initContainer = newBaseInitContainer(string(v1.Component_CN)+"-init", si) - } + si = dcr.Spec.CnSpec.BaseSpec.SystemInitialization default: klog.Errorf("NewPodTemplateSpec dorisClusterName %s, namespace %s componentType %s not supported.", dcr.Name, dcr.Namespace, componentType) } @@ -84,7 +75,8 @@ func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) co }, } - if initContainer.Name != "" { + if len(si.Command) > 0 || len(si.Args) > 0 { + initContainer := newBaseInitContainer("init", si) pts.Spec.InitContainers = append(pts.Spec.InitContainers, initContainer) } From 6993e6d59c8335c6b63927c576cf71572b7c7e87 Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Fri, 1 Sep 2023 06:19:44 +0000 Subject: [PATCH 7/7] fix --- api/doris/v1/types.go | 2 +- api/doris/v1/zz_generated.deepcopy.go | 6 +++++- pkg/common/utils/resource/pod.go | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/api/doris/v1/types.go b/api/doris/v1/types.go index 0e339499..7c152dc2 100644 --- a/api/doris/v1/types.go +++ b/api/doris/v1/types.go @@ -176,7 +176,7 @@ type BaseSpec struct { PersistentVolumes []PersistentVolume `json:"persistentVolumes,omitempty"` //SystemInitialization for fe, be and cn setting system parameters. - SystemInitialization SystemInitialization `json:"systemInitialization,omitempty"` + SystemInitialization *SystemInitialization `json:"systemInitialization,omitempty"` } type SystemInitialization struct { diff --git a/api/doris/v1/zz_generated.deepcopy.go b/api/doris/v1/zz_generated.deepcopy.go index f81481b0..bfd7c090 100644 --- a/api/doris/v1/zz_generated.deepcopy.go +++ b/api/doris/v1/zz_generated.deepcopy.go @@ -151,7 +151,11 @@ func (in *BaseSpec) DeepCopyInto(out *BaseSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } - in.SystemInitialization.DeepCopyInto(&out.SystemInitialization) + if in.SystemInitialization != nil { + in, out := &in.SystemInitialization, &out.SystemInitialization + *out = new(SystemInitialization) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BaseSpec. diff --git a/pkg/common/utils/resource/pod.go b/pkg/common/utils/resource/pod.go index c9b5fbd5..fc769e4e 100644 --- a/pkg/common/utils/resource/pod.go +++ b/pkg/common/utils/resource/pod.go @@ -35,7 +35,7 @@ const ( func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) corev1.PodTemplateSpec { spec := getBaseSpecFromCluster(dcr, componentType) var volumes []corev1.Volume - var si v1.SystemInitialization + var si *v1.SystemInitialization switch componentType { case v1.Component_FE: volumes = newVolumesFromBaseSpec(dcr.Spec.FeSpec.BaseSpec) @@ -75,7 +75,7 @@ func NewPodTemplateSpec(dcr *v1.DorisCluster, componentType v1.ComponentType) co }, } - if len(si.Command) > 0 || len(si.Args) > 0 { + if si != nil { initContainer := newBaseInitContainer("init", si) pts.Spec.InitContainers = append(pts.Spec.InitContainers, initContainer) } @@ -147,7 +147,7 @@ func mergeEnvs(src []corev1.EnvVar, dst []corev1.EnvVar) []corev1.EnvVar { return dst } -func newBaseInitContainer(name string, si v1.SystemInitialization) corev1.Container { +func newBaseInitContainer(name string, si *v1.SystemInitialization) corev1.Container { enablePrivileged := true c := corev1.Container{ Image: "alpine:latest",