in pkg/controllers/jobset_controller.go [386:420]
func (r *JobSetReconciler) createHeadlessSvcIfNotExist(ctx context.Context, js *jobset.JobSet, rjob *jobset.ReplicatedJob) error {
log := ctrl.LoggerFrom(ctx)
// Check if service already exists. Service name is <jobSetName>-<replicatedJobName>.
// If the service does not exist, create it.
var headlessSvc corev1.Service
subdomain := GenSubdomain(js, rjob)
if err := r.Get(ctx, types.NamespacedName{Name: subdomain, Namespace: js.Namespace}, &headlessSvc); err != nil {
headlessSvc := corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: subdomain,
Namespace: js.Namespace,
},
Spec: corev1.ServiceSpec{
ClusterIP: "None",
Selector: map[string]string{
jobset.JobSetNameKey: js.Name,
jobset.ReplicatedJobNameKey: rjob.Name,
},
},
}
// Set controller owner reference for garbage collection and reconcilation.
if err := ctrl.SetControllerReference(js, &headlessSvc, r.Scheme); err != nil {
return err
}
// Create headless service.
if err := r.Create(ctx, &headlessSvc); err != nil {
return err
}
log.V(2).Info("successfully created headless service", "service", klog.KObj(&headlessSvc))
}
return nil
}