in internal/task/run_job.go [16:112]
func (tr *taskRunner) buildJobObject() (*k8sbatchv1.Job, error) {
taskName := tr.taskConfig.Name
k6RunnerImage := tr.taskConfig.K6.PodImage
scriptToRun := tr.script
var envFrom []k8scorev1.EnvFromSource
if len(tr.taskConfig.Configs) > 0 {
envFrom = append(envFrom, k8scorev1.EnvFromSource{
SecretRef: &k8scorev1.SecretEnvSource{
LocalObjectReference: k8scorev1.LocalObjectReference{
Name: tr.configsSecretName(),
},
},
})
}
var volumes []k8scorev1.Volume
if len(tr.taskConfig.Files) > 0 {
volumes = append(volumes, k8scorev1.Volume{
Name: scriptsVolumeName,
VolumeSource: k8scorev1.VolumeSource{
ConfigMap: &k8scorev1.ConfigMapVolumeSource{
LocalObjectReference: k8scorev1.LocalObjectReference{
Name: tr.scriptsConfigMapName(),
},
},
},
})
}
rv := &k8sbatchv1.Job{
ObjectMeta: k8smetav1.ObjectMeta{
Name: tr.taskJobName(),
Namespace: tr.objectNamespace(),
Labels: map[string]string{
labelKeyTaskName: taskName,
},
},
Spec: k8sbatchv1.JobSpec{
TTLSecondsAfterFinished: stdlib.Ptr[int32](100),
Parallelism: stdlib.Ptr[int32](tr.instances), // TODO: configurable
Completions: stdlib.Ptr[int32](tr.instances), // TODO: configurable
ManualSelector: stdlib.Ptr(true),
Selector: &k8smetav1.LabelSelector{
MatchLabels: map[string]string{
labelKeyTaskName: taskName,
},
},
Template: k8scorev1.PodTemplateSpec{
ObjectMeta: k8smetav1.ObjectMeta{
Labels: map[string]string{
labelKeyTaskName: taskName,
},
},
Spec: k8scorev1.PodSpec{
Containers: []k8scorev1.Container{
{
Name: containerNameRunner,
Image: k6RunnerImage,
Args: []string{"run", scriptToRun},
VolumeMounts: []k8scorev1.VolumeMount{
{
Name: scriptsVolumeName,
MountPath: containerScriptsPath,
},
},
EnvFrom: envFrom,
WorkingDir: containerScriptsPath,
},
},
RestartPolicy: "Never",
Volumes: volumes,
Affinity: &k8scorev1.Affinity{
PodAntiAffinity: &k8scorev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []k8scorev1.PodAffinityTerm{
{
LabelSelector: &k8smetav1.LabelSelector{
MatchExpressions: []k8smetav1.LabelSelectorRequirement{
{
Key: labelKeyTaskName,
Operator: "In",
Values: []string{taskName},
},
},
},
TopologyKey: "kubernetes.io/hostname",
},
},
},
},
},
},
},
}
return rv, nil
}