in pkg/common/utils/resource/pod.go [419:531]
func NewBaseMainContainer(dcr *v1.DorisCluster, config map[string]interface{}, componentType v1.ComponentType) corev1.Container {
command, args := getCommand(componentType)
var spec v1.BaseSpec
var skipInit bool
switch componentType {
case v1.Component_FE:
spec = dcr.Spec.FeSpec.BaseSpec
case v1.Component_BE:
spec = dcr.Spec.BeSpec.BaseSpec
skipInit = dcr.Spec.BeSpec.SkipDefaultSystemInit
case v1.Component_CN:
spec = dcr.Spec.CnSpec.BaseSpec
skipInit = dcr.Spec.BeSpec.SkipDefaultSystemInit
case v1.Component_Broker:
spec = dcr.Spec.BrokerSpec.BaseSpec
default:
}
_, sharedVolumeMounts, sharedPaths := BuildSharedVolumesAndVolumeMounts(dcr.Spec.SharedPersistentVolumeClaims, componentType)
volumeMounts := buildVolumeMounts(spec, sharedPaths, config, componentType)
var envs []corev1.EnvVar
envs = append(envs, buildBaseEnvs(dcr)...)
envs = append(envs, buildKerberosEnv(dcr.Spec.KerberosInfo, config, componentType)...)
envs = mergeEnvs(envs, spec.EnvVars)
if skipInit {
// Only works when the doris version is higher than 2.1.8 or 3.0.4
// When the environment variable SKIP_CHECK_ULIMIT=true is passed in, the start_be.sh will not check system parameters like ulimit and vm.max_map_count etc.
envs = append(envs, corev1.EnvVar{Name: "SKIP_CHECK_ULIMIT", Value: "true"})
}
if len(GetMountConfigMapInfo(spec.ConfigMapInfo)) != 0 {
_, configVolumeMounts := getMultiConfigVolumeAndVolumeMount(&spec.ConfigMapInfo, componentType)
volumeMounts = append(volumeMounts, configVolumeMounts...)
}
if len(spec.Secrets) != 0 {
_, secretVolumeMounts := getMultiSecretVolumeAndVolumeMount(&spec, componentType)
volumeMounts = append(volumeMounts, secretVolumeMounts...)
}
if dcr.Spec.KerberosInfo != nil {
_, kerberosVolumeMounts := getKerberosVolumeAndVolumeMount(dcr.Spec.KerberosInfo)
volumeMounts = append(volumeMounts, kerberosVolumeMounts...)
}
// add basic auth secret volumeMount
if dcr.Spec.AuthSecret != "" {
volumeMounts = append(volumeMounts, corev1.VolumeMount{
Name: auth_volume_name,
MountPath: basic_auth_path,
})
}
if len(sharedVolumeMounts) != 0 {
volumeMounts = append(volumeMounts, sharedVolumeMounts...)
}
c := corev1.Container{
Image: spec.Image,
Name: string(componentType),
Command: command,
Args: args,
Ports: []corev1.ContainerPort{},
Env: envs,
VolumeMounts: volumeMounts,
ImagePullPolicy: corev1.PullIfNotPresent,
Resources: spec.ResourceRequirements,
}
//livenessPort use heartbeat port for probe service alive.
var livenessPort int32
//readnessPort use http port for confirm the service can provider service to client.
var readnessPort int32
var prestopScript string
var health_api_path string
var liveProbeType ProbeType
var readinessProbeType ProbeType
var commands []string
switch componentType {
case v1.Component_FE:
readnessPort = GetPort(config, HTTP_PORT)
livenessPort = GetPort(config, QUERY_PORT)
liveProbeType = TcpSocket
readinessProbeType = HttpGet
prestopScript = FE_PRESTOP
health_api_path = HEALTH_API_PATH
case v1.Component_BE, v1.Component_CN:
readnessPort = GetPort(config, WEBSERVER_PORT)
livenessPort = GetPort(config, HEARTBEAT_SERVICE_PORT)
liveProbeType = TcpSocket
readinessProbeType = HttpGet
prestopScript = BE_PRESTOP
health_api_path = HEALTH_API_PATH
case v1.Component_Broker:
livenessPort = GetPort(config, BROKER_IPC_PORT)
readnessPort = GetPort(config, BROKER_IPC_PORT)
liveProbeType = Exec
readinessProbeType = Exec
prestopScript = BROKER_PRESTOP
commands = append(commands, HEALTH_BROKER_LIVE_COMMAND, strconv.Itoa(int(livenessPort)))
default:
klog.Infof("the componentType %s is not supported in probe.", componentType)
}
// if tcpSocket the health_api_path will ignore.
c.LivenessProbe = livenessProbe(livenessPort, spec.LiveTimeout, health_api_path, commands, liveProbeType)
// use liveness as startup, when in debugging mode will not be killed
c.StartupProbe = startupProbe(livenessPort, spec.StartTimeout, health_api_path, commands, liveProbeType)
c.ReadinessProbe = readinessProbe(readnessPort, health_api_path, commands, readinessProbeType)
c.Lifecycle = lifeCycle(prestopScript)
return c
}