in deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator.go [175:264]
func GenerateDeploy(rss *unifflev1alpha1.RemoteShuffleService, index int) *appsv1.Deployment {
name := GenerateNameByIndex(rss, index)
podSpec := corev1.PodSpec{
HostNetwork: *rss.Spec.Coordinator.HostNetwork,
ServiceAccountName: utils.GenerateCoordinatorName(rss),
Tolerations: rss.Spec.Coordinator.Tolerations,
Volumes: rss.Spec.Coordinator.Volumes,
NodeSelector: rss.Spec.Coordinator.NodeSelector,
Affinity: rss.Spec.Coordinator.Affinity,
ImagePullSecrets: rss.Spec.ImagePullSecrets,
}
configurationVolume := corev1.Volume{
Name: controllerconstants.ConfigurationVolumeName,
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: rss.Spec.ConfigMapName,
},
DefaultMode: pointer.Int32(0777),
},
},
}
podSpec.Volumes = append(podSpec.Volumes, configurationVolume)
if podSpec.HostNetwork {
podSpec.DNSPolicy = corev1.DNSClusterFirstWithHostNet
}
defaultLabels := map[string]string{
"app": name,
}
deploy := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: rss.Namespace,
Labels: defaultLabels,
},
Spec: appsv1.DeploymentSpec{
Selector: &metav1.LabelSelector{
MatchLabels: defaultLabels,
},
Replicas: rss.Spec.Coordinator.Replicas,
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: make(map[string]string),
},
Spec: podSpec,
},
},
}
for k, v := range rss.Spec.Coordinator.Labels {
deploy.Spec.Template.Labels[k] = v
}
for k, v := range defaultLabels {
deploy.Spec.Template.Labels[k] = v
}
// set runtimeClassName
if rss.Spec.Coordinator.RuntimeClassName != nil {
deploy.Spec.Template.Spec.RuntimeClassName = rss.Spec.Coordinator.RuntimeClassName
}
// add init containers, the main container and other containers.
deploy.Spec.Template.Spec.InitContainers = util.GenerateInitContainers(rss.Spec.Coordinator.RSSPodSpec)
containers := []corev1.Container{*generateMainContainer(rss)}
containers = append(containers, rss.Spec.Coordinator.SidecarContainers...)
deploy.Spec.Template.Spec.Containers = containers
// add configMap volume to save exclude nodes.
configMapVolume := corev1.Volume{
Name: controllerconstants.ExcludeNodesFile,
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: utils.GenerateCoordinatorName(rss),
},
DefaultMode: pointer.Int32(0777),
},
},
}
deploy.Spec.Template.Spec.Volumes = append(deploy.Spec.Template.Spec.Volumes, configMapVolume)
// add hostPath volumes for coordinators.
hostPathMounts := rss.Spec.Coordinator.HostPathMounts
logHostPath := rss.Spec.Coordinator.LogHostPath
deploy.Spec.Template.Spec.Volumes = append(deploy.Spec.Template.Spec.Volumes,
util.GenerateHostPathVolumes(hostPathMounts, logHostPath, name)...)
util.AddOwnerReference(&deploy.ObjectMeta, rss)
return deploy
}